Las instrucciones del ensamblador
- 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 algn 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
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.
Los diferentes movimientos de datos permitidos para
esta instrucción son:
- Destino: memoria. Fuente: acumulador
- Destino: acumulador. Fuente: memoria
- Destino: registro de segmento. Fuente:
memoria/registro
- Destino: memoria/registro. Fuente: registro de
segmento
- Destino: registro. Fuente: registro
- Destino: registro. Fuente: memoria
- Destino: memoria. Fuente: registro
- Destino: registro. Fuente: dato inmediato
- Destino: memoria. Fuente: dato inmediato
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.
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.
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).
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.
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 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.
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.
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.
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.
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, 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.
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
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.
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.
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.
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
Capitulo
anterior Menu Principal Siguiente
Capitulo