Vous êtes sur la page 1sur 30

Equipo: Omar, Carlos, Mauricio

Instrucciones de transferencia Son utilizadas para mover los contenidos de los operandos. Cada instruccin se puede usar con diferentes modos de direccionamiento.

Instruccin MOV
Propsito: Transferencia de datos entre celdas de memoria, registros y acumulador. Sintaxis: MOV Destino,Fuente Donde Destino es el lugar a donde se movern los datos y fuente es el lugar donde se encuentran dichos datos.

Los diferentes movimientos de datos permitidos para esta instruccin 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 pequeo 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 ejecucin con la opcin 4C de la interrupcin 21h.

Hay que tener en cuenta sin embargo algunas cosas que no pueden hacerse con la instruccin MOV. En primer lugar, no pueden moverse datos directamente entre dos posiciones de memoria. As MOV Datos1,Datos2 es una expresin ilegal. En su lugar se escriben las dos lneas: MOV AX,Datos2 MOV Datos1,AX

En segundo lugar, no se pueden mover datos directamente de un registro de segmento a otro. MOV DS,ES es ilegal. En su lugar podemos escribir:

MOV AX,ES MOV DS,AX

En tercer lugar, no se puede mover una constante directamente a un registro de segmento. MOV DS,Datos es ilegal. En su lugar escribamos MOV AX,Datos MOV DS,AX

Finalmente, no se puede usar CS como operando.

Instruccin MOVS (MOVSB) (MOVSW)


Propsito: 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 direccin 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.

Instruccin POP
Propsito: Recupera un dato de la pila Sintaxis: POP destino Esta instruccin 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 direccin 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 tamao real de la pila.

Instruccin POPF
Propsito: 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 tamao de la pila.

Instruccin PUSH
Propsito: Coloca una palabra en la pila. Sintaxis: PUSH fuente La instruccin PUSH decrementa en dos el valor de SP y luego transfiere el contenido del operando fuente a la nueva direccin resultante en el registro recin modificado.

El decremento en la direccin se debe a que al agregar valores a la pila sta crece de la direccin mayor a la direccin menor del segmento, por lo tanto al restarle 2 al valor del registro SP lo que hacemos es aumentar el tamao de la pila en dos bytes, que es la nica cantidad de informacin que puede manejar la pila en cada entrada y salida de datos.

Instruccin PUSHF
Propsito: 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 direccin indicada por SP.

Las banderas quedan almacenadas en memoria en los mismos bits indicados en el comando : POPF

PUSH se usa para guardar en la pila un dato, y POP para recuperarlo. Como la pila tiene estructura LIFO, las instrucciones POP se realizarn en orden inverso a las instrucciones PUSH. Por ejemplo, si se quieren guardar los registro AX y BX y recuperarlos despus, la secuencia correcta es PUSH AX PUSH BX . . POP BX POP AX

PUSH y POP tambin son adecuados para transferir el contenido de un registro a otro, por ejemplo PUSH AX POP BX

transfiere AX a BX. Este mtodo es sin embargo mas lento. A veces se necesita guardar todos los registro generales para recuperarlos despus. En lugar de escribir una serie de PUSH y otra serie de POP, se usan las instrucciones PUSHA y POPA. Adems de aportar comodidad al programador y legibilidad al programa, estas instrucciones se ejecutan ms rpido. Cuando se quiere guardar el registro de indicadores, se usan las formas PUSHF y POPF.

Las instrucciones de entrada/salida IN/OUT

Se usan para comunicar se con los perifricos del sistema, y tienen el formato IN acumulador, puerto OUT puerto, acumulador

donde el acumulador es AX o AL segn se trata de bytes o palabras. Algunos ejemplos pueden ser los siguientes: IN AL,200 ; pasa a AL el contenido del puerto 200 OUT 20H,AX ; enva al puerto 20H el contenido de AX

Las instrucciones de transferencia de direcciones

Permiten cdigo fuente mas compacto sobre todo cuando se trata con direccionamientos indexados. Por ejemplo, consideremos la instruccin MOV AL,[BX+SI+20]

El micro toma el valor de BX, le suma el valor de SI y al resulta do le suma 20, usando el valor obtenido como desplazamiento dentro del segmento DS para acceder a un byte y transferirlo al registro AL. Esta instruccin lleva implcitas las operaciones:

MOV DX,BX ADD DX,SI ADD SI,20

Instruccin LODS (LODSB) (LODSW)


Propsito: Cargar cadenas de un byte o palabra al acumulador. Sintaxis: LODS Esta instruccin toma la cadena que se encuentre en la direccin 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 direccin 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).

La primer lnea carga la direccin de VAR1 en SI y la segunda lnea 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).

Instruccin LAHF
Propsito: Transfiere al registro AH el contenido de las banderas Sintaxis: LAHF Esta instruccin es til para verificar el estado de las banderas durante la ejecucin de nuestro programa. Las banderas quedan en el siguiente orden dentro del registro: SF ZF ? AF ? PF ? CF El smbolo "?" significa que en esos bits habr. un valor indefinido.

Instruccin LDS
Propsito: 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 direccin mas grande es transferida a DS, o sea que se toma como la direccin del segmento. La palabra asociada con la direccin menor es la direccin del desplazamiento y se deposita en el registro sealado como destino.

Instruccin LEA
Propsito: Carga la direccin 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.

Instruccin LES Propsito: 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 direccin mayor se interpreta como la direccin del segmento y se coloca en ES. La palabra con la direccin menor es la direccin del desplazamiento y se coloca en el registro especificado en el parmetro destino.

Vous aimerez peut-être aussi