Sei sulla pagina 1di 30

SET DE INSTRUCCIONES FAMILIA MCS 51

SET DE INSTRUCCIONES

1.1 DESCRIPCION

Se describe en los párrafos siguientes el Set de Instrucciones de la familia del microcomputador


8051. En el desarrollo del mismo se utilizo la siguiente nomenclatura:

Rn
- Registros R7 a R0 del banco de registros actualmente seleccionado.
Directo
- Dirección de 8 bits de un dato en la Ram interna. Este puede ser un lugar de
memoria
(00h-7Fh) o un SFR, es decir puertas de entrada salida, registros de control, registros de
estados, etc. (80h-FFh).
@Ri
- Lugar de Ram interna de 8 bit (00h-FFh) direccionado indirectamente a través de
los registros R1 o R0
#Dato
- Constante de 8 bits incluida en la instrucción
#Dato 16
- Constante de 16 bits incluida en la instrucción.
Direc 16
- Dirección destino de 16 bits. Utilizada por LCALL y LJMP. Un salto puede ser a
cualquier lugar dentro de los 64K bytes del espacio de direccionamiento de
memoria de programa.
Direc 11
- Dirección destino de 11 bits. Utilizada por ACALL y AJMP. El salto estará dentro
de la misma pagina de 2 kbytes de la memoria de programa junto con el primer byte de
la siguiente instrucción.
Desp
- Byte de desplazamiento de 8 bits en complemento a 2. Utilizada por SJMP y todos
los saltos condicionales. El rango es de -128 a +127 bytes relativo al primer byte de la
siguiente instrucción.
Bit
- Bit direccionado en forma directa de la RAM interna de datos o SFR.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 1


1.2 INSTRUCCIONES QUE AFECTAN LOS FLAGS DEL PSW

INSTRUCCION Cy OV AC INSTRUCCION Cy OV AC

ADD X X X CLR C 0
ADDC X X X CPL C X
SUBB X X X ANL C,bit X
MUL 0 X ANL C,/bit X
DIV 0 X ORL C,bit X
DA X ORL C,/bit X
RRC X MOV C,bit X
RLC X CJNE X
SETBC 1

Todas las operaciones que utilizan el PSW como registro destino afectan los flags.

1.3 DESCRIPCION DE LAS INSTRUCCIONES

* ACALL Direc 11

Función: Llamado a Subrutina (Direccionamiento Directo)

Descripción: ACALL es un llamado a subrutina incondicional. En la ejecución de la


instrucción, el contenido del PC se incrementa dos veces y este valor (direccion de
retorno) se almacena en la memoria pila en dos lugares, (el byte menos significativo
primero), para lo cual el puntero de pila (SP) se incrementa dos veces.
La dirección destino se forma con los 5 bits mas significativos del PC incrementado y los 11
bits contenidos en la instrucción. Debido a esto es que el máximo salto posible es de 2 Kbytes.

Flags Afectados: ninguno

Numero de Bytes: 2

Ciclos de Maquina: 2

Codificación:

a10 a9 a8 1 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0

Los tres BMS del primer byte del código de la instrucción, conjuntamente con el segundo
byte , conforman los 11 bits de dirección que se debe especificar en la instrucción.

Operación: ACALL
(PC) <- (PC) + 2
(SP) <- (SP) + 1
((SP)) <- (PCL)
(SP) <- (SP) + 1

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 2


((SP)) <- (PCH)
(PC 10-0) <- dirección especificada

* ADD A, <byte fuente>

Función: Suma

Descripción: Suma el dato indicado en el byte fuente, con el contenido del Acumulador,
dejando el resultado en este.

Flags afectados: CY, AC, OV.

Direccionamiento: Se permiten cuatro modos de direccionamiento, a saber:

a) REGISTRO b) DIRECTO
ADD A,Rn ADD A, dirección
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
00101rrr 0 0 1 0 0 1 1 1 dirección
Operación: ADD peración: ADD
(A) <- (A) + (Rn) (A) <- (A) + (dir.)

c) INDIRECTO por REGISTRO d) INMEDIATO


ADD A,@Ri ADD A,#dato
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina:
Codificación: Codificación:
0010011i 00100100 dato
Operación: ADD Operación: ADD
(A) <- (A) + ((Ri)) (A) <- (A) + dato

* ADDC A, <byte fuente>

Función: Suma con Acarreo (Carry)

Descripción: Suma el dato indicado en el byte fuente, con el contenido del Acumulador mas
el transporte, dejando el resultado en el Acumulador.

Flags afectados: CY, AC, OV.

Direccionamiento: Se permiten cuatro modos de direccionamiento, a


saber:

a) REGISTRO b) DIRECTO
ADDC A,Rn ADDC A, dirección
Número de Bytes: 1 Número de Bytes: 2

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 3


Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
00111rrr 0 0 1 1 0 1 0 1 dirección
Operación: ADDC Operación: ADDC
(A) <- (A) + (Rn) + Cy (A) <- (A) + (dir.) + Cy

c) INDIRECTO por REGISTRO. d) INMEDIATO


ADDC A,@Ri ADDC A,#dato
Numero de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
0011011i 00110100 dato
Operación: ADDC Operación: ADD C
(A) <- (A) + ((Ri)) + Cy (A) <- (A) + dato + Cy

* AJMP Direc 11

Función: Salto Incondicional (Direccionamiento Directo)

Descripción: AJMP transfiere la ejecución del programa a la dirección indicada, la cual


se forma con los 5 BMS del PC incrementado 2 veces, y los 11 bits contenidos en la
instrucción.
Debido a esto es que el máximo salto posible es de 2 Kbytes.

Flags Afectados: ninguno


Número de Bytes: 2
Ciclos de Máquina: 2
Codificación:

