1 / 15

Instrukce procesoru pro skoky v programu (JMP, JZ, JNZ, JC, JNC)

Instrukce procesoru pro skoky v programu (JMP, JZ, JNZ, JC, JNC). Instrukce zajistí, že jako další se bude provádět instrukce na uvedené adrese. Instrukce nepodmíněného skoku. jmp Adresa16.

geona
Download Presentation

Instrukce procesoru pro skoky v programu (JMP, JZ, JNZ, JC, JNC)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Instrukce procesoru pro skoky v programu (JMP, JZ, JNZ, JC, JNC) Instrukce zajistí, že jako další se bude provádět instrukce na uvedené adrese. Instrukce nepodmíněného skoku. jmp Adresa16 Místo uvedení číselné hodnoty adresy se doporučuje používat adresu symbolickou (návěští). Návěští je definováno uvedením před vybranou instrukcí v programu (návěští je od instrukce odděleno dvojtečkou). Návěští může být definováno v jednom programu nejvýše jednou. Př.: dynamický STOP mov A, #55H LOOP: jmp LOOP Př.: nekonečná smyčka mov A, #0 LOOP: inc A out 0AAH jmp LOOP Př.: dynamický STOP mov A, #55H jmp $

  2. Instrukce procesoru pro skoky v programu (JMP, JZ, JNZ, JC, JNC) Instrukce podmíněných skoků: jz Adresa16 Je-li Z=1 chová se instrukce jako jmp, jinak jako nop jnz Adresa16 Je-li Z=0 chová se instrukce jako jmp, jinak jako nop jc Adresa16 Je-li C=1 chová se instrukce jako jmp, jinak jako nop jnc Adresa16 Je-li C=0 chová se instrukce jako jmp, jinak jako nop Instrukce porovná obsah akumulátoru A, s daty. Je-li A<>data8, provede se skok na adresu, jinak se pokračuje další instrukcí. Je-li A<data8, nastaví se jednobitový registr C na 1, jinak na 0. cjne A,#data8,Adresa16 Stejně, ale místo s A pracuje s registrem Rn cjne Rn,#data8,Adresa16

  3. Cykly řízené proměnnou Př.: … počet průchodů smyčkou ... mov R0, #100 LOOP: decR0 mov A, #1 out 01H, A nop nop nop mov A, #0 out 01H, A mov A, R0 jnz LOOP ... R0  100 R0  R0-1 Registr R0 použit jako počítadlo průchodů opakovaně prováděná část programu R0<>0 ANO NE Instrukce nejprve dekrementuje obsah registru. Je-li výsledek různý od nuly provede se skok na adresu, jinak se pokračuje další instrukcí. djnzRn,Adresa16

  4. Cykly řízené proměnnou R0  100 Př.: … počet průchodů smyčkou ... mov R0, #100 LOOP: mov A, #1 out 01H, A nop nop nop mov A, #0 out 01H, A djnz R0, LOOP ... TĚLO CYKLU Registr R0 použit jako počítadlo průchodů R0  R0-1 R0<>0 ANO NE Uvniř těla cyklu s instrukcí DJNZ neměnit hodnotu proměnné, která cyklus řídí !!! Neskákat do a z těla cyklu

  5. Příklad (paměť 1) Cyklem je to lepší Sestavte program, který, vynuluje oblast paměti mezi adresami AAh a BBh (včetně). Z mov R0,#0AAh mov A, #0 L1:mov @R0, A inc R0 cjne R0,#0BCh,L1 jmp $ Má se nulovat jen 17 bytů. Šlo by to i „ručně“: mov A, #0, mov 0AAh, A mov 0ABh, A mov 0ACh, A … mov 0BBh, A R0První adresa A0 Zapiš A do paměti na adresu, která je uložena v R0 R0  Další adresa Je v R0 číslo o 1 větší než poslední adresa? K

  6. Vnořené cykly R0  100 R0  100 R1  10 TĚLO CYKLU TĚLO CYKLU R1  10 R0  R0-1 R1  R1-1 TĚLO CYKLU R0<>0 R1<>0 ANO ANO R1  R1-1 NE NE R1<>0 ANO NE R0  R0-1 R0<>0 ANO NE

  7. Z Příklad (paměť 2) mov R7,#0 mov R0,#0AAh L1: mov A,@R0 rrc A jc L2 inc R7 L2: inc R0 cjne R0,#0BCh,L1 jmp $ Počítadlo  0 Sestavte program, který zjistí, kolik bytů uložených v paměti Mezi adresami AAh a BBh splňuje tu podmínku, že představuje ve standardním binárním váhovém kódování sudé číslo. Výsledek uložit do registrů procesoru. R0První adresa Do A přečti byte z adresy, která je uložena v R0 Je v A sudé číslo? NE ANO Počítadlo  Počítadlo + 1 Jak se pozná sudé číslo? R0  Další adresa Je v R0 číslo o 1 větší než poslední adresa? NE Jak veliký může být výsledek ? Vejde se mi do jednoho registru? Co když ne? ANO Výsledek je v R7 ! K

  8. Z Příklad (paměť 3) mov R7,#0 mov DPTR,#0AAEEh L1: mov A,@DPTR rrc A jnc L2 inc R7 L2: inc DPTR mov A, DPH cjne A,#0ABh,L1 mov A, DPL cjne A,#0BCh,L1 jmp $ Počítadlo  0 Sestavte program, který zjistí, kolik bytů uložených v paměti Mezi adresami AAEEh a ABBBh splňuje tu podmínku, že představuje ve standardním binárním váhovém kódování liché číslo. Výsledek uložit do registrů procesoru. DPTRPrvní adresa Do A přečti byte z adresy, která je uložena v DPTR Je v A liché číslo? NE ANO Počítadlo  Počítadlo + 1 Pomocí osmibitového registru lze adresovat jen v intervalu adres 00H..FFH. Musí se zde použít DPTR. DPTR  Další adresa Je v DPTR číslo o 1 větší než poslední adresa? NE Vejde se výsledek do jednoho registru? ANO K

  9. Z Příklad (paměť 4) mov R7,#0 mov R6,#0 mov DPTR,#0AAEEh L1: mov A,@DPTR rlc A jc L2 inc R7 mov A, R7 jnz L2 inc R6 L2: inc DPTR mov A, DPH cjne A,#0ABh,L1 mov A, DPL cjne A,#0BCh,L1 jmp $ Počítadlo  0 Sestavte program, který zjistí, kolik bytů uložených v paměti Mezi adresami AAAAh a BBBBh splňuje tu podmínku, že představuje ve standardním binárním váhovém kódování Číslomenší než 128. Výsledek uložit do registrů procesoru. DPTRPrvní adresa Do A přečti byte z adresy, která je uložena v DPTR A<128 NE ANO Počítadlo  Počítadlo + 1 Pomocí osmibitového registru lze adresovat jen v intervalu adres 00H..FFH. Musí se zde použít DPTR. DPTR  Další adresa Je v DPTR číslo o 1 větší než poslední adresa? NE Vejde se výsledek do jednoho registru? ANO K

  10. mov R7,#0 mov R6,#0 mov DPTR,#0A000h L1: mov A,@DPTR inc DPTR mov A,@DPTR rlc A jnc L2 inc R7 mov A, R7 jnz L2 inc R6 L2: inc DPTR mov A, DPH cjne A,#0B0h,L1 mov A, DPL cjne A,#000h,L1 jmp $ Příklad (paměť 5) Z Sestavte program, který zjistí, kolik čísel ve formátu Integer uložených v paměti mezi adresami 0A000h a 0AFFFh je záporných. Počítadlo  0 DPTRPrvní adresa oblasti Do A přečti byte z adresy, která je uložena v DPTR DPTR  Další adresa Každé číslo je uloženo na dvou po sobě jdoucích bytech. Do A přečti byte z adresy, která je uložena v DPTR NE Nejvyšší bit A = 0 O znaménku čísla rozhoduje nejvyšší bit druhého bytu. ANO Je v DPTR číslo o 1 větší než poslední adresa? NE Počítadlo  Počítadlo + 1 DPTR  Další adresa ANO K

  11. Cykly řízené podmínkou Př.: … čekání na stav … ... LOOP:in A,02H anl A, #01H add A, #0 jz LOOP ... A  port 02 A  A and 00000001B Mikro- počítač A=0 ANO NE P2.0 A  port 02 Př.: … jiné řešení … ... LOOP:in A,02H rrc A jnc LOOP ... Tlačítko Stisknuto  1 Rozepnuto  0 Rotace A,C doprava C=1 NE ANO

  12. Příklady na cykly Mikro- počítač Z Př.: Pískání LOOP: mov A, #1 out 12, A mov R0, #0 djnz R0, $ mov A, #0 out 12, A mov R0, #0 djnz R0, $ jmp LOOP Vyslat 0 P12.0 Počkat Vyslat 1 Reproduktor 0 – 1 – 0 – 1 – 0 …. Počkat Jaká je FREKVENCE výstupního tónu?

  13. Příklady na cykly Mikro- počítač Př.: Blikání LOOP: mov A, #0 out 12, A mov R1, #0 W1: mov R0, #0 djnz R0, $ djnz R1, W1 mov A, #1 out 12, A mov R1, #0 W2: mov R0, #0 djnz R0, $ djnz R1, W2 jmp LOOP Z Zhasni P12.0 Počkat Rozsviť Žárovka 0 – nesvítí 1 - svítí Počkat Jaká je PERIODA blikání?

  14. Příklad Z Př.: Blikat, kdyz tlačítko LOOP: mov A, #0 out 12, A mov R1, #0 W1: mov R0, #0 djnz R0, $ djnz R1, W1 TLAC: in A, 2 anl A, #01 add A, #0 jz TLAC mov A, #1 out 12, A mov R1, #0 W2: mov R0, #0 djnz R0, $ djnz R1, W2 jmp LOOP Sestavte program, který bliká žárovkou, pokud je stisknuto tlačítko. Připojení žárovky a tlačítka, viz obrázek. Zhasni Počkat Stisknuto? Mikro- počítač NE ANO Rozsviť P12.0 Počkat P2.0

  15. Příklad (tlačítko 1) Z Sestavte program, který v registru R7 udržuje počet stisků tlačítka. Počítadlo  0 mov R7, #0 B1: in A, 2 rrc A jnc B1 B2: in A, 2 rrc A jc B2 inc R7 jmp B1 Stisknuto? NE ANO ANO Stisknuto? Mikro- počítač NE Počítadlo  Počítadlo + 1 P2.0 Po 256 stiscích je registr vynulován a čítání probíhá znovu od nuly

More Related