Blog:Programovanie v assembleri i8080 pre PMD 85 (3)
Z PMD 85 Infoserver
Inštrukčná sada mikroprocesora i8080 (pokračovanie)
Aritmetické inštrukcie
Táto skupina inštrukcií vykonáva aritmetické operácie medzi registrami a pamäťou. Všetky inštrukcie v tejto skupine, ak nie je uvedené inak, nastavujú príznaky podľa výsledku operácie. Inštrukcie sčítania a odčítania pracujúce s príznakom prenosu Carry CY sú užitočné pri sčítaní/odčítaní 16 a viac bitových čísel.
ADD r (Add Register)
Operácia: A <-- A + r
Príznaky: Z, S, P, CY, AC
Inštrukcia ADD pripočíta k akumulátoru A hodnotu z 8 bitového registra r.
Sčítanie akumulátora a 8 bitového registra (1 byte / 4T) | ||||||
---|---|---|---|---|---|---|
add b | add c | add d | add e | add h | add l | add a |
ADD m (Add memory)
Operácia: A <-- A + (HL)
Príznaky: Z, S, P, CY, AC
Táto inštrukcia pripočíta k akumulátoru A hodnotu z pamäte, ktorej adresa je v registri HL.
Sčítanie akumulátora a hodnoty z pamäte (1 byte / 7T) | |
---|---|
add m |
ADI N (Add immediate)
Operácia: A <-- A + N
Príznaky: Z, S, P, CY, AC
Táto inštrukcia pripočíta k akumulátoru A priamu 8 bitovú hodnotu N.
Sčítanie akumulátora a priamej 8 bitovej hodnoty (2 byty / 7T) | |
---|---|
adi N |
ADC r (Add Register with carry)
Operácia: A <-- A + r + CY
Príznaky: Z, S, P, CY, AC
Inštrukcia ADC pripočíta k akumulátoru A hodnotu z 8 bitového registra r a príznak prenosu CY.
Sčítanie akumulátora, 8 bitového registra a príznaku prenosu (1 byte / 4T) | ||||||
---|---|---|---|---|---|---|
adc b | adc c | adc d | adc e | adc h | adc l | adc a |
ADC m (Add memory with carry)
Operácia: A <-- A + (HL) + CY
Príznaky: Z, S, P, CY, AC
Táto inštrukcia pripočíta k akumulátoru A hodnotu z pamäte, ktorej adresa je v registri HL a príznak prenosu CY.
Sčítanie akumulátora, hodnoty z pamäte a príznaku prenosu (1 byte / 7T) | |
---|---|
adc m |
ACI N (Add immediate with carry)
Operácia: A <-- A + N + CY
Príznaky: Z, S, P, CY, AC
Táto inštrukcia pripočíta k akumulátoru A priamu 8 bitovú hodnotu N a príznak prenosu CY.
Sčítanie akumulátora, priamej 8 bitovej hodnoty a príznaku prenosu (2 byty / 7T) | |
---|---|
aci N |
SUB r (Subtract Register)
Operácia: A <-- A - r
Príznaky: Z, S, P, CY, AC
Inštrukcia SUB odpočíta od akumulátora A hodnotu z 8 bitového registra r.
Odčítanie 8 bitového registra od akumulátora (1 byte / 4T) | ||||||
---|---|---|---|---|---|---|
sub b | sub c | sub d | sub e | sub h | sub l | sub a |
SUB m (Subtract memory)
Operácia: A <-- A - (HL)
Príznaky: Z, S, P, CY, AC
Táto inštrukcia odpočíta od akumulátora A hodnotu z pamäte, ktorej adresa je v registri HL.
Odčítanie hodnoty z pamäte od akumulátora (1 byte / 7T) | |
---|---|
sub m |
SUI N (Subtract immediate)
Operácia: A <-- A - N
Príznaky: Z, S, P, CY, AC
Táto inštrukcia odpočíta od akumulátora A priamu 8 bitovú hodnotu N.
Odčítanie priamej 8 bitovej hodnoty od akumulátora (2 byty / 7T) | |
---|---|
sui N |
SBB r (Subtract Register with borrow)
Operácia: A <-- A - r - CY
Príznaky: Z, S, P, CY, AC
Inštrukcia SBB odpočíta od akumulátora A hodnotu z 8 bitového registra r a príznak prenosu CY.
Odčítanie 8 bitového registra a príznaku prenosu od akumulátora (1 byte / 4T) | ||||||
---|---|---|---|---|---|---|
sbb b | sbb c | sbb d | sbb e | sbb h | sbb l | sbb a |
SBB m (Subtract memory with borrow)
Operácia: A <-- A - (HL) - CY
Príznaky: Z, S, P, CY, AC
Táto inštrukcia odpočíta od akumulátora A hodnotu z pamäte, ktorej adresa je v registri HL a príznak prenosu CY.
Odčítanie hodnoty z pamäte a príznaku prenosu od akumulátora (1 byte / 7T) | |
---|---|
sbb m |
SBI N (Subtract immediate with borrow)
Operácia: A <-- A - N - CY
Príznaky: Z, S, P, CY, AC
Táto inštrukcia odpočíta od akumulátoru A priamu 8 bitovú hodnotu N a príznak prenosu CY.
Odčítanie priamej 8 bitovej hodnoty a príznaku prenosu od akumulátora (2 byty / 7T) | |
---|---|
sbi N |
INR r (Increment Register)
Operácia: r <-- r + 1
Príznaky: Z, S, P, AC
Inštrukcia INR pripočíta k 8 bitovému registru jednotku - inkrementuje ho. Príznak prenosu CY sa nemení, ani pri zmene hodnoty z 255 -> 0!
Inkrement 8 bitového registra (1 byte / 5T) | ||||||
---|---|---|---|---|---|---|
inr b | inr c | inr d | inr e | inr h | inr l | inr a |
INR m (Increment memory)
Operácia: (HL) <-- (HL) + 1
Príznaky: Z, S, P, AC
Táto inštrukcia inkrementuje hodnotu v pamäti, ktorej adresa je v registri HL. Príznak prenosu CY sa nemení, ani pri zmene hodnoty z 255 -> 0!
Inkrement hodnoty v pamäti (1 byte / 10T) | |
---|---|
inr m |
DCR r (Decrement Register)
Operácia: r <-- r - 1
Príznaky: Z, S, P, AC
Inštrukcia DCR odpočíta od 8 bitovému registra jednotku - dekrementuje ho. Príznak prenosu CY sa nemení, ani pri zmene hodnoty z 0 -> 255!
Dekrement 8 bitového registra (1 byte / 5T) | ||||||
---|---|---|---|---|---|---|
dcr b | dcr c | dcr d | dcr e | dcr h | dcr l | dcr a |
DCR m (Decrement memory)
Operácia: (HL) <-- (HL) - 1
Príznaky: Z, S, P, AC
Táto inštrukcia dekrementuje hodnotu v pamäti, ktorej adresa je v registri HL. Príznak prenosu CY sa nemení, ani pri zmene hodnoty z 0 -> 255!
Dekrement hodnoty v pamäti (1 byte / 10T) | |
---|---|
dcr m |
INX rp (Increment Register pair)
Operácia: rp <-- rp + 1
Príznaky: žiadne
Inštrukcia INX pripočíta k 16 bitovému registru jednotku - inkrementuje ho. Žiadne príznaky sa nemenia (aj keď by to niekedy bolo užitočné)!
Inkrement 16 bitového registra (1 byte / 5T) | ||||||
---|---|---|---|---|---|---|
inx b | inx d | inx h | inx sp |
DCX rp (Decrement Register pair)
Operácia: rp <-- rp - 1
Príznaky: žiadne
Inštrukcia DCX odpočíta od 16 bitového registra jednotku - dekrementuje ho. Opäť sa žiadne príznaky nemenia!
Dekrement 16 bitového registra (1 byte / 5T) | ||||||
---|---|---|---|---|---|---|
dcx b | dcx d | dcx h | dcx sp |
DAD rp (Add Register pair to HL)
Operácia: HL <-- HL + rp
Príznaky: CY
Inštrukcia DAD pripočíta k 16 bitovému registru HL hodnotu ďalšieho 16 bitového registra rp. Inštrukcia ovplyvňuje iba príznak CY. Ak pri sčítaní dôjde k pretečeniu - výsledok by mal byť väčší ako 65535 - príznak CY sa nastaví, inak sa vynuluje.
16 bitové sčítanie (1 byte / 10T) | ||||||
---|---|---|---|---|---|---|
dad b | dad d | dad h | dad sp |
DAA (Decimal Adjust Accumulator)
Operácia: A <-- BCD(A)
Príznaky: Z, S, P, CY, AC
Inštrukcia DAA vykoná tzv. desiatkovú korekciu hodnoty v akumulátore A, teda prevedie jeho hodnotu do BCD formátu, čo znamená, že každý nibble v byte (dolná alebo horná štvorica bitov) predstavuje jednu desiatkovú číslicu. Inštrukcia DAA pracuje nasledujúcim spôsobom:
- Ak je hodnota dolných štyroch bitov akumulátora väčšia ako 9 alebo je nastavený príznak AC, je k akumulátoru pripočítaná hodnota 6. Zároveň je príznak AC nastavený, ak je hodnota dolných štyroch bitov akumulátora väčšia ako 9 (ešte pred pripočítaním hodnoty 6).
- Ak je teraz hodnota horných štyroch bitov akumulátora väčšia ako 9 alebo je nastavený príznak CY, je k akumulátoru pripočítaná hodnota 60h a zároveň je nastavený aj príznak CY.
Vykonanie inštrukcie DAA má teda zmysel po nejakej inej aritmetickej inštrukcii, kedy sa príslušne nastavia (pripravia) príznaky AC a CY.
Úprava hodnoty akumulátora do BCD formátu (1 byte / 4T) | ||||||
---|---|---|---|---|---|---|
daa |
<< Inštrukčná sada mikroprocesora - Inštrukcie pre presun dát Inštrukčná sada mikroprocesora - Logické inštrukcie >>