a10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0

Los tres BMS del primer byte del c¢digo de la instrucción, conjuntamente con el
segundo byte, conforman los 11 bits de direcciones que se deben especificar en la instrucción.

Operacin: AJMP
(PC) <- (PC) + 2
(PC 10-0) <- direc. especificada

* ANL <destino>,<fuente>

Función: Realiza la operación lógica AND (Y) entre dos bytes.

Descripción: Ejecuta la operación AND bit a bit entre las variables indicadas,
almacenando el resultado en el byte destino.
Cuando el destino es el Ac, el operando fuente puede direccionarse mediante los modos
registro, directo, indirecto por registro o inmediato. Cuando el destino es una dirección de
memoria el operando fuente puede ser un dato inmediato o el contenido del Acumulador.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 4


Flags Afectados: ninguno

Direccionamiento: Permite la utilización de cuatro modos segó sea el registro destino, a saber:

I) Operando Destino: Acumulador

a) REGISTRO b) DIRECTO
ANL A,Rn ANL A, direccin
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
01011rrr 0 1 0 1 0 1 0 1 dirección
Operación: ANL Operación: ANL
(A) <- (A) ^ (Rn) (A) <- (A) ^ (dir.)

c) INDIRECTO por REGISTRO d) INMEDIATO


ANL A,@Ri ANL A,#dato
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
0101011i 01010100 dato
Operación: ANL Operación: ANL
(A) <- (A) ^ ((Ri)) (A) <- (A) ^ dato

II) Operando Destino: Dirección de Memoria

a) REGISTRO (Acumulador) b) INMEDIATO


ANL dir,A ANL dir,#dato
Número de Bytes: 2 Número de Bytes:
Ciclos de Máquina: 1 Ciclos de Máquina:
Codificación: Codificación:
0 1 0 1 0 0 1 0 dirección 0 1 0 1 0 0 1 1 dir. dato
Operación: ANL Operación: ANL
(dir.) <- (dir.) ^ (A) (dir) <- (dir.) ^ #dato

* ANL C,<bit fuente>

Función: Realiza la operación lógica AND (Y) entre el flag de transporte y el fuente.

Descripción: El resultado de la operación AND realizada se carga en el flag de transporte. Si


en el assembler se antepone una "/" al bit fuente, el valor considerado para la operación será
su complemento. No afecta al bit fuente.

Nota:
El operando fuente puede ser cualquier bit direccionable de la zona de RAM interna o de
alguno de los registros de funciones especiales.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 5


Flags Afectados: Cy

Número de Bytes: 2

Ciclos de Máquina: 2

a) ANL C,bit b) ANL C,/bit


Codificación: Codificación:
1 0 0 0 0 0 1 0 bit 1 0 1 1 0 0 0 0 bit
Operación: ANL Operación: ANL
(C) <- (C) ^ (bit) (C) <- (C) ^ Compl.(bit)

* CJNE <destino>, <fuente>, desplazamiento

Función: Compara y salta si no son iguales.

Descripción: CJNE compara las magnitudes de los operandos fuente y destino, saltando si sus
valores no son iguales. La dirección destino se obtiene sumando el desplazamiento indicado
en la instrucción, al (PC), luego de que éste quedó apuntando al primer byte de la instrucción
siguiente. En caso de que la condición no se cumpla, no se produce el salto. El desplazamiento
es de ocho bits y se considera en sistema de representación de complemento a dos, por lo tanto
su rango es de -128 a 127.
El flag de transporte se pone en uno cuando el valor sin signo del operando fuente es mayor
que el del operando destino, y en cero en el caso inverso.
Ninguno de los operandos es afectado por esta instrucción.

Flags Afectados: C

Número de Bytes: 3

Ciclos de Máquina: 2
Direccionamiento: Para ubicar los operandos a comparar, hay cuatro combinaciones
posibles, a saber:

a) CJNE A,dir.,desp. b) CJNE A,#dato,desp.


Codificación: Codificación:
1 0 1 1 0 1 0 1 dir. desp 1 0 1 1 0 1 0 0 dato desp.
Operación: CJNE Operación: CJNE
(A) - (dir.) (A) - dato

c) CJNE Rn,#dato,desp. d) CJNE @Ri,#dato,desp.


Codificación: Codificación:
1 0 1 1 1 r r r dato desp. 1 0 1 1 0 1 1 i dato desp.
Operación: CJNE Operación: CJNE
(Rn) - dato ((Ri)) - dato

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 6


* CLR A

Función: Pone en cero el acumulador.

Descripción: Todos los bits del acumulador son colocados en cero.

Flags Afectados: ninguno

Número de Bytes: 1

Ciclos de Máquina: 1

Codificación:
11100100
Operación: CLR
(A) <- 0

* CLR bit

Función: Pone en cero un bit.

Descripción: El bit indicado es colocado en cero. Opera sobre cualquier bit direccionable en
forma directa.

Flags Afectados: ninguno (salvo el seleccionado)

Número de Bytes: 2
Ciclos de Máquina: 1
Codificación:
1 1 0 0 0 0 1 0 dir. bit
Operación: CLR
(bit) <- 0

* CLR C

Función: Pone en cero el flag de transporte.

Descripción: El flag de transporte (C) es colocado en cero.

Flags Afectados: C

Número de Bytes: 1

Ciclos de Máquina: 1
Codificación:
11000011
Operación: CLR
(C) <- 0

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 7


* CPL A

Función: Complemento a "1" del Acumulador.

Descripción: Todos los bits del Acumulador son complementados booleanamente.

Flags Afectados: ninguno

Número de Bytes: 1

Ciclos de Maquina: 1

Codificación:
11110100
Operación: CPL
(A) <- Comp.(A)

