A címben felsorolt instrukciókkal lehet számokkal zsonglőrködni, bájt és bit szinten egyaránt. Két regiszter áll rendelkezésrünkre: a és b. A műveletek egy résézt kizárólagosan az a-ban végezhetjük el, a b regiszter a MUL (szorzás), és DIV (osztás) folyamatát segíti elő.
FONTOS: a "C bit", "CARRY", és "PSW C jelű bitje" ugyanazt jelentik, a PSW regiszterben megtalálható bitet.
Az instrukciók jelentései:
- ADDC - hozzáadás
- SUBB - kivonás
- DIV - a és b osztása
- MUL - a és b szorzása
- ANL - bitenkénti és logika művelet
- ORL - bitenkénti vagy logikai művelet
- XRL - bitenkénti kizáró vagy logikai művelet
ÉS 0 0 : 0
0 1 : 0
1 0 : 0
1 1 : 1
VAGY 0 0 : 0
0 1 : 1
1 0 : 1
1 1 : 1
KIZÁRÓ VAGY 0 0 : 0
0 1 : 1
1 0 : 1
1 1 : 0
ADDC
Az a-hoz hozzáadunk egy értéket, és a maradékot (carry) a PSW regiszter C jelű bitjébe tesszük. A maradék az gyakorlatilag a 9. bitje az eredménynek. Lehet program által megadott értéket, memóriából kikeresett értéket, R0 vagy R1 által mutatott számot, illetve R0-R7 által megadott számot hozzáadni.
addc a,20h
addc a,#20h
addc a,@r0
addc a,@r1
addc a,r3
pl. 3ah + 12h = 4ch 1001b + 1100b = 1101b
SUBB
Az a-ból kivonjuk a megadott szám és a C bit összegét. Az ADDC-cal azonos operandusokat, tehát program által megadott értéket, memóriából kikeresett értéket, R0
vagy R1 által mutatott számot, illetve R0-R7 által megadott számot lehet használni.
subb a,20h
subb a,#20h
subb a,@r0
subb a,@r1
subb a,r3
pl. 6bh - 25h = 46h 11101b - 100b = 11001b
DIV
Az a számot elosztjuk a b-vel. Az eredmény az a-ban, a maradék pedig a b-ben lesz található. 0-val való osztás esetén a PSW túlcsordulási bitje bekapcsol. A CARRY bit mindig kikapcsol.
div ab
pl. 20h / 2h = 10h 1000b / 10b = 100b
MUL
Az a számot megszorozzuk a b-vel. A 16-bites eredmény kisebb byte-ja az a-ban, a nagyobbik byte-ja meg a b-ben tárolódik el. Ha utóbbi byte nem 0, akkor a túlcsordulás bit bekapcsol. A CARRY kikapcsol.
mul ab
pl. 10h * 0fh = 0f0h 111b * 11010b = 10110110b
ANL
Az instrukció két operandusán egy logikai ÉS műveletet végzünk, az eredmény a bal operandusban lesz. A CARRY bit használata esetén a megadott címen található bitet és a CARRY zászlót vetjük ilyen művelet alá, a CARRY fogja az eredményt tartalmazni. A művelet minden bitre elvégződik.
anl 40h,a
anl 40h,#32h
anl a,#11110100b
anl a,10
anl a,@r0
anl a,@r1
anl a,r4
anl c,64h
pl. 1100b és 0101b = 0100b 1110b és 0110 = 0110b
ORL
Az instrukció 1. és 2. operandusán egy logikai VAGY számítást végzünk, az eredmény az 1. operandusban lesz. Az ANL-lal azonosak a operanduskombináció-lehetőségek.
orl 40h,a
orl 40h,#32h
orl a,#11110100b
orl a,10
orl a,@r0
orl a,@r1
orl a,r4
orl c,64h
pl. 1000b vagy 0011b = 1011b 0010b vagy 1101b = 1111b
XRL
Az instrukció két operandusán logikai KIZÁRÓ VAGY számítást végzünk, a bal operandusban található a végeredmény. Az ANL-lal megegyező módokon lehet operandusokat betáplálni.
xrl 40h,a
xrl 40h,#32h
xrl a,#11110100b
xrl a,10
xrl a,@r0
xrl a,@r1
xrl a,r4
xrl c,64h
pl. 1111b kvagy 0011b = 1100b 1001b kvagy 1000b = 0001b
CPL
Az instrukcióban megjelölt szám bitjeit megfordítjuk. Elvégezhető az a-val, CARRY-vel, és memóriában címezett bittel.
cpl a
cpl c
cpl 64h
pl. 10010111b cpl = 01101000b
Nincsenek megjegyzések:
Megjegyzés küldése
Mit gondolsz?