Está en la página 1de 22

DEFINICION DE INSTRUCCIONES

Función :Add - Sumar
ACALL addr11 Descripción : ADD suma la variable byte indicada a el Acumulador, dejando el
resultado en el Acumulador. Las banderas de carry o carry auxiliar son
Función :Absolute Call - Llamada Absoluta puestas, respectivamente, si hay un carry-out del bit 7 o del bit 3, o
serán borradas si no se dan estas condiciones. Cuando se suman
Descripción : ACALL incondicionalmente llama una subrutina localizada en la enteros sin signo, la bandera de carry indica que ha ocurrido un sobre
dirección indicada. La instrucción incrementa el PC dos veces para flujo.
obtener la dirección de la siguiente instrucción, luego Push empuja los OV es puesto si hay un carry-out del bit 6 pero no del bit 7, o un carry-
16 bits resultantes a la pila (primero el byte de menor orden) e out del bit 7 pero no del bit 6 ; de otra manera OV será limpiado. Cuando
incrementa el Stack Pointer dos veces. La dirección de destino se se suman enteros con signo, el OV indica un número negativo producido
obtiene concatenando sucesivamente los bits MSB del PC de la suma de dos operandos positivos, o una suma positiva de dos
incrementado, decodificando los bits 7-5, y el segundo byte de la operandos negativos.
instrucción. La subrutina llamada deberá por ello iniciar con el mismo Se permiten cuatro formas de dirección de fuentes de suma : registro,
bloque de 2K de memoria de programa, al igual que el primer byte de la directo, registro-indirecto o inmediato.
siguiente instrucción ACALL. No se afectan banderas.
Ejemplo : El Acumulador tiene 0C3H (11000011B) y el registro 0 contiene 0AAH
Ejemplo : Inicialmente SP es igual a 07H. La etiqueta “SUBRTN” esta en la (10101010B). La instrucción,
memoria de programa en la localización 0345H. Después de ejecutar la ADD A,R0
instrucción : Dejará 6DH (01101101B) en el Acumulador con la bandera AC limpia y
ACALL SUBRTN tanto la bandera de Carry como OV puestas a 1
en la localización 0123H, SP contendrá 09H, las localizaciones 08H y
09H de la RAM interna contendrán 25H y 01H, respectivamente, y el ADD A,Rn Bytes : 1
PC contendrá 0345H. Ciclos : 1
Bytes : 2 Codificación : 0 0 1 0 1 r r
Ciclos : 2 r
Codificación : a10 a9 a8 0 0 0 a7 a6 a5 a3 a2 a1 Operación : ADD

Operación :
1
ACALL
1 a4 a0 (A) ß (A) + (Rn)
(PC) ß (PC) + 2
(SP) ß (SP) + 1 ADD A,direct Bytes : 2
(SP) ß (PC7-0) Ciclos : 1
(SP) ß (SP) + 1 Codificación : 0 0 1 0 0 1 0 Dirección directa
(SP) ß (PC15-8) 1
(PC10-0) ß dirección de página Operación : ADD
(A) ß (A) + (direct)
ADD A,@ Ri Bytes : 1
Ciclos : 1
Codificación : 0 0 1 0 0 1 1 i

Operación : ADD
(A) ß (A) + ((Ri))

ADD A,#data Bytes : 2


Ciclos : 1
Codificación : 0 0 1 0 0 1 0 Dato inmediato
0
Operación : ADD
(A) ß (A) + #data

ADD A,<src-byte> ADDC A,<src-byte>


Función :Absolute Jump - Salto Absoluto
Función :Add with carry - Sumar con carry
Descripción : AJMP transfiere la ejecución de un programa a la dirección indicada, la
Descripción : ADDC simultáneamente suma la variable byte indicada, la bandera de cual es formada en un run-time por medio de la concatenación de los
carry y el contenido del Acumulador, dejando el resultado en el cinco bits de mayor peso del PC (antes de incrementar el PC dos
Acumulador. Las banderas de carry o carry auxiliar son puestas, veces), opcode los bits 7-5, y el segundo byte de la instrucción. El
respectivamente, si hay un carry-out del bit 7 o del bit 3, o serán destino debe ser por ello el mismo bloque de 2K de memoria de
borradas si no se dan estas condiciones. Cuando se suman enteros programa que el primer byte de la instrucción siguiente a AJMP.
sin signo, la bandera de carry indica que ha ocurrido un sobre flujo.
OV es puesto si hay un carry-out del bit 6 pero no del bit 7, o un carry- Ejemplo : La etiqueta “JMPADR” está en la memoria de programa en la
out del bit 7 pero no del bit 6 ; de otra manera OV será limpiado. localización 123H. La instrucción,
Cuando se suman enteros con signo, el OV indica un número negativo AJMP JMPADR
producido de la suma de dos operandos positivos, o una suma positiva está en la localización 0345H y cargará el PC con 0123H.
de dos operandos negativos. Bytes : 2
Se permiten cuatro formas de dirección de fuentes de suma : registro, Ciclos : 2
directo, registro-indirecto o inmediato. Codificación : a10 a9 a8 0 0 0 a7 a6 a5 a3 a2 a1
0 1 a4 a0
Ejemplo : El Acumulador tiene 0C3H (11000011B) y el registro 0 contiene 0AAH Operación : AJMP
(10101010B) con la bandera de carry puesta a 1. La instrucción, (PC) ß (PC) + 2
ADDC A,R0 (PC10-0) ß dirección de página
Dejará 6EH (01101110B) en el Acumulador con la bandera AC limpia y
tanto la bandera de Carry como OV puestas a 1 ANL <dest-byte>,<src-byte>
ADDC A,Rn Bytes : 1
Función :Logical-AND for byte variables - AND lógica para variables byte
Ciclos : 1
Codificación : 0 0 1 1 1 r r
Descripción : ANL ejecuta la operación lógica AND de bits entre las variables
r
indicadas y guarda los resultados en la variable de destino. No se
Operación : ADDC
afectan banderas.
(A) ß (A) + (C) + (Rn) Los dos operandos permiten seis formas de combinación de
direccionamiento. Cuando el destino es el Acumulador, la fuente puede
ADDC A,direct Bytes : 2 usar registro, directo, registro-indirecto o direccionamiento inmediato ;
Ciclos : 1 cuando el destino es una dirección directa, la fuente puede ser el
Codificación : 0 0 1 1 0 1 0 Dirección directa Acumulador o un dato inmediato.
1 Nota : Cuando esta instrucción es usada para modificar un puerto de
Operación : ADDC salida, el valor usado como puerto de datos original será leído por el
(A) ß (A) + (C) + (direct) latch de datos de salida, no los pines de entrada.

Ejemplo : Si el Acumulador tiene 0C3H (11000011B) y el registro 0 contiene 55H


ADDC A,@ Ri Bytes : 1 (01010101B) entonces la instrucción,
Ciclos : 1 ANL A,R0
Codificación : 0 0 1 1 0 1 1 i dejará 41H (01000001B) en el Acumulador.

Operación : ADDC Cuando el destino es un byte direccionado directamente, esta


(A) ß (A) + (C) + ((Ri)) instrucción limpiará las combinaciones de bits en cualquier lugar de
RAM o registro de hardware. El byte de enmascaramiento determina la
ADDC A,#data Bytes : 2 compatibilidad de los bits a borrar, si contendría una constante en la
Ciclos : 1 instrucción o un valor computado en el Acumulador en el run-time. La
Codificación : 0 0 1 1 0 1 0 Dato inmediato instrucción,
0 ANL P1,#0111001B
Operación : ADDC Borrará los bits 7, 3 y 2 del puerto de salida P1.
(A) ß (A) + (C) + #data
AJMP addr11
ANL A,Rn Bytes : 1
Ciclos : 1 ANL C,<src-bit>
Codificación : 0 1 0 1 1 r r
r
Función :Logical-AND for bit variables - AND lógica para variables bit
Operación : ANL

(A) ß (A) Ë (Rn) Descripción : Si el valor booleano del bit fuente en un 0 lógico entonces la bandera de
carry se limpia; de otra forma deja la bandera de carry en el estado
ANL A,direct Bytes : 2 actual. Un slash (“/”) precediendo el operando en el lenguaje
Ciclos : 1 ensamblador indica que el complemento lógico del bit de dirección es
Codificación : 0 1 0 1 0 1 0 Dirección directa usado como el valor fuente pero el fuente por si mismo no se afecta. No
1 se afectan otras banderas.
Operación : ANL Solo el direccionamiento directo está permitido para el operando fuente.

(A) ß (A) Ë (direct) Ejemplo : Puesta la bandera de carry si, y solo si, P1.0=1, ACC.7=1, y OV=0 :
MOV C,P1.0 ;Carga carry con el estado del pin de entrada
ANL C,ACC.7 ;AND de carry con el bit 7 del Acumulador
ANL A,@ Ri Bytes : 1 ANL C,/OV ;AND con negación de la bandera Sobre Flujo
Ciclos : 1
Codificación : 0 1 0 1 0 1 1 i ANL C,bit Bytes : 2
Ciclos : 2
Operación : ANL Codificación : 1 0 0 0 0 0 1 Dirección del bit
0
(A) ß (A) Ë ((Ri)) Operación : ANL

ANL A,#data Bytes : 2 (C) ß (C) Ë (bit)


Ciclos : 1
Codificación : 0 1 0 1 0 1 0 Dato inmediato ANL C,/bit Bytes : 2
0 Ciclos : 2
Operación : ANL Codificación : 1 0 1 1 0 0 0 Dirección del bit
0
(A) ß (A) Ë #dato Operación : ANL

ANL direct,A Bytes : 2 (C) ß (C) Ë Ÿ(bit)


Ciclos : 1
Codificación : 0 1 0 1 0 0 1 Dirección directa
0 CJNE <dest-byte>,<src-bit>,rel
Operación : ANL

(direct) ß (direct) Ë (A) Función :Compare and Jump if Not Equal - Compare y salte si no iguales

ANL direct,#data Bytes : 3 Descripción : CJNE compara las magnitudes de los dos primeros operandos, y se
Ciclos : 2 ramifica si sus valores no son iguales. El destino de ramificación es
Codificación: Dato Direcció computado adicionando el desplazamiento relativo signado en el último
0 1 0 1 0 0 1 inmediat n directa byte de instrucción al PC, luego incrementando el PC al inicio de la
1 o
Operación : ANL siguiente instrucción. La bandera de carry es puesta si el valor entero no
signado de <dest-byte> es menor que el valor entero no signado de
(direct) ß (direct) Ë #dato <src-byte> ; de otra manera, el carry es limpiado. Ningún operando se
afecta.
Los primeros dos operandos permiten cuatro combinaciones de modo
de direccionamiento : el Acumulador puede ser comparado con cualquier
byte direccionado directamente o dato inmediato, y cualquier posición de
RAM indirecta o registros de trabajo pueden ser comparados con una
constante inmediata.
Ejemplo : El Acumulador contiene 34H, el Registro 7 contiene 56H. La primer Operación : (PC) ß (PC) + 3
instrucción en la secuencia, IF (Rn) <> dato
CJNE R7,#60H,NOT_EQ THEN
; ....... ........ ;R7=60H (PC) ß (PC) + Offset Relativo
NOT_EQ : JC REQ_LOW ;If R7<60H IF (Rn) < dato
; ....... ........ ;R7>60H. THEN
Pone la bandera de carry y ramifica a la instrucción llamada NOT_EQ. (C) ß 1
Verificando la bandera de carry, esta instrucción determina si R7 es ELSE
mayor o menor que 60H. (C) ß 0

Si el dato que está siendo presentado en el Puerto 1 es 34H, entonces CJNE @Ri,#data,rel
la instrucción,
Bytes : 3
WAIT : CJNE A, P1,WAIT
Ciclos : 2
Limpia la bandera de carry y continua con la siguiente instrucción en Dato Direcció
Codificación: 1 0 1 1 0 1 1
secuencia, hasta que el Acumulador se haga igual al dato leído por P1. Inmediat n
(Si algún otro valor fue entrado en P1, el programa hará bucle en este i o Relativa
Operación : (PC) ß (PC) + 3
punto hasta que el dato de P1 cambie a 34H)
IF ((Ri)) <> dato
THEN
CJNE A,direct,rel Bytes : 3
(PC) ß (PC) + Offset Relativo
Ciclos : 2
Direcció Direcció IF ((Ri)) < dato
Codificación: 1 0 1 1 0 1 0 n Directa n THEN
1 Relativa (C) ß 1
Operación : (PC) ß (PC) + 3
ELSE
IF (A) <> (direct)
(C) ß 0
THEN
(PC) ß (PC) + Offset Relativo
IF (A) < (direct)
THEN CLR A
(C) ß 1 C=1 èdest < src
ELSE C=0 èdest > src Función :Clear Accumulator - Borra Acumulador
(C) ß 0
Descripción : El Acumulador es borrado (todos los bits reseteados a cero). No se
afectan banderas.

Ejemplo : El Acumulador contiene 5CH (01011100B). La instrucción,


CLR A
CJNE A,#data,rel Bytes : 3 dejará el Acumulador puesto a 00H (00000000B).
Ciclos : 2
Codificación: Dato Direcció
1 0 1 1 0 1 0 Bytes : 1
Inmediat n
0 o Relativa Ciclos : 1
Operación : (PC) ß (PC) + 3 Codificación : 1 1 1 0 0 1 0
IF (A) <> dato 0
THEN Operación : CLR
(PC) ß (PC) + Offset Relativo (A) ß 0
IF (A) < dato
THEN
(C) ß 1
ELSE
(C) ß 0

CJNE Rn,#data,relBytes : 3
Ciclos : 2
Codificación: 1 0 1 1 1 r r r
Dato Direcció CLR bit
Inmediat n
o Relativa
Función :Clear Bit - Borra un bit
Descripción : La variable bit especificada es complementada. Un bit que haya sido un
Descripción : El bit indicado es borrado (reseteado a cero). No se afectan otras uno es cambiado a cero y viceversa. No se afectan otras banderas. CPL
banderas. CLR puede operar en la bandera de carry o cualquier otro puede operar en la bandera de carry o cualquier otro bit direccionable
bit direccionable. directamente.
Nota : cuando esta instrucción es usada para modificar un pin de
Ejemplo : El Puerto 1 ha sido previamente escrito con 5DH (01011101B). La entrada, el valor usado como dato original será leído desde el latcha de
instrucción, entrada de datos, no del pin de entrada.
CLR P1.2
dejará el Puerto puesto en 59H (01011001B). Ejemplo : El Puerto 1 ha sido previamente escrito con 5DH (01011101B). La
secuencia de instrucción,
CLR C Bytes : 1 CPL P1.1
Ciclos : 1 CPL P1.2
Codificación : 1 1 0 0 0 0 1 dejará el Puerto puesto en 5BH (01011011B).
1
Operación : CLR CPL C Bytes : 1
(C) ß 0 Ciclos : 1
Codificación : 1 0 1 1 0 0 1
CLR bit Bytes : 2 1
Ciclos : 1 Operación : CPL
Codificación : 1 1 0 0 0 0 1
0 (C) ß Ÿ (C)
Operación : CLR
(bit) ß 0 CPL bit Bytes : 2
Ciclos : 1
Codificación : 1 0 1 1 0 0 1
CPL A 0
Operación : CPL
Función :Complement Accumulator - Complementa Acumulador (bit) ß Ÿ(bit)
Descripción : Cada bit del Acumulador es complementado lógicamente
(complemento es uno). Los bits que previamente contenían uno serán
DA A
cambiados a cero y viceversa. No se afectan banderas.
Función : Decimal-adjust Accumulator for Addition - Ajuste Decimal del
Ejemplo : El Acumulador contiene 5CH (01011100B). La instrucción, Acumulador por Adición.
CPL A Descripción : DA A ajusta el valor de los ocho bits en el Acumulador que ha resultado
dejará el Acumulador puesto a 0A3H (10100011B). de una adición previa de dos variables (cada una en formato BCD),
produciendo dos dígitos de cuatro bits. Cualquier instrucción ADD o
Bytes : 1 ADDC puede ser usado para desarrollar la adición.
Ciclos : 1 Si los bits 3-0 del Acumulador son mayores que nueve (XXXX1010 -
Codificación : 1 1 1 1 0 1 0 XXXX1111), o si la bandera de AC es uno, se suma seis al Acumulador,
0 produciendo el apropiado dígito en BCD en el nibble de menor orden.
Operación : CPL Está adición interna pondría la bandera de carry si se da un carry-out del
campo de los cuatro bits LSB propagado a través de todos los MSB,
(A) ß Ÿ (A) pero de otra manera no borraría la bandera de carry.
Ahora, si la bandera de carry está puesta, o si los cuatro MSB exceden
a nueve (1010XXXX - 1111XXXX), estos bits MSB serán aumentados
en seis produciendo el dígito BCD apropiado en el nibble de mayor
orden. De nuevo, esto colocaría la bandera de carry si hay una carry-out
de los bits MSB, pero no borraría el carry. La bandera de carry de este
CPL bit modo, indica si la suma de las dos variables originales BCD se pasa de
100, permitiendo adición decimal de múltiple precisión. OV no se afecta.
Todo ello ocurre durante una instrucción de un ciclo. Esencialmente, la
Función :Complement Bit - Complementa un bit instrucción desarrollo la conversión decimal por medio de la adición de
00H, 06H, 60H ó 66H al Acumulador, dependiendo de su valor inicial y
de las condiciones de PSW. DEC A Bytes : 1
Nota : DA A no puede simplemente convertir un número hexadecimal Ciclos : 1
en el Acumulador a notación BCD, no es aplicable a sustracción Codificación : 0 0 0 1 0 1 0
decimal. 0
Ejemplo : El Acumulador contiene el valor 56H (01010110B) representando en Operación : DEC
BCD, los dígitos del decimal 56. El Registro 3 contiene el valor 67H (A) ß (A) - 1
(01100111B) representando en BCD los dígitos del decimal 67. La
bandera de carry está puesta. La secuencia de instrucción,
DEC Rn Bytes : 1
ADDC A,R3
Ciclos : 1
DA A
Codificación : 0 0 0 1 0 r r r
desarrollará primero una suma estándar de binarios en complemento a
dos, resultando el valor 0BEH (10111110B) en el Acumulador. Las
Operación : DEC
banderas de carry y carry auxiliar serán borradas.
(Rn) ß (Rn) - 1
La instrucción de Ajuste Decimal alterará el Acumulador al valor 24H
(001001000B), indicando el BCD del decimal 24, los dígitos de menor
DEC direct Bytes : 2
orden de la suma decimal de 56 y 67 y el carry-in. La bandera de carry
Ciclos : 1
será puesta por la instrucción DA, indicando que ocurrió un sobre flujo.
Codificación : 0 0 0 1 0 1 0 Dirección
La suma verdadera de 57,67 y 1 es 124.
Las variables BCD pueden incrementarse o decrementarse por la 1 Directa
Operación : DEC
suma de 01H o 99H. Si el Acumulador inicialmente tenía 30H
(direct) ß (direct) - 1
(representando los dígitos del decimal 30), la secuencia de instrucción,
ADD A,#99H
DA A DEC @ Ri Bytes : 1
dejara el carry puesto y 29H en el Acumulador, toda vez que Ciclos : 1
30+99=129. El byte LSB de la suma puede interpretarse : 30-1=29. Codificación : 0 0 0 1 0 1 1 i
Operación : Codificación: 1 1 0 1 0 1 0
DA - contenido de Acc en BCD 0 Operación : DEC
IF [[(A3-0) > 9] v [(AC) = 1]] THEN (A3-0)ß(A3-0) + 6 & Bytes : 1 ((Ri)) ß ((Ri)) - 1
IF [[(A7-4) > 9] v [(AC) = 1]] THEN (A3-0)ß(A3-0) + 6 Ciclos : 1

DEC <byte>

Función :Decrement - Decrementar

Descripción : La variable indicada es decrementada en 1.Un valor original de 00H


dará subflujo a 0FFH. No se afectan banderas. Se permiten cuatro
modos de operación de direccionamiento : Acumulador, Registro,
Directo o Registro-Indirecto.
Nota : Cuando la instrucción es usada para modificar un puerto de
salida, el valor usado como dato original del puerto será leído de el
latch de datos de salida, no de los pines de entrada.

Ejemplo : El Registro 0 contiene 7FH (01111111B). Las posiciones de RAM DIV AB


interna 7EH y 7FH contienen 00H y 40H, respectivamente. La
secuencia de instrucción, Función :Divide - Dividir
DEC @R0 Descripción : DIV AB divide el entero sin signo de ocho bits del Acumulador entre el
DEC R0 entero sin signo de ocho bits del Registro B.
DEC @R0 El Acumulador recibe el cociente entero ; el Registro B recibe el residuo
Dejará el Registro 0 puesto a 7EH y las posiciones de RAM internas entero. Las banderas de carry y OV serán borradas.
7EH y 7FH puestas a 0FFH y 3FH.
Excepción : Si B contenía originalmente 00H, el valor retornado en el Hará toggle P1.7 ocho veces, causando cuatro pulsos de salida para
Acumulador y el Registro B será indefinido y se pondrá la bandera de aparecer en el bit 7 del Puerto de salida 1. Cada pulso durará tres ciclos
sobre flujo. La bandera de carry se borrará en cualquier caso. de máquina, dos para DJNZ y uno para alterar el pin.

Ejemplo : El Acumulador contiene 251(0FBH ó 11111011B) y B contiene 18 (12H DJNZ Rn,rel Bytes : 2
ó 00010010B). La instrucción, Ciclos : 2
DIV AB Codificación: Direcció
1 1 0 1 1 r r r n
dejará 13 en el Acumulador (ODH ó 00001101B) y el valor 17 (11H ó
Relativa
00010001B) en B, ya que 251 = (13 x 18) + 17. Carry y OV serán Operación : DJNZ (PC) ß (PC) + 2
ambas borradas. (Rn) ß (Rn) - 1
IF (Rn) > 0 o (Rn) < 0
Bytes : 1 THEN (PC) ß (PC) + rel
Ciclos : 4
Codificación : 1 0 0 0 0 1 0 DJNZ direct,rel Bytes : 3
0 Ciclos : 2
Operación : DIV Codificación: Dato Direcció
A : Cociente 1 1 0 1 0 1 0 Directo n
(A)15-8 ß (A)/(B) 1 Relativa
(B)7-0 B : Residuo Operación : DJNZ (PC) ß (PC) + 2
(direct) ß (direct) - 1
IF (direct) > 0 o (direct) < 0
DJNZ <byte>,<rel address> THEN (PC) ß (PC) + rel

Función :Decrement and Jump if Not Zero - Decremente y Salte si no es 0 INC <byte>

Descripción : DJNZ decrementa la posición indicada en 1, y ramifica a la dirección Función :Increment - Incrementar


indicada por el segundo operando si el valor resultante no es cero. Un
valor original de 00H derá un subflujo de 0FFH. No se afectan Descripción : INC incrementa la variable indicada en 1. Un valor original de 0FFH dará
banderas. El destino de ramificación sería computado sumando el subflujo a 00H. No se afectan banderas. Se permiten cuatro modos de
valor del desplazamiento signado relativo en el último byte de operación de direccionamiento : Acumulador, Registro, Directo o
instrucción al PC, antes de incrementar el PC al primer byte de la Registro-Indirecto.
instrucción siguiente. Nota : Cuando la instrucción es usada para modificar un puerto de
La posición decrementada puede ser un registro o un byte salida, el valor usado como dato original del puerto será leído desde el
direccionado directamente. latch de datos de salida, no de los pines de entrada.
Nota : Cuando la instrucción es usada para modificar un puerto de
salida, el valor usado como el puerto de datos original será leído desde Ejemplo : El Registro 0 contiene 7EH (01111110B). Las posiciones de RAM
el latch de salida de datos, no de los pines de entrada. interna 7EH y 7FH contienen 0FFH y 40H, respectivamente. La
secuencia de instrucción,
Ejemplo : Las posiciones de RAM interna 40H, 50H y 60H contienen los valores
01H, 70H y 15H, respectivamente. La secuencia de instrucción,
INC @R0
INC R0
DJNZ 40H,LABEL_1
DJNZ 50H,LABEL_2 INC @R0
DJNZ 60H,LABEL_3 Dejará el Registro 0 puesto a 7FH y las posiciones de RAM interna 7EH
Causará un salto a la instrucción LABEL_ 2 con los valores 00H, 6FH y 7FH puestas a 00H y 41H.
y 15H en las tres posiciones de RAM. El primer salto no se tomó
porque el resultado fue cero. INC A Bytes : 1
Ciclos : 1
Esta instrucción da la posibilidad de ejecutar un lazo simple un número Codificación : 0 0 0 0 0 1 0
de veces dado, o para adicionar un retardo moderado de tiempo (de 2 0
a 512 ciclos de máquina) con una simple instrucción. La secuencia de Operación : INC
instrucción,
MOV R2,#8
(A) ß (A) + 1
TOOGLE: CPL P1.7
INC Rn Bytes : 1
DJNZ R2,TOOGLE
Ciclos : 1
0 0 0 0 0 r r r
Codificación : en el tercer byte de la instrucción al PC, después de incrementar el PC
con el primer byte de la siguiente instrucción. El bit probado no se
Operación : INC modifica. No se afectan banderas.
(Rn) ß (Rn) + 1
Ejemplo : El dato presente en el Puerto de entrada 1 es 11001010B. El
INC direct Bytes : 2 Acumulador tiene 56H (01010110B). La secuencia de instrucción,
Ciclos : 1 JB P1.2, LABEL_1
Codificación : 0 0 0 0 0 1 0 Dirección JB ACC.2, LABEL_2
1 Directa causará la ejecución del programa para ramificarse a la instrucción
Operación : INC marcada como LABEL_2.
(direct) ß (direct) + 1
Bytes : 3
INC @ Ri Bytes : 1 Ciclos : 2
Codificación : Direcció Direcció
Ciclos : 1 0 0 1 0 0 0 0 n n
Codificación : 0 0 0 0 0 1 1 i 0 del Bit Relativa
Operación : JB
(PC) ß (PC) + 3
Operación : INC
IF (bit) = 1
((Ri)) ß ((Ri)) + 1
THEN
(PC) ß (PC) + rel
INC DPTR JBC bit,rel
Función :Increment Data Pointer - Incrementa Puntero de Datos
Función :Jump if Bit is set and Clear bit - Salte si hay bit y borrelo
Descripción : Incrementa del Puntero de Datos de 16 bits en 1. Se desarrolla un
Descripción : Si el bit indicado es uno, se ramifica a la dirección indicada ; de otra
incremento de 16 bits (módulo 216) :un spbre flujo del byte LSB del
manera procede con la siguiente instrucción. El bit no será borrado si ya
Data Pointer (DPL) de 0FFH a 00H incrementará el byte MSB (DPH).
es cero. El destino de ramificación es calculado por medio de la adición
No se afectan banderas.
del desplazamiento relativo signado en el tercer byte de la instrucción al
PC, después de incrementar el PC con el primer byte de la siguiente
Este es el único registro que puede ser incrementado
instrucción. No se afectan banderas.
Nota : Cuando esta instrucción se usa para probar un pin de salida, el
Ejemplo : Los Registros DPH y DPL contienen 12H y 0FEH, respectivamente. La
valor usado como dato original se leerá desde el latch de salida de
secuencia de instrucción,
datos, no del pin de entrada.
INC DPTR
INC DPTR
Ejemplo : El Acumulador tiene 56H (01010110B). La secuencia de instrucción,
INC DPTR
JBC ACC.3, LABEL_1
cargará DPH y DPL a 13H y 01H.
JBC ACC.2, LABEL_2
causará la ejecución del programa para continuar en la instrucción
Bytes : 1
identificada como LABEL_2., con el Acumulador modificado a 52H.
Ciclos : 1
Codificación : 1 0 1 0 0 0 1
Bytes : 3
1
Ciclos : 2
Operación : INC
Codificación : Direcció Direcció
(DPTR) ß (DPTR) + 1 0 0 0 1 0 0 0 n n
0 del Bit Relativa
Operación : JBC (PC) ß (PC) + 3
JB bit,rel IF (bit) = 1
THEN (bit) ß 0
Función :Jump if Bit is set - Salte si hay bit (PC) ß (PC) + rel