* CPL bit

Función: Complemento a "1" del bit seleccionado.

Descripción: El bit indicado es complementado booleanamente. Opera sobre cualquier bit


direccionable en forma directa.

Flags Afectados: ninguno (salvo el seleccionado)

Número de Bytes: 2

Ciclos de Máquina: 1

Codificación:
1 0 1 1 0 0 1 0 bit
Operación: CPL
(bit) <- Comp.(bit)

* CPL C

Función: Complemento a "1" del bit de Transporte.

Descripción: El flag de transporte es complementado booleanamente.

Flags Afectados: C

Número de Bytes: 1

Ciclos de Máquina: 1

Codificación:

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 8


10110011
Operación: CPL
(C) <- Comp.(C)

* DA A

Función: Realiza el Ajuste Decimal del Acumulador para sumar en


BCD.

Descripción: DA A, ajusta el valor del dato de 8 bits contenido en el Acumulador, resultante


de la Suma de dos datos expresados en BCD, produciendo como resultado dos dígitos BCD.
Esta Instrucción puede ser utilizada luego de alguna de las instrucciones de suma ADD o
ADDC.

Nota: La instrucción DA A "NO" convierte el valor de un dato hexadecimal contenido en el


acumulador a decimal, tampoco debe utilizarse esta instrucción luego de una resta ni
incremento.

Flags Afectados: C

Número de Bytes: 1

Ciclos de Máquina: 1

Codificación:
11010100
Operación: DA A
si {[(A3-0) > 9 ] ¢ [(AC) = 1 ]} -->> (A3-0) <- (A3-0) + 6
y/o si {[(A7-4) > 9 ] ¢ [(C) = 1 ]} -->> (A7-4) <- (A7-4) + 6

* DEC A

Función: Decrementa el dato contenido en el acumulador.

Descripción: Decrementa el dato contenido en el acumulador. Si el valor inicial es 00h,


luego de la ejecución será 0FFh.

Flags Afectados: ninguno

Número de Bytes: 1

Ciclos de Máquina: 1

Codificación:
00010100
Operación: DEC
(A) <- (A) - 1

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 9


* DEC byte

Función: Decrementa el dato contenido en el byte especificado.

Descripción: Decrementa el dato contenido en el byte indicado, si el valor inicial es 00h,


luego de la ejecución será 0FFh.

Flags Afectados: ninguno

Direccionamiento: Contempla tres modos de direccionamiento, a saber:

a) REGISTRO b) DIRECTO
DEC Rn DEC (dir.)
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
00011rrr 0 0 0 1 0 1 0 1 dirección
Operación: DEC Operación: DEC
(Rn) <- (Rn) - 1 (dir.) <- (dir.) - 1

c) INDIRECTO por REGISTRO.


DEC @Ri
Número de Bytes: 1
Ciclos de Máquina: 1
Codificación:
0001011i
Operación: DEC
((Ri)) <- ((Ri)) - 1

* DIV AB

Función: Dividir.

Descripción: Realiza una división entera, donde el dividendo es el dato almacenado en el


acumulador y el divisor es el contenido del registro B. Ambos operandos se consideran
como números enteros sin signo.
Efectuada la operación, el cociente entero es almacenado en el acumulador y el resto en el
registro B.
Si el divisor (B) es cero, los valores entregados en los registros A y B no deben tenerse en
cuenta (son indefinidos) y el flag de desborde (OV) es puesto a "1".

Flags Afectados: OV, C=0

Número de Bytes: 1
Ciclos de Máquina: 4

Codificación:

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 10


10000100
Operación: DIV
(A) <- parte entera (A) / (B)
(B) <- (A) - [ parte entera (A) / (B) ] * (B)

* DJNZ <byte>,<desplazamiento>

Función: Decrementa y salta si no es cero.

Descripción: DJNZ decrementa la variable indicada en la


instrucción, saltando si el valor obtenido no es cero. La dirección destino se obtiene sumando
el desplazamiento indicado en la instrucción, al (PC), luego de que éste quedó apuntando al
primer byte de la instrucción siguiente.
En caso de que la condición no se cumpla, no se produce el salto.
El desplazamiento es de ocho bits y se considera en sistema de representación de
complemento a dos, por lo tanto su rango es de -128 a 127.

Flags Afectados: Ninguno

Direccionamiento: El byte decrementado puede ser un registro o un lugar de memoria


direccionado en forma directa.

a) REGISTRO b) DIRECTO
DJNZ Rn,desp. DJNZ direc,desp.
Número de Bytes: 2 Número de Bytes: 3
Ciclos de Máquina: 2 Ciclos de Máquina: 2
Codificación: Codificación:
1 1 0 1 1 r r r desp. 1 1 0 1 0 1 0 1 dir. desp.
Operación: Operación:
(Rn) <- (Rn) - 1 (direc.) <- (direc.) - 1

* INC A

Función: Incrementa el dato contenido en el Acumulador.

Descripción: Incrementa el dato contenido en el Acumulador, si el valor inicial es 0FFh, luego


de la ejecución será 00h.

Flags Afectados: ninguno

Número de Bytes: 1

Ciclos de Máquina: 1

Codificación:
00000100
Operación: INC
(A) <- (A) + 1

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 11


* INC byte

Función: Incrementa el dato contenido en el byte especificado

Descripción: Incrementa el dato contenido en el byte indicado,si el valor inicial es 0FFh luego
de la ejecución será 00h.

Flags Afectados: ninguno

Direccionamiento: Contempla tres modos de direccionamiento, a saber:

a) REGISTRO b) DIRECTO
INC Rn INC dir.
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
00001rrr 0 0 0 0 0 1 0 1 dirección
Operación: INC Operación: INC
(Rn) <- (Rn) + 1 (dir.) <- (dir.) + 1

c) INDIRECTO por REGISTRO.


INC @Ri
Número de Bytes: 1
Ciclos de Máquina: 1
Codificación:
0000011i
Operación: INC
((Ri)) <- ((Ri)) + 1

* INC DPTR

Función: Incrementa el puntero de datos ( DPTR )

Descripción: Incrementa en uno el dato de 16 bits contenido en el DPTR.

Flags Afectados: ninguno

Número de Bytes: 1

Ciclos de Máquina: 2

Codificación:
10100011
Operación: INC
(DPTR) <- (DPTR) + 1

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 12


* JB bit,desp.

Función: Salta si el bit especificado es uno.

Descripción: Si el bit indicado es uno, salta a la dirección destino. Caso contrario, ejecuta la
instrucción siguiente.
La dirección destino del salto se obtiene sumando el desplazamiento al valor del PC,
luego de que éste quede apuntando al primer byte de la siguiente instrucción.
El desplazamiento es de ocho bits y se considera en sistema de representación de
complemento a dos, por lo tanto su rango es de -128 a 127.
El bit analizado no se modifica en la ejecución.

Flags Afectados: ninguno.

Número de Bytes: 3

Ciclos de Máquina: 2

Codificación:
0 0 1 0 0 0 0 0 bit desp.
Operación: JB
(PC) <- (PC) + 3
SI (bit) = 1 => (PC) <- (PC) + desp.

* JBC bit,desp.

Función: Salta si el bit especificado es uno y lo pone en cero.

Descripción: Si el bit indicado es uno, salta a la dirección destino, colocando en cero dicho
bit. Caso contrario, ejecuta la instrucción siguiente
La dirección destino del salto se obtiene sumando el desplazamiento al valor del PC,
luego de que éste quede apuntando al primer byte de la siguiente instrucción.
El desplazamiento es de ocho bits y se considera en sistema de representación de
complemento a dos, por lo tanto su rango es de -128 a 127.

Flags Afectados: ninguno. (Salvo si el bit pertenece al PSW).

Número de Bytes: 3

Ciclos de Máquina: 2

Codificación:

0 0 0 1 0 0 0 0 bit desp.
Operación: JBC
(PC) <- (PC) + 3
SI (bit) = 1 => (PC) <- (PC) + desp.
(bit) = 0

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 13


* JC desp.

Función: Salta si C es uno.

Descripción: Si el flag de transporte (C) es uno, salta a la dirección destino. Caso


contrario, ejecuta la instrucción siguiente.
La dirección destino del salto se obtiene sumando el desplazamiento al valor del PC,
luego de que éste quede apuntando al primer byte de la siguiente instrucción.
El desplazamiento es de ocho bits y se considera en sistema de representación de
complemento a dos, por lo tanto su rango es de -128 a 127.

Flags Afectados: ninguno.

Número de Bytes: 2

Ciclos de Máquina: 2
Codificación:
0 1 0 0 0 0 0 0 desp.
Operación: JC
(PC) <- (PC) + 2
SI (C) = 1 => (PC) <- (PC) + desp.

* JMP @A+DPTR

Función: Salto Incondicional Indirecto.

Descripción: Es una bifurcación incondicional. La dirección destino se obtiene sumando el


(A) (considerado como número sin signo), con los 16 bits del DPTR, este resultado se
almacena en el PC. No modifica los contenidos del A ni del DPTR.

Flags Afectados: ninguno.

Número de Bytes: 1

Ciclos de Máquina: 2

Codificación:
01110011
Operación: JMP
(PC) <- [(A) + (DPTR)]

* JNB bit,desp.

Función: Salta si el bit especificado es cero.

Descripción: Si el bit indicado es cero, salta a la dirección destino. Caso contrario, ejecuta la
instrucción siguiente.
La dirección destino del salto se obtiene sumando el desplazamiento al valor del PC,

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 14


luego de que éste quede apuntando al primer byte de la siguiente instrucción.
El desplazamiento es de ocho bits y se considera en sistema de representación de
complemento a dos, por lo tanto su rango es de -128 a 127.
El bit analizado no se modifica en la ejecución.

Flags Afectados: ninguno.

Número de Bytes: 3

Ciclos de Máquina: 2

Codificación:
0 0 1 1 0 0 0 0 bit desp.
Operación: JNB
(PC) <- (PC) + 3
SI (bit) = 0 => (PC) <- (PC) + desp.

* JNC desp.

Función: Salta si C es cero.

Descripción: Si el flag de transporte (C) es cero, salta a la dirección destino. Caso


contrario, ejecuta la instrucción siguiente.
La dirección destino del salto se obtiene sumando el desplazamiento al valor del PC,
luego de que éste quede apuntando al primer byte de la siguiente instrucción.
El desplazamiento es de ocho bits y se considera en sistema de representación de
complemento a dos, por lo tanto su rango es de -128 a 127.

Flags Afectados: ninguno.

Número de Bytes: 2

Ciclos de Máquina: 2

Codificación:
0 1 0 1 0 0 0 0 desp.
Operación: JNC
(PC) <- (PC) + 2
SI (C) = 0 => (PC) <- (PC) + desp.

* JNZ desp.

Función: Salta si A no es cero.

Descripción: Si algún bit del acumulador es uno, salta a la dirección destino. Caso
contrario, ejecuta la instrucción siguiente.
La dirección destino del salto se obtiene sumando el desplazamiento al valor del PC,
luego de que éste quede apuntando al primer byte de la siguiente instrucción.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 15


El desplazamiento es de ocho bits y se considera en sistema de representación de
complemento a dos, por lo tanto su rango es de -128 a 127.
El acumulador no se modifica en la ejecución.

Flags Afectados: ninguno.

Número de Bytes: 2
Ciclos de Máquina: 2
Codificación:
0 1 1 1 0 0 0 0 desp.
Operación: JNZ
(PC) <- (PC) + 2
SI (A) <> 0 => (PC) <- (PC) + desp.

* JZ desp.

Función: Salta si A es cero.

Descripción: Si todos los bits del acumulador están en cero, salta a la dirección destino.
Caso contrario, ejecuta la instrucción siguiente.
La dirección destino del salto se obtiene sumando el desplazamiento al valor del PC,
luego de que éste quede apuntando al primer byte de la siguiente instrucción.
El desplazamiento es de ocho bits y se considera en sistema de representación de
Complemento a dos.
El acumulador no se modifica en la ejecución.

Flags Afectados: Ninguno

Número de Bytes: 2

Ciclos de Máquina: 2

Codificación:
0 1 1 0 0 0 0 0 desp.
Operación: JZ
(PC) <- (PC) + 2
SI (A) = 0 => (PC) <- (PC) + desp.

* LCALL Direc 16

Función: Llamado a Subrutina (Direccionamiento Directo Largo)

Descripcin: LCALL, es un llamado a subrutina incondicional. En la ejecución de la


instrucción, el contenido del PC se incrementa tres veces y este valor (dirección de retorno) se
almacena en la memoria pila en dos lugares, (el byte menos significativo primero), para lo
cual el puntero de pila (SP) se incrementa dos veces.
La dirección destino (de 16 bits), forma parte de la instrucción, es por ello que la ubicación de la
subrutina puede ser cualquiera dentro del campo direccionable de la memoria de programa.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 16


Flags Afectados: ninguno

Número de Bytes: 3

Ciclos de Máquina: 2

Codificación:
0 0 0 1 0 0 1 0 dir.15-8 dir.7-0
Operación LCALL
(PC) <- (PC) + 3
(SP) <- (SP) + 1
((SP)) <- (PCl)
(SP) <- (SP) + 1
((SP)) <- (PCh)
(PC 15-0) <- dirección especificada

* LJMP Direc 16

Función: Salto incondicional (Direccionamiento Directo Largo)

Descripción: LJMP, es una bifurcación incondicional a la dirección especificada en la


instrucción. La dirección de salto (de 16 bits), forma parte de la instrucción, es por ello que la
dirección destino puede ser cualquiera dentro del campo direccionable de la memoria de
programa.

Flags Afectados: ninguno

Número de Bytes: 3

Ciclos de Máquina: 2

Codificación:
0 0 0 0 0 0 1 0 dir.15-8 dir.7-0
Operación: LJMP
(PC 15-0) <- dirección especificada

* MOV <byte destino>,<byte fuente>

Función: Transfiere un byte.

Descripción: Carga el byte destino con el contenido del byte fuente, este último no es
afectado.

Flags Afectados: ninguno

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 17


Direccionamiento: Es la operación mas flexible del set de instrucciones y permite 15
combinaciones de los modos de direccionamiento posibles. A saber:

a) MOV A,Rn b) MOV A, dir.


Número de Bytes: 1 Número de Bytes: 2
los de Máquina: 1 CicCiclos de Máquina: 1
Codificación: Codificación:
11101rrr 1 1 1 0 0 1 0 1 dirección
Operación: MOV Operación: MOV
(A) <- (Rn) (A) <- (dir.)

d) MOV A,#dato
c) MOV A,@Ri
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
1110011i 01110100 dato
Operación: MOV Operación: MOV
(A) <- ((Ri)) (A) <- dato

e) MOV Rn,A f) MOV Rn,dir.


Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 2
Codificación: Codificación:
11111rrr 1 0 1 0 1 r r r dirección
Operación: MOV Operación: MOV
(Rn) <- (A) (Rn) <- (dir.)

g) MOV Rn,#dato h) MOV dir.,A


Número de Bytes: 2 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
01111rrr dato 1 1 1 1 0 1 0 1 dirección
Operación: MOV Operación: MOV
(Rn) <- dato (dir.) <- (A)

i) MOV dir.,Rn j) MOV dir.d,dir.f.


Número de Bytes: 2 Número de Bytes: 3
Ciclos de Máquina: 2 Ciclos de Máquina: 2
Codificación: Codificación:
1 0 0 0 1 r r r dirección 1 0 0 0 0 1 0 1 dir.f. dir.d.
Operación: MOV Operación: MOV
(dir) <- (Rn) (dir.d) <- (dir.f)

k) MOV dir.,@Ri l) MOV dir.,#dato


Número de Bytes: 2 Número de Bytes: 3
Ciclos de Máquina: 2 Ciclos de Máquina: 2
Codificación: Codificación:
1000011i 0 1 1 1 0 1 0 1 dir. dato

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 18


Operación: MOV Operación: MOV
(dir.) <- ((Ri)) (dir.) <- dato

m) MOV @Ri,A n) MOV @Ri,dir.


Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 2
Codificación: Codificación:
1111011i 1 0 1 0 0 1 1 i dirección
Operación: MOV Operación: MOV
((Ri)) <- (A) ((Ri)) <- (dir.)

ñ)MOV @Ri,#dato
Número de Bytes: 2
Ciclos de Máquina: 1
Codificación:
0111011i dato
Operación: MOV
((Ri)) <- dato

* MOV <bit destino>,<bit fuente>

Función: Transfiere un bit.

Descripción: El bit fuente es copiado en el bit destino. Uno de los operandos debe ser el flag de
transporte (C).

Flags Afectados: ninguno (salvo el bit destino)

a) MOV C,bit b) MOV bit,C


Numero de Bytes: 2 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 2
Codificación: Codificación:
1 0 1 0 0 0 1 0 bit 1 0 0 1 0 0 1 0 bit
Operación: MOV Operación: MOV
(C) <- (bit) (bit) <- (C)

* MOV DPTR,#dato 16

Función: Carga el puntero de datos con una constante de 16 bits.

Descripción: Es una carga inmediata del registro puntero. La parte mas significativa del dato
se encuentra en el segundo byte de la instrucción, mientras que la menos significativa en el
siguiente.
Esta instrucción es la única que transfiere un dato de 16 bits.

Flags Afectados: ninguno

Número de Bytes: 3

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 19


Ciclos de Máquina: 2

Codificación:
1 0 0 1 0 0 0 0 datoh datol
Operación: MOV
(DPTR) <- dato 15-0
(DPH) <- dato 15-8
(DPL) <- dato 7-0

* MOVC A,@A+<reg.base>

Función: Transfiere al A un byte de código.

Descripción: La instrucción carga el Acumulador con un byte de la memoria de programa. La


dirección del byte fuente se obtiene sumando el (A) sin signo con el contenido del registro
base de 16 bits. El registro base puede ser el DPTR o el PC. En este último caso se debe tener
en cuenta que el (PC) es incrementado a la próxima instrucción antes de ser sumado con el
Acumulador.

Flags Afectados: ninguno.

Número de Bytes: 1

Ciclos de Máquina: 2

a) MOVC A,@A+DPTR b) MOVC A,@A+PC


Codificación: Codificación:
10010011 10000011
Operación: MOVC Operación: MOVC
(A) <- ((A)+(DPTR)) (PC) <- (PC)+1
(A) <- ((A)+(PC))

* MOVX <byte destino>,<byte fuente>

Función: Transfiere a memoria externa.

Descripción: La instrucción MOVX transfiere datos entre el acumulador y un byte de la


memoria RAM externa.
Existen dos formas de utilizar la instrucción, su diferencia se manifiesta en la longitud de la
dirección indirecta que provee a la RAM externa, la cual puede ser de 8 o 16 bits.
En el primer tipo, el contenido de R0 ó R1 proveen una dirección de 8 bits, la que es sacada
por P0 en forma multiplexada con los datos correspondientes a esta puerta. Estos 8 bits
pueden ser suficientes cuando se desea expandir el n£mero de puertas de E/S o cuando se
necesita utilizar una RAM de baja capacidad.
En la otra forma de utilizar la instrucci¢n, el puntero de datos (DPTR) genera una dirección
de 16 bits, por la puerta P2 sale el byte mas significativo (DPH) mientras que por P0 aparece la
parte baja (DPL) multiplexado con los datos datos correspondientes a esa puerta. El registro
de funciones especiales P2 retiene su contenido anterior mientras que el buffer de salida

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 20


muestra el (DPH). Esta forma es mas rápida y eficiente para acceder a arreglos de datos,
ya que no es necesaria otra instrucción para configurar las puertas de salida.

Flags Afectados: Ninguno

a) MOVX A,@Ri b) MOVX A,@DPTR


Número de Bytes: 1 Número de Bytes: 1
Ciclos de Máquina: 2 Ciclos de Máquina: 2
Codificación: Codificación:
1110001i 11100000
Operación: MOVX Operación: MOVX
(A) <- ((Ri)) (A) <- ((DPTR))

c) MOVX @Ri,A d) MOVX @DPTR,A


Número de Bytes: 1 Número de Bytes: 1
Ciclos de Máquina: 2 Ciclos de Máquina: 2
Codificación: Codificación:
1111001i 11110000
Operación: MOVX Operación: MOVX
((Ri)) <- (A) ((DPTR)) <- (A)

* MUL AB

Función: Multiplicar

Descripción: Realiza una multiplicación entera sin signo, entre el dato almacenado en el
acumulador y el contenido del registro B. Ambos operandos se consideran como números
enteros sin signo. Efectuada la operación, el byte menos significativo del producto es
almacenado en el acumulador y el mas significativo en el registro B.
Si el el producto es mayor que 0FFh (255) el flag de desborde (OV) es puesto a "1", en el
otro caso (OV) = "0".
Flags Afectados: OV, C=0

Número de Bytes: 1

Ciclos de Máquina: 4

Codificación:
10100100
Operación: MUL
(B A) <- (A)*(B)

* NOP

Función: No realiza operación

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 21


Descripción: La ejecución continúa en la siguiente instrucción, salvo el PC ningún otro
registro es modificado.

Número de Bytes: 1

Ciclos de Máquina: 1

Codificación:
00000000
Operación: NOP
(PC) <- (PC) + 1

* ORL <destino>,<fuente>

Función: Realiza la operación lógica OR (O) entre dos bytes.

Descripción: Ejecuta la operación OR bit a bit entre las variables indicadas, almacenando
el resultado en el byte destino. Cuando el destino es el Ac, el operando fuente puede
direccionarse mediante los modos registro, directo, indirecto por registro o inmediato. Cuando
el destino es una dirección de memoria, el operando fuente puede ser un dato inmediato o
el contenido del Acumulador.

Flags Afectados: ninguno

Direccionamiento: Permite la utilización de cuatro modos de direccionamiento según sea el


registro destino, a saber:

I) Operando Destino: Acumulador

a) REGISTRO b) DIRECTO
ORL A,Rn ORL A, dirección
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
01001rrr 0 1 0 0 0 1 0 1 dirección
Operación: ORL Operación: ORL
(A) <- (A) OR (Rn) (A) <- (A) OR (dir.)

c) INDIRECTO por REGISTRO d) INMEDIATO


ORL A,@Ri ORL A,#dato
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
0100011i 01000100 dato
Operación: ORL Operación: ORL
(A) <- (A) OR ((Ri)) (A) <- (A) OR dato

II) Operando Destino: Dirección de Memoria


a) REGISTRO (ACUMULADOR) b) INMEDIATO

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 22


ORL dir.,A ORL dir.,#dato
Número de Bytes: 2 Número de Bytes: 3
Ciclos de Máquina: 1 Ciclos de Máquina: 2
Codificación: Codificación:
0 1 0 0 0 0 1 0 dirección 0 1 0 0 0 0 1 1 dir. dato
Operación: ORL Operación: ORL
(dir.) <- (dir.) OR (A) (dir.) <- (dir.) OR dato

* ORL C,<bit fuente>

Función: Realiza la operación lógica OR (O) entre el flag de transporte y el fuente.

Descripción: El resultado de la operación realizada se carga en el flag de transporte. Si en el


assembler se antepone una "/" al bit fuente, el valor considerado para la operación será su
complemento.

Nota:
El operando fuente puede ser cualquier bit direccionable de la zona de RAM interna o
alguno de los registros de funciones especiales.

Flags Afectados: C

Número de Bytes: 2

Ciclos de Máquina: 2
a) ORL C,bit b) ORL C,/bit
Codificación: Codificación:
0 1 1 1 0 0 1 0 bit 1 0 1 0 0 0 0 0 bit
Operación: ORL Operación: ORL
(C) <- (C) OR (bit) (C) <- (C) OR Compl.(bit)

* POP dirección

Función: Extrae un dato de la memoria de Pila.

Descripción: El dato contenido en el lugar de memoria RAM interna direccionado por el


Puntero de Pila (SP) es transferido al byte uya dirección se especifica en la instrucción.
El puntero de pila es decrementado en 1.

Flags Afectados: Ninguno

Número de Bytes: 2

Ciclos de Máquina: 2

Codificación:
1 1 0 1 0 0 0 0 dirección
Operación: POP

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 23


(dir.) <- ((SP))
(SP) <- (SP) - 1

* PUSH dirección

Función: Almacena un dato en la memoria Pila

Descripción: El dato contenido en el byte cuya dirección se especifica en la


instrucci¢n, es transferido al lugar de memoria RAM interna direccionado por el Puntero
de Pila (SP), luego que
este es incrementado en 1.

Flags Afectados: Ninguno

Número de Bytes: 2

Ciclos de Máquina: 2
Codificación:
1 1 0 0 0 0 0 0 dirección
Operación: PUSH
(SP) <- (SP) + 1
((SP)) <- (dir.)
* RET

Función: Retorno de Subrutina.

Descripción: RET extrae dos bytes de la memoria pila y los transfiere al PC. El puntero de
pila es decrementado en uno, dos veces.

Flags Afectados: Ninguno

Número de Bytes: 1

Ciclos de Máquina: 2

Codificación:
00100010

Operación: RET
(PCh) <- ((SP))
(SP) <- (SP) - 1
(PCl) <- ((SP))
(SP) <- (SP) - 1

* RETI

Función: Retorno de Interrupción.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 24


Descripción: RETI extrae dos bytes de la memoria pila transfiriéndolos al PC y
restablece la lógica de interrupciones para aceptar nuevas interrupciones del mismo nivel de
prioridad de la atendida. No afecta otros registros, pero el PSW no recupera el valor que
tenía antes de producirse la interrupción. El puntero de pila es decrementado en uno, dos veces.

Flags Afectados: Ninguno

Número de Bytes: 1

Ciclos de Máquina: 2

Codificación:
00110010
Operación: RETI
(PCh) <- ((SP))
(SP) <- (SP) - 1
(PCl) <- ((SP))
(SP) <- (SP) - 1

* RL A

Función: Rota el Acumulador a la Izquierda.

Descripción: Los ocho bits del acumulador son rotados a la izquierda, un bit. El bit 7 pasa
al bit 0.

Flags Afectados: Ninguno

Número de Bytes: 1

Ciclos de Máquina: 1

Codificación:
00100011
Operación: RL
(An+1) <- (An) n = 0 a 6
(A0) <- (A7)

*RLC A

Función: Rota el Acumulador a la izquierda a través del carry (C).

Descripción: Los ocho bits del acumulador son rotados a la izquierda un bit. El bit 7 pasa
al C y este al bit 0.
Flags Afectados: C

Número de Bytes: 1

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 25


Ciclos de Máquina: 1

Codificación:
00110011
Operación: RL
(An+1) <- (An) n = 0 a 6
(A0) <- (C)
(C) <- (A7)

* RR A

Función: Rota el Acumulador a la derecha.

Descripción: Los ocho bits del acumulador son rotados a la derecha un bit. El bit 0 se
transfiere al bit 7.

Flags Afectados: Ninguno

Número de Bytes: 1

Ciclos de Máquina: 1

Codificacin:
00000011
Operación: RR
(An) <- (An+1) n = 0 a 6
(A7) <- (A0)

* RRC A

Función: Rota el acumulador a la derecha a través del carry (C).

Descripción: Los ocho bits del acumulador son rotados a la derecha un bit. El bit 0 pasa al
C y este al bit 7.

Flags Afectados: C

Número de Bytes: 1

Ciclos de Maquina: 1

Codificación:
00010011
Operación: RRC
(An) <- (An+1) n=0 a 6
(A7) <- (C)
(C) <- (A0)

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 26


* SETB <bit>

Función: Pone en uno un bit.

Descripción: El bit indicado es colocado en uno. Opera sobre cualquier bit direccionable en
forma directa.
Flags Afectados: ninguno (salvo el seleccionado)

Número de Bytes: 2

Ciclos de Máquina: 1

Codificación:
1 1 0 1 0 0 1 0 bit selec.
Operación: SETB
(bit) <- 1

