Upload
gerardo-gonzalez
View
1.198
Download
1
Embed Size (px)
Citation preview
INSTITUTO TECNOLÓGICO DE MATEHUALA
TABLA CONJUNTO DE INSTRUCCIONES
Elaboró:
Alma Rosa Medrano Licea
Gerardo González Barajas
Maribel Molina Herrera
Paulina del Carmen Álvarez García
Matehuala, S.L.P. Marzo 2011
Materia: Lenguaje Ensamblador
Docente: Ing. Martín Luis Ledezma Hernández
Carrera: Ingeniería en Sistemas Computacionales
Grupo: Sexto Semestre
UNIDAD 2. ELEMENTOS DEL LENGUAJE
CONJUNTO DE INSTRUCCIONES
Nombre de la Instrucción
Sintaxis de la Instrucción Descripción del funcionamiento de
la instrucción
Ejemplo de uso de la instrucción
Categoría de la
Instrucción
ADC ADC destino, fuente Lleva a cabo la suma de dos operándos y suma uno al resultado en caso de que la bandera CF esté activada, esto es, en caso de que exista acarreo.
ADC BX, AX Aritméticas
ADD ADD destino, fuente Suma los dos operandos y guarda el resultado en el operando destino.
ADD AX, BX Aritméticas
DEC DEC destino Decrementar el operando.Esta operación resta 1 al operando destino y almacena el nuevo valor en el mismo operando.
DEC AX Aritméticas
DIV DIV fuente El divisor puede ser un byte o palabra y es el operando que se le da a la instrucción.
DIV AX Aritméticas
Si el divisor es de 8 bits se toma como dividendo el registro de 16 bits AX y si el divisor es de 16 bits se tomara como dividendo el registro par DX:AX, tomando como palabra alta DX y como baja AX.
Si el divisor fué un byte el cociente se almacena en el registro AL y el residuo en AH, si fué una palabra el cociente se guarda en AX y el residuo en DX.
IDIV IDIV fuente Consiste basicamente en lo mismo que la instrucción DIV, solo que esta última realiza la operación con signo
IDIV BX Aritméticas
IMUL IMUL fuente Este comando hace lo mismo que MUL, solo que si toma en cuenta los signos de las cantidades que se multiplican.
IMUL AX Aritméticas
INC INC destino Incrementar el operando.La instrucción suma 1 al operando destino y guarda el resultado en el mismo operando destino.
INC BX Aritméticas
MUL MUL fuente El ensamblador asume que el multiplicando sera del mismo tamaño que el del multiplicador, por lo tanto multiplica el valor almacenado en el registro que se le da como operando por el que se encuentre contenido en AH si el multiplicador es de 8 bits o por AX si el multiplicador es de 16 bits.
Cuando se realiza una multiplicación con valores de 8 bits el resultado se almacena en el registro AX y cuando la multiplicación es con valores de 16 bits el resultado se almacena en el
MUL AX Aritméticas
registro par DX:AX.
NEG NEG destino Esta instrucción genera el complemento a 2 del operando destino y lo almacena en este mismo operando
si AX guarda el valor de 1234H, entonces:
NEG AX
Nos dejaría almacenado en el registro AX el valor EDCCH.
Aritméticas
SBB SBB destino, fuente Esta instrucción resta los operandos y resta uno al resultado si CF está activada. El operando fuente siempre se resta del destino
SBB BL, AL Aritméticas
SUB SUB destino, fuente Resta el operando fuente del destino
SUB AX, BX Aritméticas
AAA AAA Ajuste ASCII para la suma.Convierte el contenido de AL en un numero BCD no empaquetado.
ADD AL, BLAAA
Conversión ASCII-BCD
AAD AAD Ajuste ASCII para la división.Convierte dos números BCD no empaquetados
AADDIV BL
Conversión ASCII-BCD
contenidos en AL Y AH en un dividendo un byte que queda almacenado en AL.
AAM AAM Ajuste ASCII para la multiplicación.Corregir el resultado en AX del producto de dos números BCD no empaquetados.
MUL BLAAM
Conversión ASCII-BCD
AAS AAS Ajuste ASCII para la resta.Convierte el resultado de la sustracción de dos operandos en un numero BCD no empaquetado.
SUB AL, BLAAS
Conversión ASCII-BCD
DAA DAA Ajuste decimal para la suma.Convierte el contenido del registro AL en un par de valores BCD.
ADD AL, CLDAA
Conversión ASCII-BCD
DAS DAS Ajuste decimal para la resta.Corrige el resultado en AL de la resta de dos números BCD empaquetados.
SUB AL, BLDAS
Conversión ASCII-BCD
RCL RCL destino, contador Rotación a la izquierda con acarreo
RCL AX, 03 Corrimiento de bit
RCR RCR destino, contador Rotación a la derecha con acarreo
RCR AX, CL Corrimiento de bit
ROL ROL destino, contador Rotación a la izquierda
ROL AX, CL Corrimiento de bit
ROR ROR destino, contador Rotación a la derecha
ROR AX, 1 Corrimiento de bit
SAL SAL destino, contador Desplazamiento aritmético a la izquierda
SAL AX, CL Corrimiento de bit
SAR SAR destino, contador Desplazamiento aritmético a la derecha
SAR AX, CL Corrimiento de bit
SHL SAL destino, contador Desplazamiento lógico a la izquierda
SHL AX, CL Corrimiento de bit
SHR SHR destino, contador Desplazamiento lógico a la derecha
SHR AX, CL Corrimiento de bit
SHLD/SHRD SHLD/SHRD {registro/memoria}, registro, {CL,inmediato}
Recorre múltiples bits en un operando. Las instrucciones requieren tres operandos. El primer operando es un registro de 16 o 32 bits o una localidad de memoria con el valor que será corrido. El segundo es un registro con los bits que serán recorridos en el primer operando. El tercer es el CL o una constante inmediata con el valor de corrimiento.
SHLD/SHRD AX, BX, 03 Corrimiento de bit
BSF/BSR BSF/BSR destino, fuente Exploración de bit:BSF busca de derecha a izquierda,
BSF/BSR AX, BX Comparación
BSR busca de izquierda a derecha
BT/BTC/BTR/BTS BT,/BTC/ BTR/ BTS {registro/memoria}, {registro, inmediato}
Prueba de bit. Copia un bit especifico en la bandera CF. El primer operando contiene la cadena de bits que serian examinadas y el segundo indica su posición. BTC complementa el bit invirtiendo su valor en el primer operando. BTR reestablece el bit poniéndolo en cero. BTS pone el bit en 1. Referencias son calores de 16 o 32 bits.
BT,/BTC/ BTR/ BTS AX, BX Comparación
CMP CMP destino, fuente Comparar los operandos.Esta instrucción resta el operando fuente al operando destino pero sin que éste almacene el resultado de la operación, solo se afecta el estado de las banderas.
CMP BX, AX Comparación
CMPS CMP destino, fuente Comparar cadenas de un byte o palabra.Con esta instrucción la cadena de
CMP VAR1, VAR2 Comparación
caracteres fuente se resta de la cadena destino.
TEST TEST destino, fuente Realiza una conjunción, bit por bit, de los operandos, pero a diferencia de AND esta instrucción no coloca el resultado en el operando destino, solo tiene efecto sobre el estado de las banderas
TEST AX, BX Comparación
LEA LEA destino, fuente Carga la dirección del operando fuente.El operando fuente debe estar ubicado en memoria, y se coloca su desplazamiento en el registro índice o apuntador especificado en destino
LEA SI, VAR1 Transferencia de datos
LODS LODS Carga una cadena de caracteres. Carga el AL con un byte, el AX con una palabra o el EAX con una palabra doble desde la memoria. La dirección de memoria esta sujeta a los registros DS:SI,
LODSB equivale a:MOV AL, [SI]INC SI
Transferencia de datos
aunque puede pasar por alto el SI. Dependiendo de la bandera de dirección, la operación también incrementa o disminuye el SI en 1 para byte, en 2 para palabra y en 4 para palabra doble.Los comandos LODSB y LODSW se utilizan de la misma forma, el primero carga un byte y el segundo una palabra (utiliza el registro completo AX).
LDS/LES/LFS/LGS/LSS LDS/LES/LFS/LGS/LSS registro, memoria
Carga el registro del segmento. Inicializa una dirección lejana y desplazamiento de un elemento de datos de modo que las instrucciones que siguen puedan accesarla. El primero operando hace referencia a cualquiera de los registros general, índice o apuntador. El segundo operando hace
LDS/LES/LFS/LGS/LSS AX, [DI]
Transferencia de datos
referencia a cuatro bytes en memoria que contiene un desplazamiento y una dirección de segmento. LA operación carga la dirección de segmento con el registro del segmento y la dirección del desplazamiento en el registro del primer operando.
MOV MOV destino, fuente Nos va a permitir transferir información entre registros y memoria, memoria y registros y entre los propios registros utilizando alguno de los diferentes modos de direccionamiento.
MOV DX,DATO1 MOV DATO2,DX
Transferencia de datos
MOVS MOVS Este comando no necesita parámetros ya que toma como dirección fuente el contenido del registro SI y como destino el contenido de DI
MOV SI, OFFSET VAR1MOV DI, OFFSET VAR2MOVS
Primero inicializamos los valores de SI y DI con las direcciones de las variables VAR1 y VAR2 respectivamente, despues al ejecutar MOVS se copia el contenido de VAR1 a VAR2
Transferencia de datos
MOVSX/ MOVZX MOVSX/ MOVZX {registro/memoria}, {registro/memoria/inmediato}
Mueve un signo ampliado o cero ampliado. Copia un operando de 8 o 16 bits a un operando destino de 16 o 32 bits. MOVSX llena con el bit de signo los bits de mas a la izquierda y MOVZX llena con cero los bits.
MOVSX/MOVZX AX, [DI] Transferencia de datos
STOS STOS cadena_destino Almacena los contenidos del registro AL, AX o EAX en un byte, palabra o palabra doble en memoria. La dirección de memoria siempre esta sujeta a los registros ES:DI. Dependiendo de la bandera de dirección, STOS también incrementa o disminuye el registro DI en 1 para byte, 2 para palabra y 4 para doble.
stos [byte di] Transferencia de datos
XCHG destino, origen (eXCHanGe, intercambiar)
Intercambia contenidos. Su formato es XCHG OP1,OP2. El resultado es que el
XCHG AX,BX ; AX->BX, BX->AX
Transferencia de datos
contenido de OP2 se pasa a OP1 y el de OP1 se pasa a OP2
XLAT XLAT tabla Se utiliza para traducir un byte del registro AL a un byte tomado de la tabla de traducción. Los datos se toman desde una dirección de la tabla correspondiente a BX + AL, donde bx es un puntero a el comienzo de la tabla y AL es un índice. Indicar tabla al lado de xlat es sólo una redundancia opcional
mov bx,offset tabla mov al,4 xlat
Transferencia de datos
CLC CLC Limpiar bandera de acarreo.Esta instrucción apaga el bit correspondiente a la bandera de acarreo, o sea, lo pone en cero.
CLC Operaciones con bandera
CLD CLD Limpiar bandera de dirección.La instrucción CLD pone en cero el bit correspondiente a la bandera de dirección.
CLD Operaciones con bandera
CLI CLI Limpiar bandera de interrupción.CLI pone en cero la bandera de interrupciones, deshabilitando así aquellas interrupciones enmascarables.
CLI Operaciones con bandera
CMC CMC Complementar la bandera de acarreo.Esta instrucción complementa el estado de la bandera CF, si CF = 0 la instrucción la iguala a 1, y si es 1 la instrucción la iguala a 0.
CMC Operaciones con bandera
LAHF LAHF Transfiere al registro AH el contenido de las banderas.Esta instrucción es útil para verificar el estado de las banderas durante la ejecución de nuestro programa.
LAHF Operaciones con bandera
POPF POPF Este comando transfiere bits de la palabra almacenada en la parte superior de la pila hacia el registro de banderas.
POPF Operaciones con bandera
PUSHF PUSHF Este comando PUSHF Operaciones
decrementa en 2 el valor del registro SP y luego se transfiere el contenido del registro de banderas a la pila, en la dirección indicada por SP.
con bandera
SAHF SAHF La instrucción SAHF transfiere el registro AH hacia los bits correspondientes de laparte baja del registro de estado, o sea, a los indicadores SF, ZF, AF, PF y CF. SHAF solomodifica al registro de banderas y no requiere operandos
SAHF Operaciones con bandera
STC STC Activar la bandera de acarreo.Esta instrucción pone la bandera CF en 1.
STC Operaciones con bandera
STD STD Activar la bandera de dirección.La instrucción STD pone la bandera DF en 1.
STD Operaciones con bandera
STI STI Activar la bandera de interrupción.La instrucción activa la bandera IF, esto
STI Operaciones con bandera
habilita las interrupciones externas enmascarables (las que funcionan únicamente cuando IF = 1).
IN IN acumulador, puerto Transfiere datos desde el puerto indicado hasta el registro AL o AX.
IN AX, 0FHIN AL, DX
Entrada/salida
OUT OUT puerto, acumulador Transfiere un byte o palabra del registro AL o AX a un puerto de salida.
OUT 12H, AXOUT DX, AL
Entrada/salida
AND AND destino, fuente Con esta instrucción se lleva a cabo la operación "y" lógica de los dos operandos
AND BX, AX Lógicas
NOT NOT destino Lleva a cabo la negación bit por bit del operando destino
NOT AX Lógicas
OR OR destino, fuente La instrucción OR lleva a cabo, bit por bit, la disyunción inclusiva lógica de los dos operandos
OR BL, AL Lógicas
XOR XOR destino, fuente Su función es efectuar bit por bit la disyunción exclusiva lógica de los dos operandos
XOR AX, BX Lógicas
LOOP LOOP etiqueta Generar un ciclo en el programa.La instrucción loop
LOOP B20 Ciclos
decrementa CX en 1, y transfiere el flujo del programa a la etiqueta dada como operando si CX es diferente a 1.
LOOPE/LOOPZ LOOPE etiqueta Repetir el ciclo mientras sea igual/mientras sea cero.
LOOPNE/LOOPNZ salt Ciclos
LOOPNE/LOOPNZ LOOPNE etiqueta Generar un ciclo en el programa considerando el estado de ZF.Esta instrucción decrementa a CX en 1 y transfiere el flujo del programa solo si ZF es diferente a 0.
LOOPNE B30 Ciclos
ESC ESC código_operación, origen
Se utiliza en combinación con procesadores externos, tales como los coprocesadores de coma flotante o de E/S, y abre al dispositivo externo el acceso a las direcciones y operandos requeridos. Al mnemónico ESC le siguen los códigos de operación apropiados para el coprocesador así
ESC 21,AX Control del proceso
como la instrucción y la dirección del operando necesario
HLT HLT El procesador se detiene hasta que se restaura el sistema o se recibe una interrupción. Como en los PC se producen normalmente 18,2 interrupciones de tipo 8 por segundo (del temporizador) algunos programadores utilizan HLT para hacer pausas y bucles de retardo. Sin embargo, el método no es preciso y puede fallar con ciertos controladores de memoria
HLT Control del proceso
LOCK LOCK Es una instrucción que se utiliza en aplicaciones de recursos compartidos para asegurar que no accede simultáneamente a la memoria más de un procesador.
Control del proceso
Cuando una instrucción va precedida por LOCK, el procesador bloquea inmediatamente el bus, introduciendo una señal por la patilla LOCK.
NOP NOP Realiza una operación nula, es decir, el microprocesador decodifica la instrucción y pasa a la siguiente. Realmente se trata de la instrucción XCHG AX,AX.
Control del proceso
WAIT WAIT Provoca la espera del procesador hasta que se detecta una señal en la patilla TEST. Ocurre, por ejemplo, cuando el coprocesador ha terminado una operación e indica su finalización. Suele preceder a ESC para
Control del proceso
sincronizar las acciones del procesador y coprocesador
POP POP destino Recupera un dato de la pila.Esta instrucción transfiere el último valor almacenado en la pila al operando destino, después incrementa en dos el registro SP.
POP AX Operaciones con la pila
POPA POPA Saca de la pila 8 palabras y las envía a DI, SI, BP, SP, BX, DX, CX y AX, y ese orden se incrementa el SP en 16. Por lo común, un PUSHA ha guardado los registros. Para el 80386 y posteriores POPAD maneja palabras doble e incrementa el SP en 32. El valor de SP es descartado en lugar de ser guardado.
popa Operaciones con la pila
PUSH PUSH fuente Coloca una palabra en la pila.La instrucción PUSH decrementa en dos el valor de SP y luego transfiere el contenido del
PUSH BX Operaciones con la pila
operando fuente a la nueva dirección resultante en el registro recién modificado.
PUSHA PUSHA Empuja todos los registros generales
PUSHA Operaciones con la pila
CMPS CMP destino, fuente Compara el contenido de una localidad de memoria con la de la otra localidad de memoria. Dependiendo de la bandera de dirección CMPS incrementa o disminuye también los registros SI y DI en 1 para bytes, en 2 para palabras y en 4 para palabras dobles
| [etiqueta:] | CMP | {registro/memoria}, {registro/memoria/inmediato} |
Operaciones con cadenas
LODS LODS Esta instrucción toma la cadena que se encuentre en la dirección especificada por SI , la carga al registro AL (o AX) y suma o resta 1 (segun el estado de DF) a SI si la transferencia es de bytes o 2 si la transferencia es de palabras
MOV SI, OFFSET VAR1LODS
La primer linea carga la dirección de VAR1 en SI y la segunda linea lleva el contenido de esa localidad al registro AL.
Operaciones con cadenas
MOVS MOVS cadena_destino, Combina un prefijo MOV AL, [1000 Operaciones
cadena_origen REP y una longitud en el CX puede mover cualquer número de caracteres.
con cadenas
REP REP Provoca que una instrucción para cadena se realice de manera repetitiva un número especifico de veces
REP MOVSn Operaciones con cadenas
REPE/REPZ REPE/REPZ Repite mientras no sea igual/ repite mientras no sea cero. Son prefijos de repetición condicional
REPE/REPZ CMPS destino, fuente
Operaciones con cadenas
REPNE/REPNZ REPNE/REPNZ este modificador repite la instrucción a la que acompaña si ECX es distinto de 0 y ZF = 0 (decrementa CX cada vez). Las instrucciones con las que se puede usar son CMPS o SCAS.
REPNE/REPN CMPS destino, fuente
Operaciones con cadenas
SCAS SCAS
cadena_destino
Busca una cadena por valor de byte, palabra o palabra doble especifico. Compara el contenido del registro AL, AX EAX
SCASW (palabras) Operaciones con cadenas
STOS STOS cadena_destino Almacena los stos [byte di] Operaciones
contenidos del registro AL, AX o EAX en un byte, palabra o palabra doble en memoria. La dirección de memoria siempre esta sujeta a los registros ES:DI. Dependiendo de la bandera de dirección, STOS también incrementa o disminuye el registro DI en 1 para byte, 2 para palabra y 4 para doble.
con cadenas
INTO INTO Provoca una interrupción (generalmente inofensiva) si ha ocurrido un desbordamiento (la OF esta en 1) y realiza una INT 04H. La dirección de interrupción está en la localidad 10H de la tabla de servicio de interrupción.
INTO Transferencia (condicional)
JA/JNBE JA Etiqueta Brinco condicional.Después de una comparación este comando salta si está arriba o salta si no está abajo o si no
JA B20 Transferencia (condicional)
es igualJAE/JNB JAE etiqueta Salto condicional.
Salta si está arriba o si es igual o salta si no está abajo
JAE B20 Transferencia (condicional)
JB/JNAE JB etiqueta Salto condicional.Salta si está abajo o salta si no está arriba o si no es igual.
JB B20 Transferencia (condicional)
JBE/JNA JBE etiqueta Salto condicional.Salta si está abajo o si es igual o salta si no está arriba.
JBE B20 Transferencia (condicional)
JC/JNC JC etiqueta Salto condicional, se toman en cuenta las banderas.Salta si hay acarreo.
JC B20 Transferencia (condicional)
JCXZ JCXZ Salta a una operación específica si el CX o el EX (80386 y posteriores) contiene cero. Esta operación podría ser utilizada al inicio de un ciclo, aunque limitada a un salto corto, Banderas no las afecta
JCXZ Transferencia (condicional)
JE/JZ JE etiqueta Salto condicional.Salta si es igual o salta si es cero.
JE B20 Transferencia (condicional)
JG/JNLE JG etiqueta Salto condicional, se toma en cuenta el signo.
JG B20 Transferencia (condicional)
Salta si es más grande o salta si no es menor o igual.
JGE/JNL JGE etiqueta Salto condicional, se toma en cuenta el signo.Salta si es más grande o igual o salta si no es menor que.
JGE B20 Transferencia (condicional)
JL/JNGE JL etiqueta Salto condicional, se toma en cuenta el signo.Salta si es menor que o salta si no es mayor o igual.
JL B20 Transferencia (condicional)
JLE/JNG JLE etiqueta Salto condicional, se toma en cuenta el signo.Salta si es menor o igual o salta si no es más grande.
JLE B20 Transferencia (condicional)
JNE/JNZ JNE etiqueta Salto condicional.Salta si no es igual o salta si no es cero.
JNE B20 Transferencia (condicional)
JNP/JPO JNP etiqueta Salto condicional, se toma en cuenta el estado de las banderas.Salta si no hay paridad o salta si la paridad es non.
JNP B20 Transferencia (condicional)
JO/JNO JNO etiqueta Salto condicional, se toma en cuenta el estado de las banderas.
JNO B20 Transferencia (condicional)
Salta si no hay desbordamiento..
JP/JPE JP etiqueta Salto condicional, se toma en cuenta el estado de las banderas.Salta si hay paridad o salta si la paridad es par.
JP B20 Transferencia (condicional)
JS/JNS JNS etiqueta Salto condicional, se toma en cuenta el estado de las banderas.Salta si el signo esta desactivado.
JNS B20 Transferencia (condicional)
CALL CALL {registro/memoria} Llama a un procedimiento cercano o lejano. El ensamblador genera un CALL cercano i el procedimiento llamado es NEAR y un CALL lejano si el procedimiento es FAR.
call proc1 Transferencia (incondicional)
INT INT Interrumpe el procesamiento y accesa la tabla de servicios de interrupción en memoria baja para determinar la dirección de la rutina solicitada
INT Transferencia (incondicional)
IRET IRET Retorno de interrupción
IRET Transferencia (incondicional)
("Interrupt Return"). Recupera de la pila el contador de programa PC; el segmento de código CS (lo que supone devolver el programa al punto de ejecución original), y el registro de estado FLAGS (lo que supone devolver las interrupciones enmascarables al estado inicial).
JMP JMP destino Salto incondicionalEsta instrucción se utiliza para desviar el flujo de un programa sin tomar en cuenta las condiciones actuales de las banderas ni de los datos.
JMP BX Transferencia (incondicional)
RET RET [valor] Retorna de un procedimiento extrayendo de la pila la dirección de la siguiente Dirección.
RET / RET 4 Transferencia (incondicional)
RETN/RETF RETN [valor]/ RETF[valor] Son formatos en que se puede presentar el return, se extraerá el registro de segmento y el desplazamiento en
RETN / RETF Transferencia (incondicional)
un procedimiento de tipo FAR (dos palabras) y solo el desplazamiento en un procedimiento NEAR (una palabra).
CBW CBW
Indicadores: OF DF IF TF SF ZF AF PF CF
Copia el bit 7 del registro AL en todos los bits del registro AH, es decir, expande el signo de AL a AX como paso previo a una operación de 16 bits.
CBW Conversión de tipo
CDQ CDQ( sin operando) realizan la extensión del bit de signo de DWORD a QUADRUPLEWORD actuando sobre AX, EAX o EDX:EAX
cdq eax Conversión de tipo
CWD CWD
Indicadores: OF DF IF TF SF ZF AF PF CF
Expande el signo del registro AX sobre el registro DX, copiando el bit más significativo de AH en todo DX
CWD Conversión de tipo
CWDE CWDE Convierte la palabra extendida doble
CWDE Conversión de tipo