Typy operandů, způsoby adresování a typy instrukcí podle počtu operandů u mikrořadiče 80C196
Byte | 0-255 |
Word | 0-65535 |
Double-Words | 0-4294967295 |
Integer | (-)32768 – 32767 |
Long-Integer | (-)2147483648 – 2147483647 |
PŘESUNY
LD cR16, zA16 (cR16) ← (zA16)
LDB cR8, zA8 (cR8) ← (zA8)
ST zR16, cA16 (zR16) → (cA16)
STB zR8, cA8 (zR8) → (cA8)
LDBZE cR16, zA8 v(cR16) ← 00H
n(cR16) ← (zA8)
LDBSE cR16, zA8 v(cR16) ← znam.(zA8)
n(cR16) ← (zA8)
PUSH zA16 (SP) ← (SP)-2
((SP)) ←(zA16)
POP cA16 (cA16) ← ((SP))
(SP) ← (SP)+2
PUSHF (SP) ← (SP)-2
((SP)) ←(PSW/INTM)
(PSW) ← 00H
(INTM) ← 00H
POPF (PSW/INTM) ← ((SP))
(SP) ← (SP)+2
PUSHA (SP) ← (SP)-2
((SP)) ←(PSW/INTM)
(PSW) ← 00H
(INTM) ← 00H
(SP) ← (SP)-2
((SP)) ←(INTM1/WSR)
(INTM1) ← 00H
POPA (INTM1/WSR) ← ((SP))
(SP) ← (SP)+2
(PSW/INTM) ← ((SP))
(SP) ← (SP)+2
BMOV cR32, zR16 (krok) ← (zR16)
LOOP: slovo (v(cR32)) ← (n(cR32))
v(cR32) ← v(cR32)+2
n(cR32) ← n(cR32)+2
(krok) ← (krok)-1
dokud (krok) ≠ 0000H pokračuj na LOOP
ARITMETICKÉ OPERACE
CLR cR16 (cR16) ← 0000H
CLRB cR8 (cR8) ← 00H
NEG cR16 (cR16) ← 0000H -(cR16)
NEGB cR8 (cR8) ← 00H -(cR8)
INC cR16 (cR16) ← (cR16)+1
INCB cR8 (cR8) ← (cR8)+1
DEC cR16 (cR16) ← (cR16)-1
DECB cR8 (cR8) ← (cR8)-1
ADD cR16, zA16 (cR16) ← (cR16)+(zA16)
ADDB cR8, zA8 (cR8) ← (cR8)+(zA8)
ADD cR16, zR16, zA16 (cR16) ← (zR16)+(zA16)
ADDB cR8, zR8, zA8 (cR8) ← (zR8)+(zA8)
ADDC cR16, zA16 (cR16) ← (cR16)+(zA16)+(CARRY)
ADDCB cR8, zA8 (cR8) ← (cR8)+(zA8)+(CARRY)
SUB cR16, zA16 (cR16) ← (cR16)-(zA16)
SUBB cR8, zA8 (cR8) ← (cR8)-(zA8)
SUB cR16, zR16, zA16 (cR16) ← (zR16)-(zA16)
SUBB cR8, zR8, zA8 (cR8) ← (zR8)-(zA8)
SUBC cR16, zA16 (cR16) ← (cR16)-(zA16)+(CARRY)-1
SUBCB cR8, zA8 (cR8) ← (cR8)-(zA8)+(CARRY)-1
CMPL cR32, zR32 (cR32)-(zR32)
CMP cR16, zA16 (cR16)-(zA16)
CMPB cR8, zA8 (cR8)-(zA8)
MUL cR32, zR16, zA16 (cR32) ← (zR16)*(zA16) se znam.
MULB cR16, zR8, zA8 (cR16) ← (zR8)*(zA8) se znam.
MULU cR32, zA16 (cR32) ← (cR16)*(zA16) bez znam.
MULUB cR16, zA8 (cR16) ← (cR8)*(zA8) bez znam.
MULU cR32, zR16, zA16 (cR32) ← (zR16)*(zA16) bez znam.
MULUB cR16, zR8, zA8 (cR16) ← (zR8)*(zA8) bez znam.
DIV cR32, zA16 (cR32) ← (cR32)/(zA16) se znam.
DIVB cR16, zA8 (cR16) ← (cR16)/(zA8) se znam.
DIVU cR32, zA16 (cR32) ← (cR32)/(zA16) bez znam.
DIVUB cR16, zA8 (cR16) ← (cR16)/(zA8) bez znam.
EXT cR32 v(cR32) ← znam.n(cR32)
n(cR32) ← n(cR32)
EXTB cR16 v(cR16) ← znam.n(cR16)
n(cR16) ← n(cR16)
NORML cR32, cR8 posun vlevo dokud MSB(cR32) ≠ 1,
(cR8) ← počet posunů
LOGICKÉ OPERACE
NOT cR16 (cR16) ←
NOTB cR8 (cR8) ←
AND cR16, zA16 (cR16) ← (cR16) AND (zA16)
ANDB cR8, zA8 (cR8) ← (cR8) AND (zA8)
AND cR16, zR16, zA16 (cR16) ← (zR16) AND (zA16)
ANDB cR8, zR8, zA8 (cR8) ← (zR8) AND (zA8)
OR cR16, zA16 (cR16) ← (cR16) OR (zA16)
ORB cR8, zA8 (cR8) ← (cR8) OR (zA8)
XOR cR16, zA16 (cR16) ← (cR16) XOR (zA16)
XORB cR8, zA8 (cR8) ← (cR8) XOR (zA8)
POSUNY
SHLL cR32, #d8 (CARRY) ← MSB(cR32)
LSB(cR32) ← 0; proveď #d8krát
SHLL cR32, zR8 (CARRY) ← MSB(cR32)
LSB(cR32) ← 0; proveď (zR8)krát
SHL cR16, #d8 (CARRY) ← MSB(cR16)
LSB(cR16) ← 0; proveď #d8krát
SHL cR16, zR8 (CARRY) ← MSB(cR16)
LSB(cR16) ← 0; proveď (zR8)krát
SHLB cR8, #d8 (CARRY) ← MSB(cR8)
LSB(cR8) ← 0; proveď #d8krát
SHLB cR8, zR8 (CARRY) ← MSB(cR8)
LSB(cR8) ← 0; proveď (zR8)krát
SHRL cR32, #d8 0 → MSB(cR32)
LSB(cR32) → (CARRY); proveď #d8krát
SHRL cR32, zR8 0 → MSB(cR32)
LSB(cR32) → (CARRY) ; proveď (zR8)krát
SHR cR16, #d8 0 → MSB(cR16)
LSB(cR16) → (CARRY); proveď #d8krát
SHR cR16, zR8 0 → MSB(cR16)
LSB(cR16) → (CARRY) ; proveď (zR8)krát
SHRB cR8, #d8 0 → MSB(cR8)
LSB(cR8) → (CARRY); proveď #d8krát
SHRB cR8, zR8 0 → MSB(cR8)
LSB(cR8) → (CARRY) ; proveď (zR8)krát
SHRAL cR32, #d8 MSB → MSB(cR32)
LSB(cR32) → (CARRY); proveď #d8krát
SHRAL cR32, zR8 MSB → MSB(cR32)
LSB(cR32) → (CARRY) ; proveď (zR8)krát
SHRA cR16, #d8 MSB → MSB(cR16)
LSB(cR16) → (CARRY); proveď #d8krát
SHRA cR16, zR8 MSB → MSB(cR16)
LSB(cR16) → (CARRY) ; proveď (zR8)krát
SHRAB cR8, #d8 MSB → MSB(cR8)
LSB(cR8) → (CARRY); proveď #d8krát
SHRAB cR8, zR8 MSB → MSB(cR8)
LSB(cR8) → (CARRY) ; proveď (zR8)krát
BITOVÉ OPERACE
CLRC (CARRY) ← 0
SETC (CARRY) ← 1
CLRVT (OVERFLOW TRAP) ← 0
DI (INTERRUPT) ← 0
EI (INTERRUPT) ← 1
SKOKOVÉ INSTRUKCE
(s výjimkou JVT, JNVT neovlivňují příznakové bity)
SCALL relA11 volání pprg (rel. adr. 11bitů nebo LABEL)
LCALL relA16 volání pprg (rel. adr. 16bitů nebo LABEL)
RET návrat z pprg
SJMP relA11 nepodmíněný skok (rel. adr. 11bitů nebo LABEL)
LJMP relA16 nepodmíněný skok (rel. adr. 16bitů nebo LABEL)
JBC zR8, bX, relA8 skoč, je-li bit (zR8.bX) = 0; bX = 0, 1, ….., 7
JBS zR8, bX, relA8 skoč, je-li bit (zR8.bX) = 1; bX = 0, 1, ….., 7
JC relA8 n. LABEL skoč, je-li (CARRY) = 1
JNC relA8 n. LABEL skoč, je-li (CARRY) = 0
JE relA8 n. LABEL skoč, je-li (ZERO) = 1
JNE relA8 n. LABEL skoč, je-li (ZERO) = 0
JGE relA8 n. LABEL skoč, je-li (NEG.) = 0
JLT relA8 n. LABEL skoč, je-li (NEG.) = 1
JGT relA8 n. LABEL skoč, je-li (NEG.) = 0 AND (ZERO) = 0
JLE relA8 n. LABEL skoč, je-li (NEG.) = 1 OR (ZERO) = 1
JH relA8 n. LABEL skoč, je-li (CARRY) = 1 AND (ZERO) = 0
JNH relA8 n. LABEL skoč, je-li (CARRY) = 0 OR (ZERO) = 1
JV rA8 n. LABEL skoč, je-li (OVERFLOW) = 1
JNV relA8 n. LABEL skoč, je-li (OVERFLOW) = 0
JVT relA8 n. LABEL skoč, je-li (OVERFLOW TRAP) =1 a nuluj tento bit
JNVT relA8 n. LABEL skoč, je-li (OVERFLOW TRAP) =0 a ponech tento bit = 0
JST relA8 n. LABEL skoč, je-li (STICKY) = 1
JNST relA8 n. LABEL skoč, je-li (STICKY) = 0
DJNZW cR16, relA8 n. LABEL (cR16)←(cR16)-1
skoč, je-li (cR16) ≠ 0000H
DJNZ cR8, relA8 n. LABEL (cR8)←(cR8)-1
skoč, je-li (cR8) ≠ 00H
ŘÍDICÍ INSTRUKCE
RST (PC) ← 2080H a nastav registry jako po resetu
NOP (PC) ← (PC) + 1, prázdná operace
SKIP (PC) ← (PC) + 2, prázdná operace
TRAP programové přerušení
Přímá adresa – 156, 1001b, 24h, R5, WR8
Přímá hodnota – #156, #PI Nepřímá hodnota – [156], [1001b], [WR8] Nepřímá hodnota s indexem – 156[WR8] – krátký index – 156[0]
Adresování pro blbé
|