*SETB C

Función: Pone en uno el flag de transporte.

Descripción: El flag de transporte (C) es colocado en uno.

Flags Afectados: C

Número de Bytes: 1

Ciclos de Máquina: 1
Codificación:
11010011
Operación: SETB
(C) <- 1

* SJMP desp.

Función: Salto incondicional corto.

Descripción: Es un salto incondicional relativo. La dirección destino del salto se obtiene


sumando el desplazamiento especificado en la instrucci¢n, al PC, luego de incrementarlo
dos veces. El desplazamiento es de ocho bits y se considera en sistema de representación
de complemento a dos, por lo tanto su rango es de -128 a 127.
Flags Afectados: Ninguno

Número de Bytes: 2
Ciclos de Máquina: 2
Operación: SJMP
(PC) <- (PC) + 2
(PC) <- (PC) + desp.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 27


* SUBB A, <byte fuente>

Función: Resta con Borrow.

Descripción: Resta del contenido del acumulador (minuendo), el dato indicado en la


instrucción y el flag de carry (sustraendo), dejando el resultado en el acumulador.

Flags afectados: CY, AC, OV.

Direccionamiento: Se permiten cuatro modos de direccionamiento, a saber:

a) REGISTRO b) DIRECTO
SUBB A,Rn SUBB A,dirección
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
10011rrr 1 0 0 1 0 1 0 1 dirección
Operación: SUBB Operación: SUBB
(A) <- (A) - (Rn) - C (A) <- (A) - (dir.) - C

c) INDIRECTO por REGISTRO. d) INMEDIATO


SUBB A,@Ri SUBB A,#dato
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
1001011i 10010100 dato
Operación: SUBB Operación: SUBB
(A) <- (A) - ((Ri)) - C (A) <- (A) - dato - C

* SWAP A

Función: Intercambia los nibbles del acumulador.

Descripción: SWAP A intercambia en el acumulador los cuatro bits menos significativos con
los cuatro más significativos. La instrucción se puede interpretar como una rotación de
cuatro bits.

Flags Afectados: Ninguno

Número de Bytes: 1

Ciclos de Máquina: 1

Codificación:
11000100
Operación: SWAP
(A3-0) <-> (A7-4)

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 28


*XCH A,<byte>

Función: Intercambia el Acumulador con el byte especificado.

Descripción: Intercambia el byte contenido en el Acumulador con el especificado en la


instrucción.

Flags Afectados: ninguno

Direccionamiento: Se permiten tres modos para direccionar el byte, a saber:

a) REGISTRO b) DIRECTO
XCH A,Rn XCH A,dirección
Nmero de Bytes: 1 Número de Bytes: 2
Ciclos de Mquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
11001rrr 1 1 0 0 0 1 0 1 dirección
Operación: XCH Operación: XCH
(A) <-> (Rn) (A) <-> (dir.)

c) INDIRECTO por REGISTRO.


XCH A,@Ri
Número de Bytes: 1
Ciclos de Máquina: 1
Codificación:
1100011i
Operación: XCH
(A) <-> ((Ri))

* XCHD A,@Ri

Función: Intercambia un nibble del Acumulador con el byte especificado.

Descripción: Intercambia los cuatro bits menos significativos delAcumulador con los
correspondientes del indicado en la instrucción, el cual es direccionado en forma
indirecta por alguno de los registros.
Los cuatro bits más significativos de ambos operandos no son modificados.

Flags Afectados: ninguno


Número de Bytes: 1

Ciclos de Máquina: 1

Codificación:
1101011i
Operación: XCHD
(A3-0) <-> ((Ri)3-0)

* XRL <destino>,<fuente>

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 29


Función: Realiza la operación lógica OR-EXCLUSIVO entre dos bytes.

Descripción: Ejecuta la operación OR-EX bit a bit entre las variables indicadas,
almacenando el resultado en el byte destino. Cuando el destino es el Ac, el operando
fuente puede direccionarse mediante los modos registro, directo, indirecto por registro o
inmediato. Cuando el destino es una dirección de memoria el operando fuente puede ser un
dato inmediato o el contenido del Acumulador.

Flags Afectados: ninguno

Direccionamiento: Permite la utilización de cuatro modos de direccionamiento según sea el


registro destino, a saber:

I) Operando Destino: Acumulador

a) REGISTRO b) DIRECTO
XRL A,Rn XRL A, dirección
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
01101rrr 0 1 1 0 0 1 0 1 dirección
Operación: XRL Operación: XRL
(A) <- (A) OR-EX (Rn) (A) <- (A) OR-EX (dir.)

c) INDIRECTO por REGISTRO d) INMEDIATO


XRL A,@Ri XRL A,#dato
Número de Bytes: 1 Número de Bytes: 2
Ciclos de Máquina: 1 Ciclos de Máquina: 1
Codificación: Codificación:
0110011i 01100100 dato
Operación: XRL Operación: XRL
(A) <- (A) OR-EX ((Ri)) (A) <- (A) OR-EX dato

II) Operando Destino: Dirección de Memoria

a) REGISTRO (Acumulador) b) INMEDIATO


XRL dir.,A XRL dir.,#dato
Número de Bytes: 2 Número de Bytes: 3
Ciclos de Máquina: 1 Ciclos de Máquina: 2
Codificación: Codificación:
0 1 1 0 0 0 1 0 dirección 0 1 1 0 0 0 1 1 dir. dato
Operación: XRL Operación: XRL
(dir.) <- (dir.) OR-EX (A) (dir.) <- (dir.) OR-EX dato

MICROPROCESADORES II Ing. Carlos G. Gil, Ing.Gustavo Ensinck 30

Potrebbero piacerti anche