Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1.
- Spočítajte obsah registrov R3 a R5. Ak je výsledok rôzny od nuly, uložte ho na adresu 40H a ak je aj párny, uložte ho aj na adresu 41H.
- start: MOV R3,#3
- MOV R5,#4
- MOV A,R3
- ADD A,R5
- JZ nula
- MOV 40h,A
- JNB ACC.0,parny
- SJMP nula
- parny: MOV 41h,A
- nula: nop
- end
- ----------------------------druha moznost-------------------------------
- start: MOV R3, #3 // Nastavíme register R3 na hodnotu 3
- MOV R5, #4 // Nastavíme register R5 na hodnotu 4
- MOV A, R3 // Prenesieme hodnotu R3 do akumulátora
- ADD A, R5 // Pripočítame hodnotu R5 k akumulátoru
- JZ nula // Ak je výsledok nulový, skočí na značku "nula"
- MOV 40h, A // Uložíme výsledok na adresu 40H
- RRC A // Rotujeme akumulátor doprava cez prenosový bit (testujeme najnižší bit)
- JNC parny // Ak je prenosový bit nula (výsledok bol párny), skočí na značku "parny"
- SJMP nula // Ak je výsledok nepárny, skočí na značku "nula"
- parny: MOV 41h, A // Uložíme výsledok na adresu 41H, ak je výsledok párny
- nula: NOP // Ukončenie programu
- end
- 2.
- Urobte cyklus, ktorý postupne uloží do pamäte od adresy 60H hodnoty 0FEH, 0FFH, 0, 1, 2, 3, 4 a 5. Pri ladení programu si všimnite ako sa nastavujú príznakové bity
- start: MOV R0,#60h
- MOV A,#0FEh
- opak: MOV @R0,A
- inc R0
- inc A
- CJNE A,#6,opak
- end
- 3.
- Zostavte program, ktorý realizuje časové oneskorenie úmerné veľkosti parametra, ktorý je v registroch R5 a R6.
- MOV R6,#200
- TAM: MOV R5,#100
- TU: DJNZ R5,TU
- DJNZ R6,TU
- end
- -------------------------------dlhsia verzia---------------------------------------
- MOV R7,#50
- MOV R6,#200
- TAM: MOV R5,#100
- TU: DJNZ R5,TU
- DJNZ R6,TU
- DJNZ R7,TU
- end
- 4.
- V pamäti programu je od adresy TAB je uložená tabuľka 10-tich osembitových čísel. Prekopírujte túto tabuľku od adresy KOPIA v pamäti dát.
- prog SEGMENT CODE
- udaj SEGMENT DATA
- RSEG udaj
- Kopia: DS 10
- RSEG prog
- Tab: DB 5,10,4,6,7,12,14,26,3,9
- CSEG AT 0
- start: MOVC R0, #Kopia // Nastavíme ukazovateľ registra R0 na miesto, kde sa má kopírovať tabuľka.
- MOV dptr, #Tab // Nastavíme ukazovateľ dptr na začiatok tabuľky v kóde.
- clr A
- MOV R5, #10 // Nastavíme počet opakovaní cyklu
- znovu: MOVC A, @A+DPTR // Načítame prvu hodnotu z tabuľky na adrese ukazovateľa dptr a priradíme ju do akumulátora A.
- MOV @R0, A // Zapíšeme hodnotu z akumulátora A na adresu určenú registrom R0.
- clr A
- INC R0 // Inkrementujeme ukazovateľ registra R0, aby sme sa posunuli na ďalšiu pozíciu v pamäti.
- INC DPTR // Inkrementujeme ukazovateľ dptr, aby sme sa posunuli na ďalšiu hodnotu v tabuľke.
- djnz R5, znovu // Dekrementujeme počítadlo cyklu (registra R5) a ak nie je nula, skočíme späť na značku "znovu".
- end
- 5.
- V pamäti od adresy CISLO je uložených 10 celých kladných čísel (8-bitových). Nájdite najväčšie z nich a uložte ho do pamäte dát na adresu MAX.
- prog SEGMENT CODE
- udaj SEGMENT DATA
- RSEG udaj
- Max: DS 1
- RSEG prog
- Cislo: DB 5,10,4,6,7,12,14,26,3,9
- CSEG AT 0
- start:
- MOV DPTR, #Cislo
- MOV R2, #9
- MOVC A, @A+DPTR
- MOV 60H, A
- INC DPTR
- zac:
- MOVC A, @A+DPTR
- MOV B, 60H
- CJNE A, B, porov
- DJNZ R2, zac
- porov:
- JC pokracuj
- MOV 60H, A
- pokracuj:
- INC DPTR
- CLR A
- DJNZ R2, zac
- koniec:
- MOV A, 60H
- MOV Max, A
- END
- 6.
- Vytvorte program, ktorý spočíta z tabuľky 10 čísel uložených v pamäti programu od adresy TAB len tie čísla, ktoré majú 5. bit nulový. Výsledok uložte do pamäte dát od adresy SUMA.
- janko segment code
- DSEG at 30h
- suma: DS 2 // Rezervujeme 2 byty pre 16-bitový súčet na adrese 30h a 31h.
- RSEG janko
- tab: DB 4, 9, 89, 7, 155, 26, 148, 6, 35, 94
- CSEG at 0h
- start: mov dptr, #tab // Nastavíme ukazovateľ DPTR na začiatok tabuľky.
- mov R1, #10 // Nastavíme počet čísel v tabuľke na 10.
- opakuj: movc A, @A+dptr // Načítame ďalšie číslo z tabuľky do akumulátora.
- JB ACC.5, dalej // Ak je 5. bit akumulátora nastavený, skočíme na 'dalej'.
- // Ak je 5. bit nulový, pridáme číslo k súčtu.
- ADD A, suma // Pridáme obsah akumulátora k nižšiemu bytu súčtu.
- mov suma, A // Uložíme výsledok do nižšieho bytu súčtu.
- mov A, suma+1 // Načítame vyšší byt súčtu.
- addc A, #0 // Pridáme prenesenie (ak bolo) k vyššiemu bytu súčtu.
- mov suma+1, A // Uložíme výsledok do vyššieho bytu súčtu.
- dalej: inc dptr // Inkrementujeme ukazovateľ DPTR, aby sme ukázali na ďalšie číslo.
- clr A // Vynulujeme akumulátor (zvyšuje prehľadnosť, ale nie je nutné).
- djnz R1, opakuj // Dekrementujeme R1 a ak nie je nulový, opakujeme cyklus.
- // Skočíme na koniec programu po ukončení slucky.
- jmp koniec
- koniec: nop
- end
- 7.
- V pamäti programu od adresy 400H je uložená tabuľka čísel ukončená nulou. Zistite počet párnych čísel v tejto tabuľke a uložte ho do pamäte dát na adresu 50H.
- CSEG at 400h
- tab: DB 4,9,89,7,155,26,148,6,35,94,0
- CSEG at 0h
- zaciatok: MOV dptr,#tab
- MOV R1,#10
- MOV R0,#50h
- pokr: MOVC A,@A+dptr
- JZ konec
- JB ACC.0,dalej
- inc @R0
- dalej: inc dptr
- clr A
- jmp pokr
- konec: nop
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement