Keresés

Címkék

2025-04-20

Feltételes programátirányítás (CJNE, DJNZ, JB, JNB, JBC, JC, JNC, JZ, JNZ)

Az előző oldalon találhatóak valóban arról szóltak, hogy a programot átirányítjuk, azonban ennek semmi nem szabott határt. Avagy: feltétel nélkül történtek meg ugrásaink.
Számtalan esetben viszont szeretnénk ellenőrizni, hogy egy bizonyos feltétel teljesül-e; és csak abban az esetben ugorjunk. A feltételek köre sajnos limitált viszont, nem csekkolhatunk akármit.

Jelen instrukciók jelentései:

  • CJNE - compare and jump if not equal (hasonlíts össze és ugorj ha nem egyenlő)
  • DJNZ - decrement and jump if not zero (csökkentsd és ugorj ha nem 0)
  • JB - jump if bit set (ugorj ha bit 1)
  • JNB - jump if bit not set (ugorj ha bit 0)
  • JBC - jump if bit set then clear (ugorj ha bit 1 és töröld)
  • JC - jump if carry set (ugorj ha C 1)
  • JNC - jump if carry not set (ugorj ha C 0)
  • JZ - jump if zero (ugorj ha 0)
  • JNZ - jump if not zero (ugorj ha nem 0)
De azért még így is elég széles a feltételek kínálata. Fontos azonban figyelembe venni, hogy ezek mindegyike az SJMP feltételes formája, vagyis relatív ugrást végzünk visszatérési pont nélkül. Ez utóbbi nem lehetséges.
Továbbá itt minden instrukció legutolsó operandusa az a relatív cím, ahová a program ugrik.

CJNE
Ennek az instrukciónak 3 bemenetre van szüksége. Egy regiszterre, egy összehasonlítási tényezőre, és egy relatív ugrási pontra. Összehasonlítja az 1. és 2. operandust, és ha nem egyenlők, akkor a 3. op.-ban megadott szerint a program futása elterelődik. Regiszterként használhatók: a,r0-r7,@r0-r1. Összehasonlítóként használhatók (2. op.): direkt memóriacím és konstans szám.
cjne a,20h,60h (ha a≠20h, akkor 60h szerint visszafele ugrik)
cjne r6,#16,200 (ha r6≠16 akkor 200 szerint előreugrik)

DJNZ
Ez azt tudja, hogy a bemenetként adott regiszter értékét 1-gyel csökkenti, és ha ezután a végeredmény nem 0, akkor relatív módon ugrás történik. Regiszterként használhatóak: direkt memóriacím és r0-r7.
djnz r0,40h (csökkenti az r0-t. ha ezután r00, akkor 40h szerint visszafele ugrik)

JB
Akkor ugrik a program, ha a megadott bitcímen található bit 1.
jb 10h,80h

JNB
Elterelődik a programfutás, ha a megadott bitcímen található bit 0.
jnb 25h,0b7h

JBC
Akkor ugrik a program, ha a megadott bitcímen található bit 1. Ha történt ugrás, akkor a megjelölt bit lekapcsol, 0-ra állítódik.
jbc 10h,9ah

JC
A programszál elterelődik, ha a PSW-nek a CARRY bitje 1.
jc 90h (itt a 90h természetesen a relatív ugrási célpont)

JNC
A programszál elterelődik, ha a CARRY bit az 0.
jnc 0fah

JZ
A megjelölt helyre ugrik a program, ha az a regiszter értéke 0.
jz 6bh

JNZ
A kijelölt helyre ugrik a program, ha a értéke nem 0.
jnz 0ah

Nincsenek megjegyzések:

Megjegyzés küldése

Mit gondolsz?