Descripción : Si el bit indicado es uno, salta a la dirección indicada ; de otra manera JC rel
procede con la siguiente instrucción. El destino de ramificación es
calculado por medio de la adición del desplazamiento relativo signado Función :Jump if Carry is set - Salte si hay carry
Función :Jump if Bit is Not set - Salte si no hay bit
Descripción : Si la bandera de carry está puesta,se ramifica a la dirección indicada ; Descripción : Si el bit indicado es un cero, se ramifica a la dirección indicada ; de otra
de otra manera procede con la siguiente instrucción. El destino de manera procede con la siguiente instrucción. El destino de ramificación
ramificación es calculado por medio de la adición del desplazamiento es calculado por medio de la adición del desplazamiento relativo signado
relativo signado en el segundo byte de la instrucción al PC, después de en el tercer byte de la instrucción al PC, después de incrementar el PC
incrementar el PC dos veces. No se afectan banderas. con el primer byte de la siguietne instrucción. El bit probado no se
modifica. No se afectan banderas.
Ejemplo : La bandera del carry esta borrada. La secuencia de instrucción, Ejemplo : El dato presente en el puerto de entrada 1 es 11001010B. El
JC LABEL_1 Acumulador tiene 56H (01010110B). La secuencia de instrucción,
CPL C JNB P1.3,LABEL_1
JC LABEL_2 JNB ACC.3,LABEL_2
colocará un carry y causará la ejecución del programa para continuar causará la ejecución del programa para continuar en la instrucción
en la instrucción identificada por la etiqueta LABEL_2. etiquetada como LABEL_2.
Bytes : 3
Bytes : 2 Ciclos : 2
Ciclos : 2 Codificación : 0 0 1 1 0 0 0
Direcció Direcció
Codificación : Direcció n n
0 1 0 0 0 0 0 n 0 del Bit Relativa
Operación : JNB (PC) ß (PC) + 3
0 Relativa
Operación : JC (PC) ß (PC) + 2 IF (bit) = 1
IF (C) = 1 THEN
THEN (PC) ß (PC) + rel
(PC) ß (PC) + rel
JMP @A+DPTR JNC rel

Función :Jump indirect - Salto indirecto Función :Jump if Carry is Not set - Salte si no hay carry
Descripción : Suma los ocho bits sin signo contenidos en el Acumulador con los 16
bit del DPTR, y carga la suma resultante en el contador de programa. Descripción : Si la bandera de carry es un cero, se ramifica a la dirección indicada ; de
Esta será la dirección para traer la instrucción subsecuente. Se da otra manera procede con la siguiente instrucción. El destino de
adición de 16 bits (módulo 216) ; se propaga un carry-out de los ocho ramificación es calculado por medio de la adición del desplazamiento
bits LSB a través de los MSB. Ni el Acumulador ni el Data Pointer se relativo signado en el segundo byte de la instrucción al PC, después de
alteran. No se afectan banderas. incrementar el PC dos veces al punto de la próxima instrucción. La
Ejemplo : Un número cualquiera entre 0 y 6 está en el Acumulador. La siguiente bandera de carry no es modificada.
secuencia de instrucciones ramificará a una de cuatro instrucciones
AJMP, en una tabla de salto que empieza en JMP_TBL : Ejemplo : La bandera del carry esta puesta. La secuencia de instrucción,
MOV DPTR,#JMP_TBL JNC LABEL_1
JMP @A+DPTR CPL C
JMP_TBL AJMP LABEL_0 JNC LABEL_2
AJMP LABEL_1 limpiará el carry y causará la ejecución del programa para continuar en
AJMP LABEL_2 la instrucción identificada por la etiqueta LABEL_2.
AJMP LABEL_3
Si el Acumulador es igual a 04H cuando empiece esta secuencia, la Bytes : 2
ejecución saltará a la etiqueta LABEL_2. Recuerde que AJMP es una Ciclos : 2
instrucción de dos bytes, así que las instrucciones de salto empezarán Codificación : Direcció
0 1 0 1 0 0 0 n
en cualquier otra dirección. 0 Relativa
Bytes : 1 Operación : JNC (PC) ß (PC) + 2
Ciclos : 2 IF (C) = 0
Codificación : THEN
0 1 1 1 0 0 1 (PC) ß (PC) + rel
1
Operación : JMP
(PC) ß (A) + (DPTR) JNZ rel
JNB bit,rel Función :Jump if Accumulator Not Zero - Salte si Acumulador no es Cero
Descripción : Si algún bit del Acumulador es uno, se ramifica a la dirección indicada ; bytes MSB y LSB del PC se cargan entonces, respectivamente, en el
de otra manera procede con la siguiente instrucción. El destino de segundo y tercer bytes de la instrucción LCALL. La ejecución del
ramificación es calculado por medio de la adición del desplazamiento programa continúa con la instrucción de es dirección. La subrutina
relativo signado en el segundo byte de la instrucción al PC, después de puede por ello empezar en cualquier parte del espacio total de 64 K-byte
incrementar el PC dos veces. El Acumulador no es modificado. No se de memoria de programa . No se afectan las banderas.
afectan las banderas. Ejemplo : Inicialmente el Stack Pointer es igual a 07H. La etiqueta “SUBRTN”
está asignada a la posición de memoria de programa 1234H. Después
Ejemplo : El Acumulador originalmente tiene 00H. La secuencia de instrucción, de ejecutar la instrucción,
JNZ LABEL_1 LCALL SUBRTN
INC A en la posición 123H, el Stack Pointer contendrá 09H, las posiciones de
JNZ LABEL_2 RAM interna 08H y 09H contendrán 26H y 01H, y el PC contendrá
colocará el Acumulador en 01H y continuará en la etiqueta LABEL_2. 1235H.

Bytes : 2 Bytes : 3
Ciclos : 2 Ciclos : 2
Codificación : Direcció Codificación : 0 0 0 1 0 0 1 addr 15 - addr 8 addr 7 - addr 0
0 1 1 1 0 0 0 n
0 Relativa 0
Operación : JNZ (PC) ß (PC) + 2 Operación : LCALL
IF A  0 (PC) ß (PC) + 3
THEN (SP) ß (SP) + 1
(PC) ß (PC) + rel ((SP)) ß (PC7-0)
(SP) ß (SP) + 1
JZ rel ((SP)) ß (PC15-8)
(PC) ß addr15-0
Función :Jump if Accumulator Zero - Salte si Acumulador es Cero LJMP addr16 (Implemented in 87C752 for in-circuit emulation only)
Descripción : Si todos los bits del Acumulador son cero, se ramifica a la dirección
indicada ; de otra manera procede con la siguiente instrucción. El Función :Long Jump - Salto largo
destino de ramificación es calculado por medio de la adición del Descripción : LJMP causa una ramificación incondicional a la dirección indicada, por
desplazamiento relativo signado en el segundo byte de la instrucción al medio de la carga de los bytes MSB y LSB del PC (respectivamente)
PC, después de incrementar el PC dos veces. El Acumulador no es con el segundo y tercer bytes de instrucción. El destino puede por ello
modificado. No se afectan las banderas. estar en cualquier parte del espacio total de 64 K-byte de direcciones de
Ejemplo : El Acumulador originalmente tiene 01H. La secuencia de instrucción, memoria de programa. No se afectan las banderas.
JZ LABEL_1
DEC A Ejemplo : La etiqueta “JMPADR” es asignada a la instrucción en la posición de
JZ LABEL_2 memoria de programa 1234H. La instrucción,
cambiará el Acumulador a 00H y causará la ejecución del programa LJMP JMPADR
para continuar con la instrucción identificada con la etiqueta LABEL_2. en la posición 0123H, cargará el contador de programa con 1234H.

Bytes : 2 Bytes : 3
Ciclos : 2 Ciclos : 2
Codificación : Direcció Codificación : 0 0 0 0 0 0 1 addr 15 - addr 8 addr 7 - addr 0
0 1 1 0 0 0 0 n
0 Relativa 0
Operación : JZ (PC) ß (PC) + 2 Operación : LJMP
IF A=0 (PC) ß addr15-0
THEN (PC) ß (PC) + rel
MOV <dest-byte>,<src-byte>
LCALL addr16
Función :Move byte variable - Mover variable tipo byte
Función :Long Call - Llamada larga
Descripción : LCALL llama una subrutina localizada en la dirección indicada. La Descripción : La variable byte indicada en el segundo operando es copiada en la
instrucción suma tres al contador de programa par generar la dirección posición especificada por el primer operando. El byte fuente no se
de la siguiente instrucción y luego PUSH los 16 bits resultantes en la afecta. Ningún otro registro o bandera se afecta.
pila (byte bajo primero), incrementando el Stack Pointer en dos. Los
Esta es por todo la operación más flexible. Son posibles quince
combinaciones de modos de direccionamiento fuente y destino. MOV Rn,direct Bytes : 2
Ciclos : 2
Ejemplo : La posición de RAM interna 30H tiene 40H. El valor de la posición de Codificación : 1 0 1 0 1 r r r Dirección
RAM 40H es 10H. El dato presente a la entrada del Puerto 1 es Directa
11001010B (0CAH). La secuencia de instrucción, Operación : MOV
MOV R0,#30H ;R0 < = 30H (Rn) ß (direct)
MOV A,@R0 ;A < = 40H
MOV Rn,#data Bytes : 2
MOV R1,A ;R1 < = 30H
Ciclos : 1
MOV B,@R1 ;B < = 10H Codificación : 0 1 1 1 1 r r r Dato Inmediato
MOV @R1,P1 ;RAM(40H) < = 0CAH
Operación : MOV
MOV P2,P1 ;P2 < = # 0CAH (Rn) ß #data
Deja el valor 30H en el Registro 0, 40H en el Acumulador y el Registro
1, 10H en el Registro B y 0CAH (11001010B) en la posición de RAM
40H en el Puerto de salida 2.
MOV A,ACC no es una instrucción válida
MOV A,Rn Bytes : 1
Ciclos : 1 MOV direct,A Bytes : 2
Codificación : 1 1 1 0 1 r r r Ciclos : 1
Codificación : 1 1 1 1 0 1 0 Dirección
Operación : MOV
1 Directa
(A) ß (Rn) Operación : MOV
(direct) ß (A)

MOV A,direct Bytes : 2


