ZPOC Online: 9. Pokračovanie v programovaní procesora
Zo stránky SensorWiki
Tento týždeň pokračujeme prácou s trocha náročnejšími programami.
Nájdi väčšie z dvoch čísel
V pamäti sú za sebou uložené dve čísla. Nájdi väčšie z nich a ulož ho na ďalšiu pozíciu v pamäti.
.ORG 0010H
DB 03H,02H,00H ; tri cisla v pamati, tretie je 0 rezervovana pre vysledok
.ORG 0000
LXI H,0010h ; do HL adresu prveho cisla na adrese 0010
MOV A,M ; do Akumulatora prve cislo z adresy {HL}
INX H ; HL <-- HL + 1
CMP M ; porovnaj {HL} a Akumulátor
JNC HOTOVO ; ak A > {HL} skoc na HOTOVO:
MOV A,M ; v opacnom pripade presun do A druhu hodnotu
HOTOVO: INX H ; HL <-- HL + 1
MOV M,A ; uloz vysledok na nasl. adresu
HLT
Inštrukcia CMP M nastaví F tak, ako keby bol obsah z M odpočítaný od obsahu A. Na rozdiel od SUB však obsah Akumulátora ostáva nezmenený. Ak A je obsah Akumulátora a X je obsah M, tak F je nastavené nasledovne:
Zero = 1 if A = X Zero = 0 if A ≠ X Carry = 1 if A < X Carry = 0 if A ≥ X
(A a X chápeme ako neznamienkové binárne čísla)
Spočítajte N čísel
Spočítajte N čísel so začiatkom na adrese 031h, pričom ich počet je na 030h. Výsledok uložte na 040h.
.ORG 0030h
DB 03h,01h,02h,03h
.ORG 0000
LDA 0030H
MOV C,A ; Initialize C-counter
SUB A ; sum = 0
LXI H,0031H ; Initialize pointer
BACK: ADD M ; SUM = SUM + data
INX H ; increment pointer
DCR C ; Decrement counter
JNZ BACK ; if counter 0 repeat
STA 040H ; Store sum
HLT ; Terminate program execution
Nájdi maximum v bloku hodnôt.
V pamäti je uložený blok dát. Prvé číslo v bloku je počet dát, nasleduje neusporiadaná množina 8-bitových hodnôt.
.org 0020H
db 03h,02h,03h,01h ; tri cisla = { 02, 03, 01 }
.org 0000
lda 0020H
mov C,A ; Initialize counter
sub A ; Maximum = Minimum possible value = 0
lxi H,0021H ; Initialize pointer
BACK: cmp M ; Is number > maximum
jnc SKIP ; Yes, replace maximum
mov A,M
SKIP: inx H
dcr C
jnz BACK
sta 0040H ; Store maximum number
HLT ; Terminate program execution
Úlohy na samostatnú prácu
Jednotlivé úlohy riešte postupne a spájajte ich do jedného komplexného programu. Za každú vyriešenú úlohu ktorú ukážete cvičiacemu získavate 1 bod.
- Vynulujte 5 bajtov pamäte od adresy 070h
- Odložte do pamäte na adresu 70h až 74h hodnoty 1 až 5.
- Vymeňte obsah pamäťových miest 70h a 73h.
- Sčítajte obsah pamäťových miest 72h a 73h a výsledok uložte do 74h
- Odčítajte od 74h obsah 71h a zapíšte späť do 74h
- Nájdite dvojkový doplnok čísla z 72h
Linky
Precvičovanie
!!! TODO: pripravit nove ulohy na precvicenie!!!
Preštudujte si nasledovný program:
ORG 0000h
MVI A,07h
MOV B,A
MVI A,03h
MOV C,A
HLT