Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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))
(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
(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.
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
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
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)
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.
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
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