Instrucciones de transferencia
Son utilizadas para mover los contenidos de los operandos. Cada instrucción se puede usar con diferentes modos de direccionamiento.
MOV
MOVS (MOVSB) (MOVSW)
Instrucciones de carga
Son instrucciones específicas de los registros. Son usadas para cargar en algœ n registro bytes o cadenas de bytes.
LODS (LODSB) (LODSW)
LAHF
LDS
LEA
LES
Instrucciones de la pila
Estas instrucciones permiten el uso de la pila para almacenar y extraer datos.
POP
POPF
PUSH
PUSHF
Instrucción MOV
Propósito: Transferencia de datos entre celdas de memoria, registros y acumulador.
Sintaxis:
MOV Destino,Fuente
Donde Destino es el lugar a donde se moverán los datos y fuente es el lugar donde se encuentran dichos datos.
Ejemplo:
MOV AX,0006h
MOV BX,AX
MOV AX,4C00h
INT 21H
Este pequeño programa mueve el valor 0006H al registro AX, luego mueve el contenido de AX (0006h) al registro BX, por último mueve el valor 4C00h al registro AX para terminar la ejecución con la opción 4C de la interrupción 21h.
Instrucción MOVS (MOVSB) (MOVSW)
Propósito: Mover cadenas de bytes o palabras desde la fuente, direccionada por SI, hasta el destino direccionado por DI.
Sintaxis:
MOVS
Este comando no necesita parametros ya que toma como dirección fuente el contenido del registro SI y como destino el contenido de DI. La secuencia de instrucciones siguiente ilustran esto:
MOV SI, OFFSET VAR1
MOV DI, OFFSET VAR2
MOVS
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.
Los comandos MOVSB y MOVSW se utilizan de la misma forma que MOVS, el primero mueve un byte y el segundo una palabra.
Instrucción LODS (LODSB) (LODSW)
Propósito: Cargar cadenas de un byte o palabra al acumulador.
Sintaxis:
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 VAR1
LODS
La primer linea carga la dirección de VAR1 en SI y la segunda linea lleva el contenido de esa localidad al registro AL.
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).
Instrucción LAHF
Propósito: Transfiere al registro AH el contenido de las banderas
Sintaxis:
LAHF
Esta instrucción es útil para verificar el estado de las banderas durante la ejecución de nuestro programa.
Las banderas quedan en el siguiente orden dentro del registro:
SF ZF ¿? AF ¿? PF ¿? CF
El simbolo "¿?" significa que en esos bits habrá. un valor indefinido.
Instrucción LDS
Propósito: Cargar el registro del segmento de datos
Sintaxis:
LDS destino, fuente
El operando fuente debe ser una palabra doble en memoria. La palabra asociada con la dirección más grande es transferida a DS, o sea que se toma como la dirección del segmento. La palabra asociada con la dirección menor es la dirección del desplazamiento y se deposita en el registro señalado como destino.
Instrucción LEA
Propósito: Carga la dirección del operando fuente.
Sintaxis:
LEA destino, fuente
El operando fuente debe estar ubicado en memoria, y se coloca su desplazamiento en el registro índice o apuntador especificado en destino.
Instrucción LES
Propósito: Carga el registro del segmento extra
Sintaxis:
LES destino, fuente
El operando fuente debe ser un operando en memoria de palabra doble. El contenido de la palabra con la dirección mayor se interpreta como la dirección del segmento y se coloca en ES. La palabra con la dirección menor es la dirección del desplazamiento y se coloca en el registro especificado en el parámetro destino.
Instrucción POP
Propósito: Recupera un dato de la pila
Sintaxis:
POP destino
Esta instrucción transfiere el último valor almacenado en la pila al operando destino, después incrementa en dos el registro SP.
Este incremento se debe a que la pila va creciendo desde la dirección mas alta de memoria del segmento hacia la mas baja, y la pila solo trabaja con palabras (2 bytes), entonces al incrementar en dos el registro SP realmente se le esta restando dos al tamaño real de la pila.
Instrucción POPF
Propósito: Extrae las banderas almacenadas en la pila.
Sintaxis:
POPF
Este comando transfiere bits de la palabra almacenada en la parte superior de la pila hacia el registro de banderas.
La forma de transferencia es la siguiente:
BIT BANDERA
0 CF
2 PF
4 AF
6 ZF
7 SF
8 TF
9 IF
10 DF
11 OF
Instrucción PUSH
Propósito: Coloca una palabra en la pila.
Sintaxis:
PUSH fuente
La instrucción PUSH decrementa en dos el valor de SP y luego transfiere el contenido del operando fuente a la nueva dirección resultante en el registro recién modificado.
Instrucción PUSHF
Propósito: Coloca el valor de las banderas en la pila
Sintaxis:
PUSHF
Este comando 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.
Las banderas quedan almacenadas en memoria en los mismos bits indicados en el comando POPF
Instrucciones lógicas. Son utilizadas para realizar operaciones lógicas sobre los operandos.
AND
NEG
NOT
OR
TEST
XOR
Instrucciones aritméticas. Se usan para realizar operaciones aritméticas sobre los operandos.
ADC
ADD
DIV
IDIV
MUL
IMUL
SBB
SUB
Instrucción AND
Propósito: Realiza la conjunción de los operandos bit por bit.
Sintaxis:
AND destino, fuente
Con esta instrucción se lleva a cabo la operación "y" lógica de los dos operandos:
Fuente Destino | Destino
--------------------------
1 1 | 1
1 0 | 0
0 1 | 0
0 0 | 0
El resultado de la operación se almacena en el operando destino.
Instrucción NEG
Propósito: Genera el complemento a 2
Sintaxis:
NEG destino
Esta instrucción genera el complemento a 2 del operando destino y lo almacena en este mismo operando. Por ejemplo, si AX guarda el valor de 1234H, entonces:
NEG AX
Nos dejaría almacenado en el registro AX el valor EDCCH.
Instrucción NOT
Propósito: Lleva a cabo la negación bit por bit del operando destino.
Sintaxis:
NOT destino
El resultado se guarda en el mismo operando destino.
Instrucción OR
Propósito: OR inclusivo lógico
Sintaxis:
OR destino, fuente
La instrucción OR lleva a cabo, bit por bit, la disyunción inclusiva lógica de los dos operandos:
Fuente Destino | Destino
--------------------------
1 1 | 1
1 0 | 1
0 1 | 1
0 0 | 0
Instrucción TEST
Propósito: Comparar logicamente los operandos
Sintaxis:
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.
Instrucción XOR
Propósito: OR exclusivo
Sintaxis:
XOR destino, fuente
Su función es efectuar bit por bit la disyunción exclusiva lógica de los dos operandos.
Fuente Destino | Destino
--------------------------
1 1 | 0
0 0 | 1
0 1 | 1
0 0 | 0
Instrucción ADC
Propósito: Adición con acarreo.
Sintaxis:
ADC destino, fuente
Lleva a cabo la suma de dos operandos y suma uno al resultado en caso de que la bandera CF esté activada, esto es, en caso de que exista acarreo.
El resultado se guarda en el operando destino.
Instrucción ADD
Propósito: Adición de los operandos.
Sintaxis:
ADD destino, fuente
Suma los dos operandos y guarda el resultado en el operando destino.
Instrucción DIV
Propósito: División sin signo
Sintaxis:
DIV fuente
El divisor puede ser un byte o palabra y es el operando que se le da a la instrucción.
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.
Instrucción IDIV
Propósito: División con signo
Sintaxis:
IDIV fuente
Consiste basicamente en lo mismo que la instrucción DIV, solo que esta última realiza la operación con signo.
Para sus resultados utiliza los mismos registros que la instrucción DIV.
Instrucción MUL
Propósito: Multiplicación sin signo
Sintaxis:
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 registro par DX:AX.
Instrucción IMUL
Propósito: Multiplicación de dos enteros con signo.
Sintaxis:
IMUL fuente
Este comando hace lo mismo que el anterior, solo que si toma en cuenta los signos de las cantidades que se multiplican.
Los resultados se guardan en los mismos registros que en la instrucción MUL.
Instrucción SBB
Propósito: Substracción con acarreo
Sintaxis:
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.
Este tipo de substracción se utiliza cuando se trabaja con cantidades de 32 bits.
Instrucción SUB
Propósito: Substracción
Sintaxis:
SUB destino, fuente
Resta el operando fuente del destino.
Instrucciones de salto Son utilizadas para transferir el flujo del proceso al operando indicado.
JMP
JA (JNBE)
JAE (JNBE)
JB (JNAE)
JBE (JNA)
JE (JZ)
JNE (JNZ)
JG (JNLE)
JGE (JNL)
JL (JNGE)
JLE (JNG)
JC
JNC
JNO
JNP (JPO)
JNS
JO
JP (JPE)
JS
Instrucciones para ciclos: LOOP Transfieren el flujo del proceso, condicional o incondicionalmente, a un destino repitiendose esta acción hasta que el contador sea cero.
LOOP
LOOPE
LOOPNE
Instrucciones de conteo Se utilizan para decrementar o incrementar el contenido de los contadores.
DEC
INC
Instrucciones de comparación Son usadas para comparar operandos, afectan al contenido de las banderas.
CMP
CMPS (CMPSB) (CMPSW)
Instrucciones de banderas Afectan directamente al contenido de las banderas.
CLC
CLD
CLI
CMC
STC
STD
STI
Instrucción JMP
Propósito: Salto incondicional
Sintaxis:
JMP destino
Esta 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.
Instrucción JA (JNBE)
Propósito: Brinco condicional
Sintaxis:
JA Etiqueta
Después de una comparación este comando salta si está arriba o salta si no está abajo o si no es igual.
Esto significa que el salto se realiza solo si la bandera CF esta desactivada o si la bandera ZF esta desactivada (que alguna de las dos sea igual a cero).
Instrucción JAE (JNB)
Propósito: salto condicional
Sintaxis:
JAE etiqueta
Salta si está arriba o si es igual o salta si no está abajo.
El salto se efectua si CF esta desactivada.
Instrucción JB (JNAE)
Propósito: salto condicional
Sintaxis:
JB etiqueta
Salta si está abajo o salta si no está arriba o si no es igual.
Se efectúa el salto si CF esta activada.
Instrucción JBE (JNA)
Propósito: salto condicional
Sintaxis:
JBE etiqueta
Salta si está abajo o si es igual o salta si no está arriba.
El salto se efectúa si CF está activado o si ZF está activado (que cualquiera sea igual a 1).
Instrucción JE (JZ)
Propósito: salto condicional
Sintaxis:
JE etiqueta
Salta si es igual o salta si es cero.
El salto se realiza si ZF está activada.
Instrucción JNE (JNZ)
Propósito: salto condicional
Sintaxis:
JNE etiqueta
Salta si no es igual o salta si no es cero.
El salto se efectua si ZF está desactivada.
Instrucción JG (JNLE)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JG etiqueta
Salta si es más grande o salta si no es menor o igual.
El salto ocurre si ZF = 0 u OF = SF.
Instrucción JGE (JNL)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JGE etiqueta
Salta si es más grande o igual o salta si no es menor que.
El salto se realiza si SF = OF
Instrucción JL (JNGE)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JL etiqueta
Salta si es menor que o salta si no es mayor o igual.
El salto se efectúa si SF es diferente a OF.
Instrucción JLE (JNG)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JLE etiqueta
Salta si es menor o igual o salta si no es más grande.
El salto se realiza si ZF = 1 o si SF es diferente a OF
Instrucción JC
Propósito: salto condicional, se toman en cuenta las banderas.
Sintaxis:
JC etiqueta
Salta si hay acarreo.
El salto se realiza si CF = 1
Instrucción JNC
Propósito: salto condicional, se toma en cuenta el estado de las banderas.
Sintaxis:
JNC etiqueta
Salta si no hay acarreo.
El salto se efectúa si CF = 0.
Instrucción JNO
Propósito: salto condicional, se toma en cuenta el estado de las banderas.
Sintaxis:
JNO etiqueta
Salta si no hay desbordamiento.
El salto se efectua si OF = 0.
Instrucción JNP (JPO)
Propósito: salto condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JNP etiqueta
Salta si no hay paridad o salta si la paridad es non.
El salto ocurre si PF = 0.
Instrucción JNS
Propósito: salto condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JNP etiqueta
Salta si el signo esta desactivado.
El salto se efectúa si SF = 0.
Instrucción JO
Propósito: salto condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JO etiqueta
Salta si hay desbordamiento (overflow).
El salto se realiza si OF = 1.
Instrucción JP (JPE)
Propósito: salto condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JP etiqueta
Salta si hay paridad o salta si la paridad es par.
El salto se efectúa si PF = 1.
Instrucción JS
Propósito: salto condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JS etiqueta
Salta si el signo está prendido.
El salto se efectúa si SF = 1.
Instrucción LOOP
Propósito: Generar un ciclo en el programa.
Sintaxis:
LOOP etiqueta
La instrucción loop decrementa CX en 1, y transfiere el flujo del programa a la etiqueta dada como operando si CX es diferente a 1.
Instrucción LOOPE
Propósito: Generar un ciclo en el programa considerando el estado de ZF
Sintaxis:
LOOPE etiqueta
Esta instrucción decrementa CX en 1. Si CX es diferente a cero y ZF es igual a 1, entonces el flujo del programa se transfiere a la etiqueta indicada como operando.
Instrucción LOOPNE
Propósito: Generar un ciclo en el programa, considerando el estado de ZF
Sintaxis:
LOOPNE etiqueta
Esta instrucción decrementa en uno a CX y transfiere el flujo del programa solo si ZF es diferente a 0.
Instrucción DEC
Propósito: Decrementar el operando
Sintaxis:
DEC destino
Esta operación resta 1 al operando destino y almacena el nuevo valor en el mismo oeprando.
Instrucción INC
Propósito: Incrementar el operando.
Sintaxis:
INC destino
La instrucción suma 1 al operando destino y guarda el resultado en el mismo operando destino.
Instrucción CMP
Propósito: Comparar los operandos.
Sintaxis:
CMP destino, fuente
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.
Instrucción CMPS (CMPSB) (CMPSW)
Propósito: Comparar cadenas de un byte o palabra.
Sintaxis:
CMP destino, fuente
Con esta instrucción la cadena de caracteres fuente se resta de la cadena destino.
Se utilizan DI como indice para el segmento extra de la cadena fuente y SI como indice de la cadena destino.
Solo se afecta el contenido de las banderas y tanto DI como SI se incrementan.
Instrucción CLC
Propósito: Limpiar bandera de acarreo.
Sintaxis:
CLC
Esta instrucción apaga el bit correspondiente a la bandera de acarreo, o sea, lo pone en cero.
Instrucción CLD
Propósito: Limpiar bandera de dirección
Sintaxis:
CLD
La instrucción CLD pone en cero el bit correspondiente a la bandera de dirección.
Instrucción CLI
Propósito: Limpiar bandera de interrupción
Sintaxis:
CLI
CLI pone en cero la bandera de interrupciones, desabilitando así aquellas interrupciones enmascarables.
Una interrupción enmascarable es aquella cuyas funciones son desactivadas cuando IF = 0.
Instrucción CMC
Propósito: Complementar la bandera de acarreo.
Sintaxis:
CMC
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.
Podemos decir que unicamente "invierte" el valor de la bandera.
Instrucción STC
Propósito: Activar la bandera de acarreo.
Sintaxis:
STC
Esta instrucción pone la bandera CF en 1.
Instrucción STD
Propósito: Activar la bandera de dirección.
Sintaxis:
STD
La instrucción STD pone la bandera DF en 1.
Instrucción STI
Propósito: Acticar la bandera de interrupción.
Sintaxis:
STI
La instrucción activa la bandera IF, esto habilita las interrupciones externas enmascarables (las qu
No hay comentarios:
Publicar un comentario