Ciclos : 1
Codificación : 1 1 1 0 0 1 0 Dirección MOV direct,Rn Bytes : 2
1 Directa Ciclos : 2
Operación : MOV Codificación : 1 0 0 0 1 r r r Dirección
(A) ß (direct) Directa
Operación : MOV
(direct) ß (Rn)
MOV A,@Ri Bytes : 1
Ciclos : 1 MOV direct,direct Bytes : 3
Codificación : 1 1 1 0 0 1 1 i Ciclos : 2
Codificación : Direcció Direcció
Operación : MOV 1 0 0 0 0 1 0 n n Directa
(A) ß ((Ri)) 1 Directa (dest)
Operación : MOV (src)
(direct) ß (direct)
MOV A,#data Bytes : 2
Ciclos : 1
Codificación : MOV direct,@Ri Bytes : 2
0 1 1 1 0 1 0 Dato Inmediato
0 Ciclos : 2
Operación : MOV Codificación : 1 0 0 0 0 1 1 Dirección
(A) ß #data i Directa
Operación : MOV
MOV Rn,A Bytes : 1 (direct) ß ((Ri))
Ciclos : 1
Codificación : 1 1 1 1 1 r r r MOV direct,#data Bytes : 3
Ciclos : 2
Operación : MOV Codificación : Direcció Dato
0 1 1 1 0 1 0 n Inmediat
(Rn) ß (A) 1 Directa o
Operación : MOV (C) ß (bit)
(direct) ß #data
MOV bit,C Bytes : 2
MOV @Ri,A Bytes : 1 Ciclos : 2
Codificación : 1 0 0 1 0 0 1 Dirección de Bit
Ciclos : 1
Codificación : 1 1 1 1 0 1 1 i 0
Operación : MOV
(bit) ß (C)
Operación : MOV
((Ri)) ß (A)
MOV DPTR,#data16
MOV @Ri,direct Bytes : 2
Función : Load Data Pointer with 16-bit constant - Cargar DPTR con
Ciclos : 2
constante de 16 bits.
Codificación : 1 0 1 0 0 1 1 Dirección
i Directa Descripción : El Data Pointer es cargardo con la constante de 16 bits indicada. La
Operación : MOV
constante de 16 bits es cargada en los segundo y tercer bytes de la
((Ri)) ß (direct)
instrucción. El segundo byte (DPH) es el byte MSB, mientras que el
tercer byte (DPL) tiene el byte LSB. No se afectan las banderas.
MOV @Ri,#data Bytes : 2
Ciclos : 1 Ejemplo : La instrucción,
Codificación : 0 1 1 1 0 1 1 Dato Inmediato MOV DPTR,#1234H
i cargará el valor 1234H, en el Data Pointer : DPL tendrá 12H y DPL
Operación : MOV tendrá 34H.
((Ri)) ß #dato

