Académique Documents
Professionnel Documents
Culture Documents
y Set de instrucciones
Microcontroladores
Freescale Familia HC(S)08
0. Modos de direccionamiento
Direccionamiento
Inherente (INH)
Direccionamiento
Extendido (EXT)
Direccionamiento
Indexado sin
Offset (IX)
Direccionamiento
Indexado con
Offset de 8 bits
(IX1)
Direccionamiento
Indexado con
Offset de 16 bits
(IX16)
Direccionamiento
Indexado con el
SP y Offset de 8
bits (SP1)
Direccionamiento
Indexado con el
SP y Offset de 16
bits (SP2)
Direccionamiento
Relativo (REL)
PC no es afectado
Direccionamiento
Indexado con
Offset de 16 bits y
PostIncremento
(IX1+)
Direccionamiento
Memoria a
memoria
Direccionamiento
Memoria a
memoria
Inmediato a
Directo (IMD)
Direccionamiento
Memoria a
memoria
Directo a Directo
(DD)
Direccionamiento
Memoria a
memoria
Indexado con
PostIncremento a
Directo (IX+D)
Direccionamiento
Memoria a
memoria
Directo a
Indexado con
PostIncremento
(DIX+)
1. Instrucciones Aritmticas
ADC #opr8
ADC opr8
ADC opr16
ADC ,X
ADC opr8,X
ADC opr16,X
ADC opr8,SP
ADC opr16,SP
A = A + C + opr8
A = A + C + (opr8)
A = A + C + (opr16)
A = A + C + (HX)
A = A + C + (opr8 + HX)
A = A + C + (opr16 + HX)
A = A + C + (opr8 + SP)
A = A + C + (opr16 + SP)
A = A + opr8
A = A + (opr8)
A = A + (opr16)
A = A + (HX)
A = A + (opr8 + HX)
A = A + (opr16 + HX)
A = A + (opr8 + SP)
A = A + (opr16 + SP)
AIS #opr8
AIX #opr8
ADD #opr8
ADD opr8
ADD opr16
ADD ,X
ADD opr8,X
ADD opr16,X
ADD opr8,SP
ADD opr16,SP
ASLA
C (opr8) 0
Corrimiento Aritmtico C (HX) 0
a la izquierda
C (opr8 + HX) 0
C (opr8 + SP) 0
Corrimiento Aritmtico C A 0
a la izquierda de A
ASLX
Corrimiento Aritmtico C X 0
a la izquierda de X
ASR opr8
ASR ,X
ASR opr8,X
ASR opr8,SP
ASRA
M7 (opr8) C
Corrimiento Aritmtico M7 (HX) C
a la derecha
M7 (opr8 + HX) C
M7 (opr8 + SP) C
Corrimiento Aritmtico A7 A C
a la derecha de A
ASRX
Corrimiento Aritmtico X7 X C
a la derecha de X
ASL opr8
ASL ,X
ASL opr8,X
ASL opr8,SP
CMP #opr8
CMP opr8
CMP opr16
CMP ,X
CMP opr8,X
CMP opr16,X
CMP opr8,SP
CMP opr16,SP
Comparar el
Acumulador con
Memoria
A - opr8
A - (opr8)
A - (opr16)
A - (HX)
A - (opr8 + HX)
A - (opr16 + HX)
A - (opr8 + SP)
A - (opr16 + SP)
CPHX #opr16
CPHX opr16
CPX #opr8
CPX opr8
CPX opr16
CPX ,X
CPX opr8,X
CPX opr16,X
CPX opr8,SP
CPX opr16,SP
DAA
DEC opr8
DEC ,X
DEC opr8,X
DEC opr8,SP
Comparar Registro X
con Memoria
Ajuste Decimal de
Acumulador
Decrementar
HX - opr16
HX - (opr16)
X - opr8
X - (opr8)
X - (opr16)
X - (HX)
X - (opr8+HX)
X - (opr16+HX)
X - (opr8+SP)
X - (opr16+SP)
A10
(opr8) = (opr8) 1
(HX) = (HX) 1
(opr8+HX)=(opr8+HX)1
(opr8+SP)=(opr8+SP) 1
DECA
Decrementar A
A= A- 1
DECX
Decrementar X
X=X-1
Divisin
A = H:A
X
DIV
INC opr8
INC ,X
INC opr8,X
INC opr8,SP
Incrementar
H = Residuo
(opr8) = (opr8)+ 1
(HX) = (HX) + 1
(opr8+HX)=(opr8+HX)+1
(opr8+SP) = (opr8+SP)+ 1
INCA
Incrementar A
A= A+ 1
INCX
Incrementar X
X=X+1
MUL
Multiplicacin
X:A = A * X
NSA
Nibble Swap
Accumulator
A = A[3:0]:A[7:4]
A = A - C - opr8
A = A - C - (opr8)
A = A - C - (opr16)
A = A - C - (HX)
A = A - C - (opr8+HX)
A = A - C - (opr16+HX)
A = A - C - (opr8+SP)
A = A - C - (opr16+SP)
A = A - opr8
A = A - (opr8)
A = A - (opr16)
A = A - (HX)
A = A - (opr8+ HX)
A = A - (opr16+ HX)
A = A - (opr8+ SP)
A = A - (opr16+ SP)
(opr8) - $00
(HX) - $00
(opr8+HX) - $00
SBC #opr8
SBC opr8
SBC opr16
SBC ,X
SBC opr8,X
SBC opr16,X
SBC opr8,SP
SBC opr16,SP
SUB #opr8
SUB opr8
SUB opr16
SUB ,X
SUB opr8,X
SUB opr16,X
SUB opr8,SP
SUB opr16,SP
TST opr8
TST ,X
TST opr8,X
Resta
2. Instrucciones Lgicas
AND #opr8
AND opr8
AND opr16
AND ,X
AND opr8,X
AND opr16,X
AND opr8,SP
AND opr16,SP
BIT #opr8
BIT opr8
BIT opr16
BIT ,X
BIT opr8,X
BIT opr16,X
BIT opr8,SP
BIT opr16,SP
COM opr8
COM ,X
COM opr8,X
COM opr8,SP
COMA
Bit Test
Complemento a uno
A = A & opr8
A = A & (opr8)
A = A & (opr16)
A = A & (HX)
A = A & (opr8 + HX)
A = A & (opr16 + HX)
A = A & (opr8 + SP)
A = A & (opr16 + SP)
A & opr8
A & (opr8)
A & (opr16)
A & (HX)
A & (opr8 + HX)
A & (opr16 + HX)
A & (opr8 + SP)
A & (opr16 + SP)
COMX
EOR #opr8
EOR opr8
EOR opr16
EOR ,X
EOR opr8,X
EOR opr16,X
EOR opr8,SP
EOR opr16,SP
LSLA
A = A opr8
A = A (opr8)
A = A (opr16)
OR Exclusiva entre
A = A (HX)
Acumulador y Memoria
A = A (opr8+ HX)
A = A (opr16+ HX)
A = A (opr8+ SP)
A = A (opr16+ SP)
C (opr8) 0
Corrimiento Lgico a la C (HX) 0
Izquierda
C (opr8+ HX) 0
C (opr8+ SP) 0
Corrimiento Lgico a la C A 0
Izquierda de A
LSLX
Corrimiento Lgico a la C X 0
Izquierda de X
LSR opr8
LSR ,X
LSR opr8,X
LSR opr8,SP
0 (opr8) C
Corrimiento Lgico a la 0 (HX) C
Derecha
0 (opr8+HX) C
0 (opr8+SP) C
Corrimiento Lgico a la 0 A C
Derecha de A
LSL opr8
LSL ,X
LSL opr8,X
LSL opr8,SP
LSRA
LSRX
Corrimiento Lgico a
0 X C
NEG opr8
NEG ,X
NEG opr8,X
NEG opr8,SP
Complemento a Dos
NEGA
NEGX
ORA #opr8
ORA opr8
ORA opr16
ORA ,X
ORA opr8,X
ORA opr16,X
ORA opr8,SP
ORA opr16,SP
A = A or opr8
A = A or (opr8)
A = A or (opr16)
OR entre Acumulador y A = A or (HX)
Memoria
A = A or (opr8+HX)
A = A or (opr16+HX)
A = A or (opr8+SP)
A = A or (opr16+SP)
ROL opr8
ROL ,X
ROL opr8,X
ROL opr8,SP
ROLA
ROLX
Rotacin a la izquierda
a travs del Acarreo
C (opr8) C
C (HX) C
C (opr8+ HX) C
C (opr8+ SP) C
Rotacin a la izquierda
del Acumulador a
travs del Acarreo
C A C
Rotacin a la izquierda
de X a travs del
Acarreo
CXC
ROR opr8
ROR ,X
ROR opr8,X
ROR opr8,SP
RORA
RORX
C (opr8) C
Rotacin a la derecha a C (HX) C
travs del Acarreo
C (opr8+ HX) C
C (opr8+ SP) C
Rotacin a la derecha
del Acumulador a travs C A C
del Acarreo
Rotacin a la derecha
de X a travs del
Acarreo
CXC
3. Instrucciones de transferencia de
datos
CLR opr8
CLR ,X
CLR opr8,X
CLR opr8,SP
Borrar
(opr8) = 0
(HX) = 0
(opr8 + HX) = 0
(opr8 + SP) = 0
CLRA
Borrar Acumulador
A= 0
CLRH
H=0
CLRX
X=0
LDA #opr8
LDA opr8
LDA opr16
LDA ,X
LDA opr8,X
LDA opr16,X
LDA opr8,SP
LDA opr16,SP
Cargar el Acumulador
A = opr8
A = (opr8)
A = (opr16)
A = (HX)
A = (opr8+ HX)
A = (opr16+ HX)
A = (opr8+ SP)
A = (opr16+ SP)
LDHX #opr16
LDHX opr16
Cargar H:X
HX = opr16
HX = (opr16: opr16+1)
LDX #opr8
LDX opr8
LDX opr16
LDX ,X
LDX opr8,X
LDX opr16,X
LDX opr8,SP
LDX opr16,SP
MOV
#opr8_1,opr8_2
MOV
opr8_1,opr8_2
MOV X+,opr8
Cargar X
Mover Byte
MOV opr8,X+
PSHA
X = opr8
X = (opr8)
X = (opr16)
X = (HX)
X = (opr8+ HX)
X = (opr16+ HX)
X = (opr8+ SP)
X = (opr16+ SP)
(opr8_1) = opr8_2
(IMD) immediate-direct
(opr8_2) = (opr8_1)
(opr8) = (HX)
HX = HX + 1
(HX) = (opr8)
HX = HX + 1
PSHH
Guardar H en la pila
Push H to stack
SP = SP - 1
PSHX
Guardar X en la pila
Push X to stack
SP = SP - 1
PULA
Sacar Acumulador de la SP = SP + 1
pila
Pull A
PULH
Sacar H de la pila
SP = SP + 1
Pull H
PULX
Sacar X de la pila
SP = SP + 1
Pull X
Inicializar SP
SPL = $FF
RSP
STA opr8
STA opr16
STA ,X
STA opr8,X
STA opr16,X
STA opr8,SP
STA opr16,SP
STHX opr8
STX opr8
STX opr16
STX ,X
STX opr8,X
STX opr16,X
STX opr8,SP
STX opr16,SP
TAP
(opr8) = A
(opr16) = A
(HX) = A
Almacenar Acumulador (opr8+ HX) = A
en Memoria
(opr16+ HX) = A
(opr8+ SP) = A
(opr16+ SP) = A
Almacenar H:X en
Memoria
Almacenar X en
Memoria
(opr8:opr8+1) = HX
(opr8) = X
(opr16) = X
(HX) = X
(opr8+ HX) = X
(opr16+ HX) = X
(opr8+ SP) = X
(opr16+ SP) = X
TAX
Transfer Accumulator to X = A
Index Register X
TPA
Transfer CCR to
Accumulator
TSX
TXA
TXS
A = CCR
H:X = SPH:SPL
SPH:SPL = H:X
4. Instrucciones de Salto
4.1 Saltos Incondicionales
JMP opr8
JMP opr16
JMP ,X
JMP opr8,X
JMP opr16,X
Salto Incondicional
PC = opr8
PC = opr16
PC = (HX)
PC = (opr8+HX)
PC = (opr16+HX)
Bifurcar si Acarreo = 0
If C = 0 then Branch
Branch = PC + 2 + rel
BCS rel
Bifurcar si Acarreo = 1
If C = 1 then Branch
Branch = PC + 2 + rel
BEQ rel
Bifurcar si es igual
If Z = 1 then Branch
Branch = PC + 2 + rel
BGE rel
Bifurcar si es
(operandos con signo)
BGT rel
Bifurcar si es >
(operandos con signo)
If (N V) = 0 then Branch
Branch = PC + 2 + rel
BHCC rel
Bifurcar si Acarreo
Intermedio = 0
If H = 0 then Branch
Branch = PC + 2 + rel
BHCS rel
Bifurcar si Acarreo
Intermedio = 1
If H = 1 then Branch
Branch = PC + 2 + rel
BHI rel
BHS rel
If C = 0 then Branch
Branch = PC + 2 + rel
BIH rel
BIL rel
BLE rel
Bifurcar si es
(operandos con signo)
BLO rel
If C = 1 then Branch
Branch = PC + 2 + rel
BLS rel
If (C & Z) = 1 then
Branch
Branch = PC + 2 + rel
BLT rel
Bifurcar si es <
(operandos con signo)
If (N V) = 1 then
Branch
Branch = PC + 2 + rel
BMC rel
Bifurcar si Mscara de
Interrupcin = 0
If I = 0 then Branch
Branch = PC + 2 + rel
BMI rel
Bifurcar si negativo
If N = 1 then Branch
Branch = PC + 2 + rel
BMS rel
Bifurcar si Mscara de
Interrupcin = 1
If I = 1 then Branch
Branch = PC + 2 + rel
BNE rel
Bifurcar si no es igual
If Z = 0 then Branch
Branch = PC + 2 + rel
BPL rel
Bifurcar si es positivo
BRA rel
Bifurcar Siempre
BRCLR
n,opr8,rel
Bifurcar si Bit n en
Memoria = 0
BRN rel
BRSET
n,opr8,rel
Nunca bifurcar
Bifurcar si Bit n en
Memoria = 1
If N = 0 then Branch
Branch = PC + 2 + rel
PC = PC + 2 + rel
If Mn = 0 then Branch
Branch = PC + 3 + rel
PC = PC + 2
If Mn = 1 then Branch
Branch = PC + 3 + rel
CBEQ X+,rel
CBEQ
opr8,X+,rel
Compara y salta si es
Igual
If A- (opr8) = 0 then
Branch
Branch = PC + 3 + rel
If A - (HX) = 0 then
Branch
Branch = PC + 2 + rel
HX = HX + 1
If A - (opr8 + HX) = 0
then Branch
Branch = PC + 2 + rel
HX = HX + 1
CBEQ
opr8,SP,rel
CBEQA
#opr8,rel
If A - opr8 = 0 then
Branch
Branch = PC + 3 + rel
CBEQX
#opr8,rel
If X - opr8 = 0 then
Branch
Branch = PC + 3 + rel
DBNZ opr8,rel
(opr8) = (opr8) 1
If (opr8) 0 then Branch
Branch = PC + 3 + rel
DBNZ X,rel
(HX) = (HX) 1
If (HX) 0 then Branch
Branch = PC + 3 + rel
(opr8+HX) = (opr8+HX)
1
DBNZ opr8,X,rel
Decrementar y bifurcar
si 0
If (opr8+HX) 0 then
Branch
Branch = PC + 4 + rel
(opr8+SP) = (opr8+SP) - 1
If (opr8+SP) 0 then
Branch
Branch = PC + 4 + rel
DBNZ
opr8,SP,rel
DBNZA rel
Decrementar el
Acumulador y bifurcar
si 0
A= A- 1
If A 0 then Branch
Branch = PC + 2 + rel
DBNZX rel
Decrementar X y
bifurcar
si 0
X=X1
If X 0 then Branch
Branch = PC + 2 + rel
5. Instrucciones de llamado y
retorno de subrutinas
BSR rel
JSR opr8
JSR opr16
JSR ,X
JSR opr8,X
JSR opr16,X
RTI
RTS
Bifurcar a Subrutina
Salto a subrutina
PC = PC + 2
Push PCL
SP = SP - 1
Push PCH
SP = SP 1
PC = PC + rel
PC = opr8
PC = opr16
PC = (HX)
PC = (opr8 + HX)
PC = (opr16 + HX)
SP = SP + 1 Pull CCR
SP = SP + 1 Pull A
Retorno de Interrupcin SP = SP + 1 Pull X
SP = SP + 1 Pull PCH
SP = SP + 1 Pull PCL
Retorno de Subrutina
SP = SP + 1
Pull PCH
SP = SP + 1
Pull PCL
Borrar Bit n en
Memoria
Mn 0; (n = 0,1,..7)
M(opr8) can be any RAM
or I/O register address
BSET n,opr8
Hacer Bit n =1 en
Memoria
CLC
C0
CLI
Borrar Mscara de
Interrupcin
I0
C1
SEC
Hacer 1 el Acarreo
SEI
Hacer 1 el bit de
mscara de Interrupcin I 1
7. Otras instrucciones
NOP
No Operacin
STOP
Does nothing
I0
SWI
Interrupcin por
Software
PC = PC + 1
Push PCL
SP = SP - 1
Push PCH
SP = SP - 1
Push X
SP = SP - 1
Push A
SP= SP - 1
Push CCR
SP = SP - 1
I=0
PCH = ($FFFC)
PCL = ($FFFD)
WAIT
I=0