Akademia Górniczo-Hutnicza
im. Stanisława Staszica w Krakowie
Technika Mikroprocesorowa
Podprogramy, procedury, - obsługa stosu i banków rejestrów.
Opracowali:
Paweł Jóźwik
Jakub Kaulbert
(Gr.03)
1.Kod programu z komentarzami
ORG 00H ; Ustawienie PC na wartość 00H
MOV A,#20H ; Przypisanie do akumulatora liczby 20H
MOV DPTR,#0F0FH ; Przypisanie do DPTR liczby 0F0FH
MOV 50H,#05H ; Przypisanie komórce pamięci 50H wartości 05H
MOV 51H,#06H ; Przypisanie komórce pamięci 51H wartości 06H
MOV R1,50H ; Przepisanie wartości z komórki R1 do rejestru R2
MOV R2,51H ; Przepisanie wartości z komórki R1 do rejestru R2
MOV SP,#20H ; Przypisanie do SP liczby 20H
LJMP START ; Skok do początku programu
ORG 100H ; Ustawienie PC na wartość 100H
START: ; Początek programu
CALL JBK ; Instrukcja skoku do procedury JBK
MOV R0,#03H ; Linijka kontrolna przypisująca do rejestru R0 wartość 03H
KONIEC: LJMP KONIEC ; Pętla Końca programu
ORG 200H ; Ustawienie PC na wartość 200H
JBK: ; Początek procedury
PUSH ACC ; Umieszczenie na początku stosu ACC
PUSH DPH ; Umieszczenie na początku stosu DPH (bit starszy DPTR)
PUSH DPL ; Umieszczenie na początku stosu DPL (bit młodszy DPTR)
PUSH PSW ; Umieszczenie na początku stosu PSW
PUSH B ; Umieszczenie na początku stosu B
SETB RS0 ;Wybór banku 1 (0 1)
CLR RS1
MOV R1,50H ; Przypisanie rejestrowi R1 banku pierwszego wartości przechowywanej w komórce 50H
MOV R2,51H ; Przypisanie rejestrowi R2 banku pierwszego wartości przechowywanej w komórce 51H
MOV A,R1 ; Przepisanie wartości z rejestru R1 banku pierwszego do akumulatora
CPL A ; Negacja wartości znajdującej się w Akumulatorze
MOV R3,A ; Przepisanie wartości zanegowanej z akumulatoa do rejestru R3 banku pierwszego
MOV A,R2 ; Przepisanie wartości z rejestru R2 banku pierwszego do akumulatora
CPL A ; Negacja wartości znajdującej się w Akumulatorze
MOV R4,A ; Przepisanie wartości zanegowanej z akumulatoa do rejestru R4 banku pierwszego SETB RS1 ; Wybór banku 2 (1 0)
CLR RS0
MOV A,50H ; Przepisanie wartości do akumulatora z komórki 50H
MOV B,51H ; Przepisanie wartości do B z komórki 51H
MUL AB ; Wykonanie mnożenia wartości znajdujących się w A i B. Wynik mnożenia przechowywany w A
MOV R1,A ; Przepisanie wyniku mnożenia do rejestru R1 baku 2
MOV R2,A ; Przepisanie wyniku mnożenia do rejestru R2 banku 2
CLR RS0 ; wybór banku 1 (0,1)
CLR RS1
POP B ; Zdjęcie ze stosu B
POP PSW ; Zdjęcie ze stosu PSW
POP DPL ; Zdjęcie ze stosu DPL
POP DPH ; Zdjęcie ze stosu DPH
POP ACC ; Zdjęcie ze stosu ACC
RET ; Zakończenie procedury. Powrót do programu
END;<3
2.Opis działania programu
Na samym początku programu ustawiana jest wartość startowa PC. Następnie program przypisuje wartości startowe dla A, DPTR, SP, komórek pamięci 50H i 51H oraz przepisuje wartości z tych komórek do rejestrów R1 i R2 banku 0. Po przypisaniu wartości startowych rozpoczyna się program główny, w którym na samym początku wykonywane jest przejście do procedury JBK. W tej procedurze na początku na stos zrzucane są ACC, DPTR (złożone z bitów DPH i DPL), B i PSW. W kolejnym kroku program przełącza się z banku 0 na bank 1 poprzez przydzielenie bitom RS0 i RS1 wartości kolejno 0 i 1. W dalszej kolejności rejestrom R1 i R2 zostają przydzielone wartości z komórek 50H i 51H. Rejestrom R3 i R4 zostają przypisane negacje bitowe R1 i R2 z akumulatora poprzez przepisanie wartości z R1 i R2 do A i ich zanegowanie przy pomocy instrukcji CPL. Następnie następuje przełączenie do banku 2 (RS0 = 1 i RS1 = 0). Do rejestrów R1 i R2 z banku 2 zostaje wpisany wynik mnożenia wartości znajdujących się w komórkach 50H i 51H poprzez przepisanie ich wartości kolejno do A i B w celu wykonania mnożenia przy użyciu funkcji MUL. Na koniec procedury następuje przełączenie do banku 0 (RS0 = 0 i RS1 = 0) i zdjęcie ze stosu A, DPTR, B i PSW. Po zakończeniu procedury następuje powrót do programu głównego w którym następuje kontrolne przypisanie wartości 03H do rejestru R0 w banku 0.
3.Listing programu
lab4 PAGE 1
1 ORG 00H; Ustawienie PC na wartość 00H
0000 7420 2 MOV A,#20H; Przypisanie do akumulatora liczby 20H
0002 900F0F 3 MOV DPTR,#0F0FH; Przypisanie do DPTR liczby 0F0FH
0005 755005 4 MOV 50H,#05H; Przypisanie komórce pamięci 50H wartości 05H
0008 755106 5 MOV 51H,#06H; Przypisanie komórce pamięci 51H wartości 06H
000B A950 6 MOV R1,50H; Przepisanie wartości z komórki R1 do rejestru R2
000D AA51 7 MOV R2,51H; Przepisanie wartości z komórki R1 do rejestru R2
000F 758120 8 MOV SP,#20H; Przypisanie do SP liczby 20H
9
0012 020100 10 LJMP START; Skok do początku programu
11
12 ORG 100H; Ustawienie PC na wartość 100H
13 START:; Początek programu
0100 120200 14 CALL JBK; Instrukcja skoku do procedury JBK
0103 7803 15 MOV R0,#03H; Linijka kontrolna przypisująca do rejestru R0 wartość 03H
0105 020105 16 KONIEC: LJMP KONIEC; Pętla Końca programu
17 ORG 200H; Ustawienie PC na wartość 200H
18 JBK:; Początek procedury
0200 C0E0 19 PUSH ACC; Umieszczenie na początku stosu ACC
0202 C083 20 PUSH DPH; Umieszczenie na początku stosu DPH (bit starszy DPTR)
0204 C082 21 PUSH DPL; Umieszczenie na początku stosu DPL (bit młodszy DPTR)
0206 C0D0 22 PUSH PSW; Umieszczenie na początku stosu PSW
0208 C0F0 23 PUSH B; Umieszczenie na początku stosu B
020A D2D3 24 SETB RS0 ;Wybór banku 1 (0 1)
020C C2D4 25 CLR RS1
020E A950 26 MOV R1,50H; Przypisanie rejestrowi R1 banku pierwszego wartości przechowywanej w komórce 50H
0210 AA51 27 MOV R2,51H; Przypisanie rejestrowi R2 banku pierwszego wartości przechowywanej w komórce 51H
0212 E9 28 MOV A,R1; Przepisanie wartości z rejestru R1 banku pierwszego do akumulatora
0213 F4 29 CPL A ; Negacja wartości znajdującej się w Akumulatorze
0214 FB 30 MOV R3,A ; Przepisanie wartości zanegowanej z akumulatoa do rejestru R3 banku pierwszego
0215 EA 31 MOV A,R2; Przepisanie wartości z rejestru R2 banku pierwszego do akumulatora
0216 F4 32 CPL A ; Negacja wartości znajdującej się w Akumulatorze
0217 FC 33 MOV R4,A ; Przepisanie wartości zanegowanej z akumulatoa do rejestru R4 banku pierwszego
0218 D2D4 34 SETB RS1 ; Wybór banku 2 (1 0)
021A C2D3 35 CLR RS0
021C E550 36 MOV A,50H; Przepisanie wartości do akumulatora z komórki 50H
021E 8551F0 37 MOV B,51H; Przepisanie wartości do B z komórki 51H
0221 A4 38 MUL AB; Wykonanie mnożenia wartości znajdujących się w A i B. Wynik mnożenia przechowywany w
0222 F9 39 MOV R1,A; Przepisanie wyniku mnożenia do rejestru R1 baku 2
0223 FA 40 MOV R2,A; Przepisanie wyniku mnożenia do rejestru R2 banku 2
0224 C2D3 41 CLR RS0; wybór banku 1 (0,1)
0226 C2D4 42 CLR RS1
0228 D0F0 43 POP B; Zdjęcie ze stosu B
022A D0D0 44 POP PSW; Zdjęcie ze stosu PSW
022C D082 45 POP DPL; Zdjęcie ze stosu DPL
022E D083 46 POP DPH; Zdjęcie ze stosu DPH
0230 D0E0 47 POP ACC; Zdjęcie ze stosu ACC
0232 22 48 RET; Zakończenie procedury. Powrót do programu
49 END;<3
ASSEMBLY COMPLETE, NO ERRORS FOUND, NO WARNINGS
SYMBOL TABLE:
??MCU_8051_IDE . . . . . . . . . . . N NUMB 8051H NOT USED
??VERSION. . . . . . . . . . . . . . N NUMB 0147H NOT USED
AC . . . . . . . . . . . . . . . . . B ADDR 00D6H NOT USED
ACC. . . . . . . . . . . . . . . . . D ADDR 00E0H
ACSR . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
ADCF . . . . . . . . . . . . . . . . D ADDR 00F6H NOT USED
ADCLK. . . . . . . . . . . . . . . . D ADDR 00F2H NOT USED
ADCON. . . . . . . . . . . . . . . . D ADDR 00F3H NOT USED
ADDH . . . . . . . . . . . . . . . . D ADDR 00F5H NOT USED
ADDL . . . . . . . . . . . . . . . . D ADDR 00F4H NOT USED
AUXR . . . . . . . . . . . . . . . . D ADDR 008EH NOT USED
AUXR1. . . . . . . . . . . . . . . . D ADDR 00A2H NOT USED
B. . . . . . . . . . . . . . . . . . D ADDR 00F0H
BDRCON . . . . . . . . . . . . . . . D ADDR 009BH NOT USED
BDRCON_1 . . . . . . . . . . . . . . D ADDR 009CH NOT USED
BRL. . . . . . . . . . . . . . . . . D ADDR 009AH NOT USED
CCAP0H . . . . . . . . . . . . . . . D ADDR 00FAH NOT USED
CCAP0L . . . . . . . . . . . . . . . D ADDR 00EAH NOT USED
CCAP1H . . . . . . . . . . . . . . . D ADDR 00FBH NOT USED
CCAP1L . . . . . . . . . . . . . . . D ADDR 00EBH NOT USED
CCAP2H . . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
CCAP3H . . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
CCAP4H . . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
CCAPL2H. . . . . . . . . . . . . . . D ADDR 00FCH NOT USED
CCAPL2L. . . . . . . . . . . . . . . D ADDR 00ECH NOT USED
CCAPL3H. . . . . . . . . . . . . . . D ADDR 00FDH NOT USED
CCAPL3L. . . . . . . . . . . . . . . D ADDR 00EDH NOT USED
CCAPL4H. . . . . . . . . . . . . . . D ADDR 00FEH NOT USED
CCAPL4L. . . . . . . . . . . . . . . D ADDR 00EEH NOT USED
CCAPM0 . . . . . . . . . . . . . . . D ADDR 00DAH NOT USED
CCAPM1 . . . . . . . . . . . . . . . D ADDR 00DBH NOT USED
CCAPM2 . . . . . . . . . . . . . . . D ADDR 00DCH NOT USED
CCAPM3 . . . . . . . . . . . . . . . D ADDR 00DDH NOT USED
CCAPM4 . . . . . . . . . . . . . . . D ADDR 00DEH NOT USED
CCF0 . . . . . . . . . . . . . . . . B ADDR 00D8H NOT USED
CCF1 . . . . . . . . . . . . . . . . B ADDR 00D9H NOT USED
CCF2 . . . . . . . . . . . . . . . . B ADDR 00DAH NOT USED
CCF3 . . . . . . . . . . . . . . . . B ADDR 00DBH NOT USED
CCF4 . . . . . . . . . . . . . . . . B ADDR 00DCH NOT USED
CCON . . . . . . . . . . . . . . . . D ADDR 00D8H NOT USED
CFINT. . . . . . . . . . . . . . . . C ADDR 0033H NOT USED
CH . . . . . . . . . . . . . . . . . D ADDR 00F9H NOT USED
CKCON. . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
CKCON0 . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
CKRL . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED
CKSEL. . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
CL . . . . . . . . . . . . . . . . . D ADDR 00E9H NOT USED
CLKREG . . . . . . . . . . . . . . . D ADDR 008FH NOT USED
CMOD . . . . . . . . . . . . . . . . D ADDR 00D9H NOT USED
CPRL2. . . . . . . . . . . . . . . . B ADDR 00C8H NOT USED
CR . . . . . . . . . . . . . . . . . B ADDR 00DEH NOT USED
CT2. . . . . . . . . . . . . . . . . B ADDR 00C9H NOT USED
CY . . . . . . . . . . . . . . . . . B ADDR 00D7H NOT USED
DP0H . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED
DP0L . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED
DP1H . . . . . . . . . . . . . . . . D ADDR 0085H NOT USED
DP1L . . . . . . . . . . . . . . . . D ADDR 0084H NOT USED
DPH. . . . . . . . . . . . . . . . . D ADDR 0083H
DPL. . . . . . . . . . . . . . . . . D ADDR 0082H
EA . . . . . . . . . . . . . . . . . B ADDR 00AFH NOT USED
EC . . . . . . . . . . . . . . . . . B ADDR 00AEH NOT USED
EECON. . . . . . . . . . . . . . . . D ADDR 0096H NOT USED
ES . . . . . . . . . . . . . . . . . B ADDR 00ACH NOT USED
ET0. . . . . . . . . . . . . . . . . B ADDR 00A9H NOT USED
ET1. . . . . . . . . . . . . . . . . B ADDR 00ABH NOT USED
ET2. . . . . . . . . . . . . . . . . B ADDR 00ADH NOT USED
EX0. . . . . . . . . . . . . . . . . B ADDR 00A8H NOT USED
EX1. . . . . . . . . . . . . . . . . B ADDR 00AAH NOT USED
EXEN2. . . . . . . . . . . . . . . . B ADDR 00CBH NOT USED
EXF2 . . . . . . . . . . . . . . . . B ADDR 00CEH NOT USED
EXTI0. . . . . . . . . . . . . . . . C ADDR 0003H NOT USED
EXTI1. . . . . . . . . . . . . . . . C ADDR 0013H NOT USED
F0 . . . . . . . . . . . . . . . . . B ADDR 00D5H NOT USED
FE . . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
IE . . . . . . . . . . . . . . . . . D ADDR 00A8H NOT USED
IE0. . . . . . . . . . . . . . . . . B ADDR 0089H NOT USED
IE1. . . . . . . . . . . . . . . . . B ADDR 008BH NOT USED
INT0 . . . . . . . . . . . . . . . . B ADDR 00B2H NOT USED
INT1 . . . . . . . . . . . . . . . . B ADDR 00B3H NOT USED
IP . . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
IPH. . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
IPH0 . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED
IPH1 . . . . . . . . . . . . . . . . D ADDR 00B3H NOT USED
IPL0 . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED
IPL1 . . . . . . . . . . . . . . . . D ADDR 00B2H NOT USED
IT0. . . . . . . . . . . . . . . . . B ADDR 0088H NOT USED
IT1. . . . . . . . . . . . . . . . . B ADDR 008AH NOT USED
JBK. . . . . . . . . . . . . . . . . C ADDR 0200H
KBE. . . . . . . . . . . . . . . . . D ADDR 009DH NOT USED
KBF. . . . . . . . . . . . . . . . . D ADDR 009EH NOT USED
KBLS . . . . . . . . . . . . . . . . D ADDR 009CH NOT USED
KONIEC . . . . . . . . . . . . . . . C ADDR 0105H
OSCCON . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
OV . . . . . . . . . . . . . . . . . B ADDR 00D2H NOT USED
P. . . . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED
P0 . . . . . . . . . . . . . . . . . D ADDR 0080H NOT USED
P1 . . . . . . . . . . . . . . . . . D ADDR 0090H NOT USED
P1M1 . . . . . . . . . . . . . . . . D ADDR 00D4H NOT USED
P1M2 . . . . . . . . . . . . . . . . D ADDR 00E2H NOT USED
P2 . . . . . . . . . . . . . . . . . D ADDR 00A0H NOT USED
P3 . . . . . . . . . . . . . . . . . D ADDR 00B0H NOT USED
P3M1 . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
P3M2 . . . . . . . . . . . . . . . . D ADDR 00E3H NOT USED
P4 . . . . . . . . . . . . . . . . . D ADDR 00C0H NOT USED
P4M1 . . . . . . . . . . . . . . . . D ADDR 00D6H NOT USED
P4M2 . . . . . . . . . . . . . . . . D ADDR 00E4H NOT USED
P5 . . . . . . . . . . . . . . . . . D ADDR 00E8H NOT USED
PC . . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
PCON . . . . . . . . . . . . . . . . D ADDR 0087H NOT USED
PPCL . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED
PS . . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
PSL. . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED
PSW. . . . . . . . . . . . . . . . . D ADDR 00D0H
PT0. . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
PT0L . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED
PT1. . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
PT1L . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED
PT2. . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
PT2L . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED
PX0. . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
PX0L . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED
PX1. . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
PX1L . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED
RB8. . . . . . . . . . . . . . . . . B ADDR 009AH NOT USED
RCAP2H . . . . . . . . . . . . . . . D ADDR 00CBH NOT USED
RCAP2L . . . . . . . . . . . . . . . D ADDR 00CAH NOT USED
RCLK . . . . . . . . . . . . . . . . B ADDR 00CDH NOT USED
RD . . . . . . . . . . . . . . . . . B ADDR 00B7H NOT USED
REN. . . . . . . . . . . . . . . . . B ADDR 009CH NOT USED
RESET. . . . . . . . . . . . . . . . C ADDR 0000H NOT USED
RI . . . . . . . . . . . . . . . . . B ADDR 0098H NOT USED
RS0. . . . . . . . . . . . . . . . . B ADDR 00D3H
RS1. . . . . . . . . . . . . . . . . B ADDR 00D4H
RXD. . . . . . . . . . . . . . . . . B ADDR 00B0H NOT USED
SADDR. . . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
SADDR_0. . . . . . . . . . . . . . . D ADDR 00A9H NOT USED
SADDR_1. . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
SADEN. . . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
SADEN_0. . . . . . . . . . . . . . . D ADDR 00B9H NOT USED
SADEN_1. . . . . . . . . . . . . . . D ADDR 00BAH NOT USED
SBUF . . . . . . . . . . . . . . . . D ADDR 0099H NOT USED
SCON . . . . . . . . . . . . . . . . D ADDR 0098H NOT USED
SINT . . . . . . . . . . . . . . . . C ADDR 0023H NOT USED
SM0. . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED
SM1. . . . . . . . . . . . . . . . . B ADDR 009EH NOT USED
SM2. . . . . . . . . . . . . . . . . B ADDR 009DH NOT USED
SP . . . . . . . . . . . . . . . . . D ADDR 0081H
SPCON. . . . . . . . . . . . . . . . D ADDR 00C3H NOT USED
SPCR . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED
SPDAT. . . . . . . . . . . . . . . . D ADDR 00C5H NOT USED
SPDR . . . . . . . . . . . . . . . . D ADDR 0086H NOT USED
SPSR . . . . . . . . . . . . . . . . D ADDR 00AAH NOT USED
SPSTA. . . . . . . . . . . . . . . . D ADDR 00C4H NOT USED
START. . . . . . . . . . . . . . . . C ADDR 0100H
T0 . . . . . . . . . . . . . . . . . B ADDR 00B4H NOT USED
T1 . . . . . . . . . . . . . . . . . B ADDR 00B5H NOT USED
T2CON. . . . . . . . . . . . . . . . D ADDR 00C8H NOT USED
T2MOD. . . . . . . . . . . . . . . . D ADDR 00C9H NOT USED
TB8. . . . . . . . . . . . . . . . . B ADDR 009BH NOT USED
TCLK . . . . . . . . . . . . . . . . B ADDR 00CCH NOT USED
TCON . . . . . . . . . . . . . . . . D ADDR 0088H NOT USED
TF0. . . . . . . . . . . . . . . . . B ADDR 008DH NOT USED
TF1. . . . . . . . . . . . . . . . . B ADDR 008FH NOT USED
TF2. . . . . . . . . . . . . . . . . B ADDR 00CFH NOT USED
TH0. . . . . . . . . . . . . . . . . D ADDR 008CH NOT USED
TH1. . . . . . . . . . . . . . . . . D ADDR 008DH NOT USED
TH2. . . . . . . . . . . . . . . . . D ADDR 00CDH NOT USED
TI . . . . . . . . . . . . . . . . . B ADDR 0099H NOT USED
TIMER0 . . . . . . . . . . . . . . . C ADDR 000BH NOT USED
TIMER1 . . . . . . . . . . . . . . . C ADDR 001BH NOT USED
TIMER2 . . . . . . . . . . . . . . . C ADDR 002BH NOT USED
TL0. . . . . . . . . . . . . . . . . D ADDR 008AH NOT USED
TL1. . . . . . . . . . . . . . . . . D ADDR 008BH NOT USED
TL2. . . . . . . . . . . . . . . . . D ADDR 00CCH NOT USED
TMOD . . . . . . . . . . . . . . . . D ADDR 0089H NOT USED
TR0. . . . . . . . . . . . . . . . . B ADDR 008CH NOT USED
TR1. . . . . . . . . . . . . . . . . B ADDR 008EH NOT USED
TR2. . . . . . . . . . . . . . . . . B ADDR 00CAH NOT USED
TXD. . . . . . . . . . . . . . . . . B ADDR 00B1H NOT USED
WDTCON . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
WDTPRG . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED
WDTRST . . . . . . . . . . . . . . . D ADDR 00A6H NOT USED
WR . . . . . . . . . . . . . . . . . B ADDR 00B6H NOT USED
4.Tabela
Lp | Rozkaz | Wartość SP | Wartość PC | Zawartość stosu (wszystkie bajty) | Opis |
1 | CALL | 20H | 0100H | SP (stack pointer) ma wartość 20H, ponieważ została ona wcześniej przydzielona komendą MOV SP,#20H. PC (program counter) ma wartość 100H, ponieważ wcześniej nastąpiła komenda ORG 100H, która przydziela następnej komendzie adres 100H. Stos jest pusty, ponieważ nie był on w żaden sposób modyfikowany. |
|
2 | Pierwszy rozkaz procedury |
22H | 0200H | 03H, 01H | SP ma wartość 22H, ponieważ wywołanie procedury (CALL) spowodowało zapisanie na stosie dwóch bajtów, które są adresem komendy, która następuje po funkcji CALL, czyli po skończeniu procedury. PC wynosi 200H, ponieważ procedura została umieszczona w pamięci zaczynając się od adresu 200H (ORG 200H) |
3 | RET | 22H | 0232H | 03H,01H,20H, 0FH,0FH,01H | SP ma wartość 22H, ponieważ w procedurze funkcja PUSH została użyta tyle samo razy co funkcja POP (podczas procedury SP wzrósł do 27H), więc także zawartość stosu jest taka sama jak na początku procedury, ponieważ wszystkie wartości, które zostały na nim umieszczone zostały z niego zdjęte. PC ma wartość 232H, ponieważ ostatnia komenda procedury jest umieszczona pod adresem 232H. Cała procedura zajmuje w pamięci programu komórki od 200H do 232H. |
4 | Pierwszy rozkaz programu głównego po CALL |
20H | 0103H | SP ma wartość 20H, ponieważ funkcja RET wyciągnęła ze stosu 2 bajty adresu następnej komendy. Z tego powodu PC uzyskał wartość 103H, a stos stał się pusty. |