Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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

Podobné prezentace


Prezentace na téma: "Instrukce procesoru pro skoky v programu (JMP, JZ, JNZ, JC, JNC) jmp Adresa16 Instrukce zajistí, že jako další se bude provádět instrukce na uvedené adrese."— Transkript prezentace:

1 Instrukce procesoru pro skoky v programu (JMP, JZ, JNZ, JC, JNC) jmp Adresa16 Instrukce zajistí, že jako další se bude provádět instrukce na uvedené adrese. Instrukce nepodmíněného skoku. 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ř.: nekonečná smyčka mov A, #0 LOOP:inc A out 0AAH jmp LOOP Př.: dynamický STOP mov A, #55H LOOP:jmp LOOP Př.: dynamický STOP mov A, #55H jmp $

2 Instrukce procesoru pro skoky v programu (JMP, JZ, JNZ, JC, JNC) jnz Adresa16 jz Adresa16 jc Adresa16 jnc Adresa16 Je-li Z=1 chová se instrukce jako jmp, jinak jako nop Je-li Z=0 chová se instrukce jako jmp, jinak jako nop Je-li C=1 chová se instrukce jako jmp, jinak jako nop Je-li C=0 chová se instrukce jako jmp, jinak jako nop Instrukce podmíněných skoků: cjne A,#data8,Adresa16 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

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

4 Cykly řízené proměnnou Př.: … počet průchodů smyčkou... mov R0, #100 LOOP: mov A, #1 out 01H, A nop mov A, #0 out 01H, A djnz R0, LOOP... Registr R0 použit jako počítadlo průchodů R0  100 R0<>0 TĚLO CYKLU ANONE R0  R0-1 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) Sestavte program, který, vynuluje oblast paměti mezi adresami AAh a BBh (včetně). 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 Z 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 mov R0,#0AAh mov A, #0 L1: A inc R0 cjne R0,#0BCh,L1 jmp $ A0A0 Cyklem je to lepší

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

7 Příklad (paměť 2) 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. Jak se pozná sudé číslo? Jak veliký může být výsledek ? Vejde se mi do jednoho registru? Co když ne? R0  První adresa Počítadlo  Počítadlo + 1 Počítadlo  0 Z Je v A sudé číslo? NE ANO Do A přečti byte z adresy, která je uložena v R0 R0  Další adresa Je v R0 číslo o 1 větší než poslední adresa? NE K ANO mov R7,#0 mov R0,#0AAh L1: mov rrc A jc L2 inc R7 L2: inc R0 cjne R0,#0BCh,L1 jmp $ Výsledek je v R7 !

8 Příklad (paměť 3) 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 Počítadlo  Počítadlo + 1 Počítadlo  0 Z Je v A liché číslo? NE ANO Do A přečti byte z adresy, která je uložena v DPTR DPTR  Další adresa Je v DPTR číslo o 1 větší než poslední adresa? NE K ANO mov R7,#0 mov DPTR,#0AAEEh L1: mov rrc A jnc L2 inc R7 L2: inc DPTR mov A, DPH cjne A,#0ABh,L1 mov A, DPL cjne A,#0BCh,L1 jmp $ Pomocí osmibitového registru lze adresovat jen v intervalu adres 00H..FFH. Musí se zde použít DPTR. Vejde se výsledek do jednoho registru?

9 Příklad (paměť 4) 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í Číslo menší než 128. Výsledek uložit do registrů procesoru. DPTR  První adresa Počítadlo  Počítadlo + 1 Počítadlo  0 Z A<128 NE ANO Do A přečti byte z adresy, která je uložena v DPTR DPTR  Další adresa Je v DPTR číslo o 1 větší než poslední adresa? NE K ANO mov R7,#0 mov R6,#0 mov DPTR,#0AAEEh L1: mov 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 $ Pomocí osmibitového registru lze adresovat jen v intervalu adres 00H..FFH. Musí se zde použít DPTR. Vejde se výsledek do jednoho registru?

10 Příklad (paměť 5) 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. DPTR  První adresa oblasti Počítadlo  Počítadlo + 1 Počítadlo  0 Z Nejvyšší bit A = 0 NE ANO Do A přečti byte z adresy, která je uložena v DPTR DPTR  Další adresa Je v DPTR číslo o 1 větší než poslední adresa? NE K ANO Každé číslo je uloženo na dvou po sobě jdoucích bytech. O znaménku čísla rozhoduje nejvyšší bit druhého bytu. DPTR  Další adresa Do A přečti byte z adresy, která je uložena v DPTR mov R7,#0 mov R6,#0 mov DPTR,#0A000h L1: mov inc DPTR mov 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 $

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

12 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 Mikro- počítač P12.0 Reproduktor 0 – 1 – 0 – 1 – 0 …. Vyslat 0 Počkat Vyslat 1 Počkat Z Příklady na cykly Jaká je FREKVENC E výstupního tónu?

13 Mikro- počítač P12.0 Žárovka 0 – nesvítí 1 - svítí Příklady na cykly Zhasni Počkat Rozsviť Počkat Z 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 Jaká je PERIODA blikání?

14 Mikro- počítač P12.0 P2.0 Příklad Zhasni Počkat Rozsviť Počkat Z Stisknuto? NE ANO 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.

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


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

Podobné prezentace


Reklamy Google