Keresés

Címkék

2025-04-09

Algebrai műveletek (ADDC, SUBB, DIV, MUL, ANL, ORL, XRL, CPL)

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
A logikai műveletek is matematikán alapulnak, csak 2 értékkel: igaz és hamis. Az ilyen számolások két IGAZ/HAMIS bemenetet igénylenek, és egy IGAZ/HAMIS kimenetet adnak a következő módokon:
É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?