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