Bytes : 3
Ciclos : 2
MOV <dest-bit>,<src-bit> Codificación : 1 0 0 1 0 0 0 Dato Inmed. 15- Dato Inmed. 7-
Función :Move bit data - Mover dato tipo bit 0 8 0
Operación : MOV
(DPTR) ß (# data 15-0)
Descripción : La variable booleana indicada por el segundo operando es copiada en DPH  DPL ß #data15-8  #data7-0
la posición especificada por el primer operando. Uno de los operandos
debe ser la bandera de carry ; el otro puede ser cualquier bit
direccionabledirectamente. Ningún otro registro o bandera se afecta.
MOVC A, @A+<base-reg>
Ejemplo : La bandera de carry está originalmente puesta. El dato previamente
escrito en el Puerto de salida 1 es 35H (00110101B). La secuencia de Función :Move Code byte - Mover código variable
instrucción,
MOV P1.3,C Descripción : Las instrucciones MOVC cargan el Acumulador con un cógigo byte, o
MOV C,P3.3 una constante de la memoria de programa. La dirección del byte traído
MOV P1.2,C es la suma del contenido original del Acumulado de 8 bits y el contenido
Dejará el carry borrado y cambiará el Puerto 1 a 39H (00111001B). de un Registro de base de 16 bits, el cual puede ser o el Data Pointer o
el PC. En este último caso, el PC se incrementa a la dirección de la
MOV C,bit Bytes : 2 instrucción siguiente antes de ser sumado con el Acumulador ; de otra
Ciclos : 1 manera el Registro base no es alterado. La adición de 16 bits es
Codificación : 1 0 1 0 0 0 1 Dirección de Bit desarrollada tal que un carry-out de los ocho bits LSB pueda propagarse
0 a través de los bits MSB. No se afectan banderas.
Operación : MOV
arreglo de RAM relativamente pequeño. Para algunos arreglos más
Ejemplo : Un valor entre 0 y 3 está en el Acumulador. Las siguientes grandes, los pines de puerto pueden ser usados para salida de bits de
instrucciones trasladarán el valor en el Acumulador a uno de los cuatro mayor orden. Estos pines serían controlados por una instrucción de
valores definidos por la directiva DB (define byte). salida precediendo el MOVX.
REL_PC : INC A En el segundo tipo de instrucción MOVX. El Data Pointer genera una
MOVC A,@A+PC dirección de 16 bits. P2 saca los 8 bits de dirección MSB (el contenido
de DPH) mientras P0 multiplexa los 8 bits LSB (DPL) con datos. El
RET
Registro de Función Especial (SFR) de P2 retiene su contenido previo
DB 66H
mientras losbuffers de salida de P2 emiten el contenido de DPH. Esta
DB 77H
forma es más rápida y eficiente cuando se accesan arreglos de datos
DB 88H
muy grandes (por encima de 64K bytes), siempre que no se necesiten
DB 99H
instrucciones adicionales para configurar los puertos de salida.
Si la subrutina es llamada con el Acumulador igual a 01H, esta
Es posible en algunas situaciones mezclar los dos tipos de
retornará con 77H en el Acumulador. La instrucción INC A antes de la
MOVX. Un arreglo de RAM grande con sus líneas de dirección de mayor
MOVC es necesaria para “retornar (get around)” la instrucción RET
orden manejadas por el P2 pueden ser direccionadas por la vía del Data
sobre la tabla. Si varios bytes de código separan la instrucción MOVC
Pointer, o por código para sacar los bits de dirección MSB al P2
de la tabla, debería adicionarse el número correspondiente en vez de
seguido por una instrucción MOVX usando R0 o R1.
el Acumulador.
Ejemplo : Una RAM externa de 256 bytes, que usa líneas de dirección/datos
MOVC A,@A+DPTR multiplexadas, es conectada al Puerto 0 del 8051. El Puerto 3 da las
Bytes : 1 líneas de control para la RAM externa. Los Puertos 1 y 2 son usados
Ciclos : 2 para I/O normal. Los Registros 0 y 1 contienen 12H y 34H. La posición
Codificación : 1 0 0 1 0 0 1 34H de la RAM externa tiene el valor 56H. La secuencia de instrucción,
1 MOVX A,@R1
Operación : MOVC
(A) ß ((A) + (DPTR)) MOVX A,@R1
Copia el valor 56H tanto en el Acumulador como en la posición 12H de
la RAM externa.

MOVC A,@A+PC MOVX A,@Ri Bytes : 1


Bytes : 1 Ciclos : 2
Ciclos : 2 Codificación : 1 1 1 0 0 0 1
Codificación : 1 0 0 0 0 0 1 i
1 Operación : MOVX
Operación : MOVC (A) ß ((Ri))
(PC) ß (PC) + 1
(A) ß ((A) + (PC)) MOVX A,@DPTR Bytes : 1
Ciclos : 2
Codificación : 1 1 1 0 0 0 0
0
Operación : MOVX
(A) ß ((DPTR))
MOVX <dest-byte>,<src-byte> (Not implemented in the 8XC752 or 8XC752)
MOVX @Ri,A Bytes : 1
Función :Move External - Mover al Exterior
Ciclos : 2
Codificación : 1 1 1 1 0 0 1
Descripción : Las instrucciones MOVX transfieren datos entre el Acumulador y un
i
byte de memoria de datos externa, de allí la X anexada a MOV. Hay
Operación : MOVX
dos tipos de instrucción, difieren según den direccionamiento indirecto
((Ri)) ß (A)
de 8 ó 16 bits a la RAM de datos externa.
En el primer tipo, el contenido de R0 ó R1 en el banco de registro
actual da un direccionamiento multiplexado con datos en P0. 8 bits son MOVX @DPTR,A Bytes : 1
suficientes para decodificación de expansión I/O externa o para un Ciclos : 2
Codificación : 1 1 1 1 0 0 0
0 ORL <dest-byte>,<src-byte>
Operación : MOVX
((DPTR)) ß (A)
Función :Logical-OR for byte variables - OR lógica para variables byte
Descripción : ORL ejecuta la operación lógica AND de bits entre las variables
MUL AB indicadas y guarda los resultados en el byte de destino. No se afectan
banderas.
Función :Multiply - Multiplicar Los dos operandos permiten seis formas de combinación de
direccionamiento. Cuando el destino es el Acumulador, la fuente puede
Descripción : MUL AB multiplica los enteros sin signo de ocho bits del Acumulador y usar registro, directo, registro-indirecto o direccionamiento inmediato;
del Registro B. El byte LSB del producto de 16 bits se deja en el cuando el destino es una dirección directa, la fuente puede ser el
Acumulador, y el byte MSB en el Registro B. Si el producto es mayor Acumulador o un dato inmediato.
que 255(0FFH) se pone la bandera de sobre flujo (OV) ; de otra Nota : Cuando esta instrucción es usada para modificar un puerto de
manera esta será borrada. La bandera de carry siempre está borrada. salida, el valor usado como puerto de datos original será leído por el
latch de datos de salida, no los pines de entrada.
Ejemplo : Originalmente el Acumulador tiene el valor 80 (50H). El Registro B Ejemplo : Si el Acumulador tiene 0C3H (11000011B) y R0 tiene 55H (01010101B)
tiene el valor 160 (0A0H). La instrucción, entonces la instrucción,
MUL AB ORL A,R0
dará el producto 12.800 (3200H), así B es cambiado a 32H dejará el Acumulador teniendo el valor 0D7H (11010111B).
(00110010B) y el Acumulador es borrado. La bandera de sobre flujo es Cuando el destino es un byte direccionado directamente, la instrucción
puesta, la de carry es borrada. puede poner combinación de bits en cualquier posición de RAM o
registro de hardware. La compatibilidad de bits para ser puestos está
Bytes : 1 determinada po un byte de enmascaramiento, e lcual puede ser un valor
Ciclos : 4 de dato constante en la instrucción o un valor computado en el
Codificación : 1 0 1 0 0 1 0 Acumulador en el run-time. La instrucción,
0 ORL P1,#00110010B
Operación : MUL colocará los bits 5, 4 y 1 del puerto de salida P1.
(A)7-0 ß (A)x(B) A : LSB Byte
(B)15-8 B : MSB Byte ORL A,Rn Bytes : 1 Codificación : 0 1 0 0 1 r r
Ciclos : 1 r
Operación : ORL
NOP (A) ß (A) V (Rn)
ORL A,direct Bytes : 2
Ciclos : 1
Función :No Operation - Ninguna Operación
Codificación : 0 1 0 0 0 1 0 Dirección directa
Descripción : La ejecución continúa en la siguiente instrucción. Aparte del PC,
1
ningún Registro o bandera se afecta.
Operación : ORL
Ejemplo : Se desea producir un pulso de salida low-going en el bit 7 del Puerto 2
(A) ß (A) V (direct)
que dure exactamente 5 ciclos. Una secuencia simple SETB/CLR
generaría un pulso de un ciclo, así que deberán insertarse cuatro
ciclos adicionales. Esto puede hacerse (asumiendo que se permita) ORL A,@ Ri Bytes : 1
con la secuencia de instrucción, Ciclos : 1
CLR P2.7 Codificación : 0 1 0 0 0 1 1 i
NOP
NOP Operación : ORL
NOP (A) ß (A) V ((Ri))
NOP
SETB P2.7 ORL A,#data Bytes : 2
Ciclos : 1
Bytes : 1 Codificación : 0 1 0 0 0 1 0 Dato inmediato
Ciclos : 1 0
Codificación : 0 0 0 0 0 0 0 Operación : ORL
0 (A) ß (A) V #dato
Operación : NOP (PC) ß (PC) + 1
ORL direct,A Bytes : 2
Ciclos : 1 Ejemplo : El Stack Pointer originalmente contiene el valor 32H, y las posiciones de
Codificación : 0 1 0 0 0 0 1 Dirección directa RAM interna 30H hasta 32H contienen los valores 20H, 23H y 01H,
0 respectivamente. La secuencia de instrucción,
Operación : ORL POP DPH
(direct) ß (direct) V (A) POP DPL
dejará el Stack Pointer igual al valor 30H y el Data Pointer puesto a
ORL direct,#data Bytes : 3 0123H. En este punto la instrucción
Ciclos : 2 POP SP
Codificación: Direcció Dato dejará el Stack Pointer puesto a 20H. Note que en este caso especial el
0 1 0 0 0 0 1 n directa inmediat
1 o Stack Pointer fue decrementado a 2FH antes de ser cargado con el
Operación : ORL valor popped (20H).
(direct) ß (direct) V #data
Bytes : 2
Ciclos : 2
ORL C,<src-bit> Codificación : Direcció
1 1 0 1 0 0 0 n Directa
0
Operación : POP
Función :Logical-OR for bit variables - OR lógica para variables bit
(direct) ß ((SP))
(SP) ß (SP) - 1
Descripción : Coloca la bandera de carry si el valor booleano es un 1 lógico; deja el
carry en su estado actual de otra forma. Un slash (“/”) precediendo el
operando en el lenguaje ensamblador indica que el complemento lógico
del bit direccionado es usado como el valor fuente, pero el bit fuente
por si mismo no se afecta. No se afectan otras banderas. PUSH direct
Ejemplo : Poner la bandera de carry si, y solo si, P1.0=1, ACC.7=1, o OV=0 :
Función :Push onto Stack - Empuje hacia la Pila
ORL C,P1.0 ;Carga carry con el pin de entrada P1.0
ORL C,ACC.7 ;OR de carry con el bit 7 del Acumulador
Descripción : El Stack Pointer es incrementado en uno. Los contenidos de la variable
ORL C,/OV ;OR de carry con el inverso de Sobre Flujo OV.
indicada es entonces copiada en la posición de RAM interna
direccionada por el Stack Pointer. Por otro lado no se afectan
ORL C,bit Bytes : 2
banderas.
Ciclos : 2
Codificación : 0 1 1 1 0 0 1 Dirección del Bit
Ejemplo : Al entrar una rutina de interrupción el Stack Pointer contiene 09H. El
0
Data Pointer tiene el valor 0123H. La secuencia de instrucción,
Operación : ORL
PUSH DPL
(C) ß (C) V (bit)
PUSH DPH
dejará el Stack Pointer puesto a 0BH y guardará 23H y 01H en las
ORL C,/bit Bytes : 2
posiciones de RAM interna 0AH y 0BH, respectivamente
Ciclos : 2
Codificación : 1 0 1 0 0 0 0 Dirección del Bit
0 Bytes : 2
Ciclos : 2
Operación : ORL
Codificación : Direcció
1 1 0 0 0 0 0 n Directa
(C) ß (C) V Ÿ(bit) 0
Operación : PUSH
(SP) ß (SP) + 1
POP direct ((SP)) ß (direct)

Función :Pop from Stack - Salga de la Pila


RET
Descripción : Se leen los contenidos de la posición de RAM interna direccionada por
el Stack Pointer, y este se decrementa en uno. El valor leído es
entonces transferido al byte indicado direccionado directamente. No se Función :Return from subroutine - Regreso de subrutina
afectan banderas.
Descripción : RET pops los bytes MSB y LSB del PC sucesivamente de la pila, RL A
decrementando el Stack Pointer en dos. La ejecución del programa
continúa en la dirección resultante, generalmente la instrucción que
Función :Rotate Accumulator Left - Rotar el Acumulador a la Izquierda
sigue inmediatamente a un ACALL o LCALL. No se afectan banderas.
Ejemplo : El Stack Pointer originalmente contiene el valor 0BH. Las posiciones
Descripción : Los ocho bits en el Acumulador son rotados un bit a la izquierda. El Bit 7
de RAM interna 0AH y 0BH contienen los valores 23H y 01H,
es rotado a la posición del Bit 0. No se afectan banderas.
respectivamente. La instrucción,
RET
Ejemplo : El Acumulador tiene el valor 0C5H (11000101B). La instrucción,
dejará el Stack Pointer igual al valor 09H. La ejecución del programa
RL A
continuará en la posición 0123H.
deja el Acumulador teniendo el valor 8BH (10001011B) sin afectar el
carry.
Bytes : 1
Ciclos : 2
Bytes : 1
Codificación :
0 0 1 0 0 0 1 Ciclos : 1
0 Codificación :
Operación : RET (PC15-8) ß ((SP)) 0 0 1 0 0 0 1
(SP) ß (SP) - 1 1
Operación : RL
(PC7-0) ß ((SP))
(An+1) ß (An), n = 0-6
(SP) ß (SP) - 1
(A0) ß (A7)

RLC A
RETI
Función : Rotate Accumulator Left trough the carry flag - Rotar el
Función :Return from interrupt - Regreso de interrupción Acumulador a la Izquierda a través de las bandera de carry
Descripción : RETI pops los bytes MSB y LSB del PC sucesivamente de la pila, y
realmacena la interrrupción lógica para aceptar interrupciones Descripción : Los ocho bits en el Acumulador y la bandera de carry son rotados juntos
adicionales al mismo nivel de prioridad como la recién procesada. El un bit a la izquierda. El Bit 7 se mueve a la bandera de carry ; el estado
Stack Pointer se deja decrementar en dos. Ningún otro registro se original de la bandera de carry se mueve a la posición del Bit 0. No se
afecta ; el PSW no se guarda automáticamente en su estado de pre- afectan otras banderas.
interrupción. La ejecución del programa continúa en la dirección
resultante, la cual es generalmente la instrucción que sigue Ejemplo : El Acumulador tiene el valor 0C5H (11000101B) y el carry es cero. La
inmediatamente después del punto al cual se requirió la interrupción. Si instrucción,
una interrupción de igual o menor nivel estaba pendiente cuando la RLC A
instrucción RETI sea ejecutada, esta será ejecutada antes que sea deja el Acumulador teniendo el valor 8AH (10001010B) con el carry
procesada la interrupción pendiente. puesto.
Ejemplo : El Stack Pointer originalmente contiene el valor 0BH. Una interrupción
fue detectada durante la finalización de instrucción en la posición Bytes : 1
0122H. Las posiciones de RAM interna 0AH y 0BH contienen los Ciclos : 1
valores 23H y 01H, respectivamente. La instrucción, Codificación :
RETI 0 0 1 1 0 0 1
dejará el Stack Pointer igual al valor 09H y retornará a la ejecución del 1
Operación : RLC
programa en la posición 0123H. (An+1) ß (An), n = 0-6
(A0) ß (C)
Bytes : 1 (C) ß (A7)
Ciclos : 2
Codificación : 0 0 1 1 0 0 1
Operación : RETI
0
(PC15-8) ß ((SP))
RR A
(SP) ß (SP) - 1
(PC7-0) ß ((SP)) Función :Rotate Accumulator Right - Rotar el Acumulador a la Derecha
(SP) ß (SP) - 1
Descripción : Los ocho bits en el Acumulador son rotados un bit a la derecha. El Bit 0 Ejemplo : La bandera de carry está borrada. El Puerto de salida 1 ha sido escrito
es rotado a la posición del Bit 7. No se afectan banderas. con el valor 34H (00110100B). Las instrucciones,
SETB C
Ejemplo : El Acumulador tiene el valor 0C5H (11000101B). La instrucción, SETB P1.0
RR A dejará la bandera de carry puesta a 1 y cambiará el dato sacado por el
deja el Acumulador teniendo el valor 0E2H (11100010B) sin afectar el Puerto 1 a 35H (00110101B).
carry.
SETB C Bytes : 1
Bytes : 1 Ciclos : 1
Ciclos : 1 Codificación :
1 1 0 1 0 0 1
Codificación : 0 0 0 0 0 0 1 1
Operación : SETB
1
Operación : RR (C) ß 1
(An) ß (An+1), n = 0-6
(A7) ß (A0) SETB bit Bytes : 2
Ciclos : 1
Codificación : Direcció
1 1 0 1 0 0 1 n
0 del Bit
Operación : SETB
(bit) ß 1

SJMP rel
RRC A
Función :Short Jump - Salto Corto
Función : Rotate Accumulator Right trough the carry flag - Rotar el Descripción : El control de programa ramifica incondicionalmente a la dirección
Acumulador a la Derecha a través de las bandera de carry indicada. El destino de ramificación es calculado adicionando el
desplazamiento signado en el segundo byte de instrucción al PC,
Descripción : Los ocho bits en el Acumulador y la bandera de carry son rotados después incrementando el PC dos veces. Por ello, el rango de destinos
juntos un bit a la derecha. El Bit 0 se mueve a la bandera de carry  ; el permitido es de 128 bytes precediendo esta instrucción y 127
estado original de la bandera de carry se mueve a la posición del Bit 7. siguiéndola.
No se afectan otras banderas. Ejemplo : La etiqueta “RELADR” es asignada a una instrucción en la posición
0123H. La instrucción,
Ejemplo : El Acumulador tiene el valor 0C5H (11000101B) y el carry es cero. La SJMP RELADR
instrucción, se pegará en la posición 0100H. Después la instrucción es ejecutada, el
RRC A PC contendrá el valor 0123H.
deja el Acumulador teniendo el valor 62H (01100010B) con el carry (Nota : Bajo las condiciones de arriba, la instrucción siguiente a SJMP
puesto. estará en 102H. Por ello, el byte de desplazamiento de la instrucción
será el offset relativo (0123H-0120H) = 21H. Puesto en otra forma, un
Bytes : 1 SJMP con un desplazamiento de 0FEH sería una instrucción de lazo
Ciclos : 1 infinito).
Codificación :
0 0 0 1 0 0 1 Bytes : 2
1 Ciclos : 2
Operación : RRC
(An) ß (An+1), n = 0-6 Codificación : Direcció
1 0 0 0 0 0 0 n
(A7) ß (C) 0 Relativa
(C) ß (A0) Operación : SJMP
(PC) ß (PC) + 2
(PC) ß (PC) + rel
SETB <bit>
SUBB A,<src-byte>
Función :Set Bit - Ponga un Bit
Descripción : SETB pone el bit indicado a uno, SETB puede operar en la bandera Función :Subtract with borrow - Restar prestando
de carry o en cualquier bit direccionable. No se afectan otras banderas.
Descripción : SUBB resta la variable byte indicada y la bandera carry juntas del Función : Swap nibbles within the Accumulator - Trasponer nibbles en el
Acumulador, dejando el resultado en el Acumulador. SUBB pone la Acumulador
bandera de carry (borrow - préstamo) si es necesario un préstamo del Descripción : SWAP A intercambia los nibbles (campos de cuatro bits) LSB y MSB del
bit 7, y de otro modo borra C. (Si estaba puesta antes de ejecutar la Acumulador (bits 3-0 con bits 7-4). La operación también puede
instrucción SUBB, esto indica que fue necesario un borrow para el concebirse como instrucción de rotación de cuatro bits. No se afectan
paso anterior en una substracción de múltiple precisión, así que el banderas.
carry es substraído del Acumulador con el operando fuente). AC es Ejemplo : El Acumulador tiene el valor 0C5H (110001010B). La instrucción,
puesto si es necesitado un borrow para el bit 3, y borrado de otra SWAP A
manera. OV es puesto si se necesita un borrow en el bit 6, pero no en deja el Acumulador teniendo el valor 5CH (10011100B).
el bit 7, o en el bit 7 pero no en el 6.
Cuando se substraen enteros con signo OV indica un número negativo Bytes : 1
producido cuando un valor negativo es substraído de un valor positivo, Ciclos : 1
o un resultado positivo cuando un número positivo es sustraído de un Codificación : 1 1 0 0 0 1 0
número negativo.
0
El operando fuente permite cuatro formas de direccionamiento: Operación : SWAP
registro, directo, registro-indirecto o inmediato. (A3-0)  (A7-4)
Ejemplo : El Acumulador tiene 0C9H (11001001B), el registro 2 tiene 54H
(01010100B), y la bandera de carry está puesta. La instrucción,
SUBB A,R2
Dejará el valor 74H (01110100B) en el Acumulador con la bandera de
carry y AC borradas, pero OV puesta. XCH byte
Note que 0c9H menos 54H es 75H. La diferencia entre este resultado
y el de arriba se debe a que la bandera de carry (borrow) está siendo Función : Exchange Accumulator with byte variable - Intercambiar
puesta antes de la operación, si el estado del carry no es conocido Acumulador con variable tipo byte
antes de iniciar una substracción simple o de precisión múltiple ; este Descripción : XCH carga el Acumulador con el contenido de la variable indicada, al
podría ser explícitamente borrado por una instrucción CLR C. mismo tiempo que escirbe el contenido original del Acumulador en la
variable indicada. El operando fuente/destino puede usar
SUBB A,Rn Bytes : 1 direccionamiento de registro, directo o registro-indirecto.
Ciclos : 1 Ejemplo : R0 contiene la dirección 20H. El Acumulador tiene el valor 3FH
Codificación : 1 0 0 1 1 r r (00111111B). La posición de RAM interna 20H tiene el valor 75H
r (01110101B).La instrucción,
Operación : SUBB (A) ß (A) - (C) - (Rn)
XCH A,@R0
SUBB A,direct Bytes : 2 Dejará la posición de RAM 20H teniendo el valor 3FH (00111111B) y
Ciclos : 1 75H (01110101B) en el Acumulador.
Codificación : 1 0 0 1 0 1 0 Dirección directa
1 XCH A,Rn Bytes : 1
Operación : SUBB (A) ß (A) - (C) - (direct) Ciclos : 1
Codificación : 1 1 0 0 1 r r r

SUBB A,@ Ri Bytes : 1 Operación : XCH (A)  (Rn)


Ciclos : 1
Codificación : 1 0 0 1 0 1 1 i XCH A,direct Bytes : 2
Ciclos : 1
Operación : SUBB (A) ß (A) -(C) - ((Ri)) Codificación : 1 1 0 0 0 1 0 Dirección
1 Directa
SUBB A,#data Bytes : 2 Operación : XCH (A)  (direct)
Ciclos : 1
Codificación : 1 0 0 1 0 1 0 Dato inmediato XCH A,@Ri Bytes : 1
0
Operación : SUBB (A) ß (A) - (C) - (#data) Ciclos : 1
Codificación : 1 1 0 0 0 1 1 i
SWAP A
Operación : XCH (A)  ((Ri))
XRL P1,#00110001B
XCHD A, @Ri XRL A,Rn
complementará los bits 5, 4 y 0 del Puerto de salida P1.
Bytes : 1
Ciclos : 1
Función :Exchange Digit - Intercambiar Dígito Codificación : 0 1 1 0 1 r r
r
Descripción : XCHD intercambia el nibble LSB del Acumulador (bits 3-0), Operación : XRL
generalmente representando un dígito HEXA o BCD, con la posición (A) ß (A) x (Rn)
de RAM interna direccionada indirectamente por el registro específico.
Los nibbles MSB (bits 7-4) de cada registro no se afectan. No se XRL A,direct Bytes : 2
afectan banderas. Ciclos : 1
Codificación : 0 1 1 0 0 1 0 Dirección directa
Ejemplo : R0 contiene la dirección 20H. El Acumulador tiene el valor 36H 1
(00110110B). La posición de memoria 20H tiene el valor 75H Operación : XRL
(01110101B). La instrucción, (A) ß (A) x (direct)
XCHD A,@R0
Dejará la posición 20H de la RAM teniendo el valor 76H (01110110B) y XRL A,@ Ri Bytes : 1
35H (00110101B) en el Acumulador. Ciclos : 1
Codificación : 0 1 1 0 0 1 1 i
Bytes : 1
Ciclos : 1 Operación : XRL
Codificación : 1 1 0 1 0 1 1 (A) ß (A) x ((Ri))
i
Operación : XCHD (A3-0)  ((Ri3-0)) XRL A,#data Bytes : 2
Ciclos : 1
XRL <dest-byte>,<src-byte> Codificación : 0 1 1 0 0 1 0 Dato inmediato
0
Función : Logical Exclusive-OR for byte variables - XOR lógica para Operación : XRL
variables byte (A) ß (A) x #dato

Descripción : XRL ejecuta la operación lógica XOR de bits entre las variables XRL direct,A Bytes : 2
indicadas, guardando los resultados en el destino. No se afectan Ciclos : 1
banderas. Codificación : 0 1 1 0 0 0 1 Dirección directa
Los dos operandos permiten seis formas de combinación de 0
direccionamiento. Cuando el destino es el Acumulador, la fuente puede Operación : XRL
usar registro, directo, registro-indirecto o direccionamiento inmediato; (direct) ß (direct) x (A)
cuando el destino es una dirección directa, la fuente puede ser el
Acumulador o un dato inmediato. XRL direct,#data Bytes : 3
(Nota : Cuando esta instrucción es usada para modificar un puerto de Ciclos : 2
Codificación: Direcció Dato
salida, el valor usado como puerto de datos original será leído desde el 0 1 1 0 0 0 1 n directa inmediat
latch de datos de salida, no de los pines de entrada). 1 o
Operación : XRL
Ejemplo : Si el Acumulador tiene 0C3H (11000011B) y el registro 0 tiene 0AAH (direct) ß (direct) x #data
(10101010B) entonces la instrucción,
XRL A,R0
dejará el Acumulador teniendo el valor 69H (01101001B).
Cuando el destino es un byte direccionado directamente, la instrucción
puede complementar combinaciones de bits en cualquier posición de
RAM o registro de hardware. La compatibilidad de bits para ser
complementados está determinada entonces por un byte de
enmascaramiento, el cual puede ser un valor de dato constante
contenido en la instrucción o un valor computado en el Acumulador en
el run-time. La instrucción,
Tiempo de respuesta de Interrupción: Referirse a Cartilla de Descripción de Hardware

Instrucciones que Afectan el Estado de Banderas (1)

Instrucción Bandera Instrucción Bandera


C OV AC C O AC
V
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
SETB C 1
(1) Note que las operaciones en la dirección de byte SFR 208 o direcciones 209 - 215 (p.ej. el PSW o los bits en el PSW)
también afectarán las banderas.

Notas en el set de instrucciones y modos de direccionamiento

Rn Registro R7-R0 del Banco de Registros seleccionado actualmente.


direct dirección de posición interna de 8 bits. Podría ser una posición de RAM de Datos
interna (0-127) o un SFR [ej. Puerto I/O, reg. de control, de estado,etc(128-255)].
@ Ri Posición de RAM de Datos interna (0-255) direccionable indirectamente a través
de los registros R0 y R1.
#data Constante de 8 bits incluida en la instrucción.
# data 16 Constante de 16 bits incluida en la instrucción.
addr 16 Dirección de destino de 16 bits. Usada por LCALL y LJMP. Una ramificación puede
estar en cualquier lugar de los 64k-byte de espacio de dirección de Memoria de
Programa.
addr 11 Dirección de destino de 11 bits. Usada por ACALL y AJMP. La ramificación XRL A,Rn Exclusive - OR register to Accumulator 1 12
estará en la misma página de 2k-byte de la Memoria de Programa, como primer XRL A,direct Exclusive - OR direct byte to Accumulator 2 12
byte de la siguiente instrucción. XRL A, @ Ri Exclusive - OR indirect RAM to Accumulator 1 12
XRL A,#data Exclusive - OR inmediate data to Accumulator 2 12
rel Byte de offset signado (complemento a dos) de 8 bits. Usado por SJMP y todos
XRL direct,A Exclusive - OR Accumulator to direct byte 2 12
los saltos condicionales. El rango es -128 a + 127 bytes, relativo a primer byte de XRL direct,#da Exclusive - OR inmediate data to direct byte 3 24
la siguiente instrucción. ta
bit Bit Direccionable Directamente en la RAM Interna de Datos o en el Registro de CLR A Clear Accumulator 1 12
Funciones Especiales SFR. CPL A Complement Accumulator 1 12
RL A Rotate Accumulator Left 1 12
RLC A Rotate Accumulator Left throught the carry 1 12
RR A Rotate Accumulator Right 1 12
RRC A Rotate Accumulator Right through the carry 1 12
SWAP A Swap nibbles within the Accumulator 1 12
TRANSFERENCIA DE DATOS
MOV A,Rn Move register to Accumulator 1 12
MOV A,direct Move direct byte to Accumulator 2 12
MOV A, @ Ri Move indirect RAM to Accumulator 1 12
MNEMO DESCRIPCION BYTE PER. MOV A,#data Move inmediate data to Accumulator 2 12
NIC OSC MOV Rn,A Move Accumulator to register 1 12
OPERACIONES ARITMETICAS MOV Rn,direct Move direct byte to register 2 24
ADD A,Rn Add register to Accumulator 1 12 MOV Rn,#data Move inmediate data to register 2 12
ADD A,direct Add direct byte to Accumulator 2 12 MOV direct,A Move Accumulator to direct byte 2 12
ADD A, @ Ri Add indirect RAM to Accumulator 1 12
ADD A,#data Add inmediate data to Accumulator 2 12
ADDC A,Rn Add register to Accumulator with carry 1 12
ADDC A,direct Add direct byte to Accumulator with carry 2 12 MNEMO DESCRIPCION BYTE PER.
ADDC A, @ Ri Add indirect RAM to Accumulator with carry 1 12 NIC OSC
ADDC A,#data Add inmediate data to Accumulator with carry 2 12 MOV direct,Rn Move register to direct byte 2 24
SUBB A,Rn Substract register to Accumulator with borrow 1 12 MOV direct,dire Move direct byte to direct 3 24
SUBB A,direct Substract direct byte to Accumulator with borrow 2 12 ct
SUBB A, @ Ri Substract indirect RAM to Accumulator with borrow 1 12 MOV direct, @ Move indirect RAM to direct byte 2 24
SUBB A,#data Substract inmediate data to Accumulator with borrow 2 12 Ri
INC A Increment Accumulator 1 12 MOV direct,#da Move inmediate data to direct byte 3 24
ta
INC Rn Increment register 1 12
MOV @ Ri,A Move Accumulator to indirect RAM 1 12
INC direct Increment direct byte 2 12
MOV @ Move direct byte to indirect RAM 2 24
INC @ Ri Increment indirect RAM 1 12
Ri,direct
DEC A Decrement Accumulator 1 12
MOV @ Move immediate data to indirect RAM 2 12
DEC Rn Decrement register 1 12
Ri,#data
DEC direct Decrement direct byte 2 12 DPTR,#dat
MOV Load Data Pointer with a 16-bit constant 3 24
DEC @ Ri Decrement indirect RAM 1 12 a16
INC DPTR Increment Data Pointer 1 24 MOVC A,@A+DPT Move Code byte relative to DPTR to Acc 1 24
MUL AB Multiply A y B 1 48 R
DIV AB Divide A y B 1 48 MOVC A,@A+PC Move Code byte relative to PC to Acc 1 24
DA A Decimal Adjust Accumulator 1 12 MOVX A,@ Ir Move External RAM (8-bit addr) to Acc 1 24
OPERACIONES LOGICAS MOVX A,@DPTR Move External RAM (16-bit addr) to Acc 1 24
ANL A,Rn AND register to Accumulator 1 12 MOVX @Ri,A Move Acc to External RAM (8-bit addr) 1 24
ANL A,direct AND direct byte to Accumulator 2 12 MOVX @DPTR,A Move Acc to External RAM (16-bit addr) 1 24
ANL A, @ Ri AND indirect RAM to Accumulator 1 12 PUSH direct Push direct byte onto stack 2 24
ANL A,#data AND inmediate data to Accumulator 2 12 POP direct Pop direct byte from stack 2 24
ANL direct,A AND Accumulator to direct byte 2 12 XCH A,Rn Exchange register with Accumulator 1 12
ANL direct,#da AND inmediate data to direct byte 3 24 XCH A,direct Exchange direct byte with Accumulator 2 12
ta XCH A, @ Ir Exchange indirect RAM with Accumulator 1 12
ORL A,Rn OR register to Accumulator 1 12 XCHD A, @ Ir Exchange low-order digit indirect RAM with 1 12
ORL A,direct OR direct byte to Accumulator 2 12 Accumulator
ORL A, @ Ri OR indirect RAM to Accumulator 1 12 MANIPULACION DE VARIABLE BOOLEANA
ORL A,#data OR inmediate data to Accumulator 2 12 CLR C Clear carry 1 12
ORL direct,A OR Accumulator to direct byte 2 12 CLR bit Clear direct bit 2 12
ORL direct,#da OR inmediate data to direct byte 3 24 SETB C Set carry 1 12
ta SETB bit Set direct bit 2 12
CPL C Complement carry 1 12
CPL bit Complement direct bit 2 12
ANL C,bit AND direct bit to carry 2 24
ANL C,/bit AND complement of direct bit to carry 2 24
ORL C,bit OR direct bit to carry 2 24
ORL C,/bit OR complement of direct bit to carry 2 24
MOV C,bit Move direct bit to carry 2 12
MOV bit,C Move carry to direct bit 2 24
JC rel Jump if carry is set 2 24
JNC rel Jump if carry not set 2 24
JB rel Jump if direct bit is set 2 24
JNB rel Jump if direct bit is not set 2 24
JBC bit,rel Jump if direct bit is set and clear bit 3 24
RAMIFICACION DE PROGRAMA
ACALL addr11 Absolute subroutine call 2 24
LCALL addr16 Long subroutine call 3 24
RET Return from subroutine 1 24
RETI Return from interupt 1 24
AJMP addr11 Absolute jump 2 24
LJMP addr16 Long jump 3 24
SJMP rel Short jump (relative addr) 2 24
JMP @A+DPTR Jump indirect relative to the DPTR 1 24
JZ rel Jump if Accumulator is cero 2 24
JNZ rel Jump if Accumulator is not cero 2 24
CJNE A,direct,re Compare direct byte to Accumulator and Jump if not 3 24
l equal
CJNE A,#data,r Compare immediate to Accumulator and Jump if not 3 24
el equal
CJNE Rn,#data, Compare immediate to register and Jump if not equal 3 24
rel
CJNE @Ri,#data Compare immediate to indirect and Jump if not equal 3 24
,rel
DJNZ Rn,rel Decrement register and Jump if not cero 2 24
DJNZ direct,rel Decrement direct byte and Jump if not cero 3 24
NOP No operation 1 12

También podría gustarte