domingo, 4 de octubre de 2009

INSTRUCCIONES DEL ENSAMBLADOR

INSTRUCCIONES DEL ENSAMBLADOR
el signo esta desactivado.
El salto se efectúa si SF = 0.
JO etiqueta
Salta si hay desbordamiento (overflow).
El salto se realiza si OF = 1.

JP etiqueta
Salta si hay p
-----------1. LAS LOGICAS------------
Instrucciones lógicas. Son utilizadas para realizar operaciones lógicas sobre los operandos.
AND
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.

NEG destino
Esta instrucción genera el complemento a 2 del operando destino y lo almacena en este mismo operando.

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




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


------------2. LAS INSTRUCCIONES DE TRANSFERENCIA

Instrucciones de transferencia Son utilizadas para mover los contenidos de los operandos. Cada instrucción se puede usar con diferentes modos de direccionamiento.
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.
Los diferentes movimientos de datos permitidos para esta instrucción son:
Destino: memoria. Fuente: acumulador


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.


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.

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.
LDS destino, fuente
El operando fuente debe ser una palabra doble en memoria. La palabra asociada con la dirección mas 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.
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.
Para ilustrar una de las facilidades que tenemos con este comando pongamos una equivalencia:

MOV SI, OFFSET VAR1
Equivale a:
LEA SI, VAR1
Es muy probable que para el programador sea mas sencillo crear programas extensos utilizando este último formato.

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.

POP destino
Esta instrucción transfiere el último valor almacenado en la pila al operando destino, despues 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.

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

Estas localizaciones son las mismas para el comando PUSHF
Una vez hecha la transferencia se incrementa en 2 el registro SP disminuyendo así el tamaño de la pila.

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.
El decremento en la dirección se debe a que al agregar valores a la pila ésta crece de la dirección mayor a la dirección menor del segmento, por lo tanto al restarle 2 al valor del registro SP lo que hacemos es aumentar el tamaño de la pila en dos bytes, que es la única cantidad de información que puede manejar la pila en cada entrada y salida de datos.

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



---------3. LAS INSTRUCCIONES ARITMETICAS
Instrucciones aritméticas. Se usan para realizar operaciones aritméticas sobre los operandos.

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.

ADD destino, fuente
Suma los dos operandos y guarda el resultado en el operando destino.

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.

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.

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.

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.
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.
SUB destino, fuente
Resta el operando fuente del destino.


--------------4. OPERACIONES DE SALTO
Instrucciones de salto Son utilizadas para transferir el flujo del proceso al operando indicado.

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.

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).

JAE etiqueta
Salta si está arriba o si es igual o salta si no está abajo.
El salto se efectua si CF esta desactivada.

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.

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).

JE etiqueta
Salta si es igual o salta si es cero.
El salto se realiza si ZF está activada.

JNE etiqueta
Salta si no es igual o salta si no es cero.
El salto se efectua si ZF está desactivada.

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.

JGE etiqueta
Salta si es más grande o igual o salta si no es menor que.
El salto se realiza si SF = OF

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.

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

JC etiqueta
Salta si hay acarreo.
El salto se realiza si CF = 1

JNC etiqueta
Salta si no hay acarreo.
El salto se efectúa si CF = 0.

JNO etiqueta
Salta si no hay desbordamiento.
El salto se efectua si OF = 0.

JNP etiqueta
Salta si no hay paridad o salta si la paridad es non.
El salto ocurre si PF = 0.

JNP etiqueta
Salta siaridad o salta si la paridad es par.
El salto se efectúa si PF = 1.

JS etiqueta
Salta si el signo está prendido.
El salto se efectúa si SF = 1.


--------5. INSTRUCCIÓNES MISCELANEAS:

INSTRUCCIÓN NOP
Sintaxis: NOP
Función: No Operación
Operación: PC) <= (PC) + 1

Descripción: Como su nombre indica, no realiza ninguna operación. Generalmente se utiliza para obtener demoras cortas, ya que en su ejecución se invierte un ciclo máquina.



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.


No hay comentarios:

Publicar un comentario

Seguidores