Vous êtes sur la page 1sur 7

Facultad de Ingeniera de Sistemas,

Cmputo y Telecomunicaciones









Microprocesadores


Flix Armando Fermn Prez


1
Leccin 6
Movimiento de datos

El diseo del repertorio de instrucciones de lenguaje de mquina es un aspecto muy
importante en el diseo del microprocesador. Es bastante complejo ya que afecta a
muchos aspectos del funcionamiento del computador. Es mediante este conjunto de
instrucciones que el programador puede controlar el funcionamiento de la CPU, por
lo tanto deben tomarse en consideracin las necesidades del programador a la hora
de disear el repertorio de instrucciones.

Esta leccin trata sobre la instruccin ms utilizada del microprocesador en todos
los programas, la instruccin de movimiento o trasferencia de datos en los
diferentes modos de direccionamiento del microprocesador.

6.1 Operaciones de movimiento de datos.
Las instrucciones de movimiento o transferencia de datos es el tipo de instruccin
de mquina ms bsico. En ella debe primero especificarse las posiciones de los
operandos destino y fuente, las posiciones de los operandos pueden ser posiciones
de memoria, registros, puertos de entrada/salida o la cabecera de una pila. A
continuacin debe especificarse la longitud de los datos a transferir y finalmente
debe especificarse el modo de direccionamiento para cada uno de los operandos.
(Brey, 2000, p.72)

Para la CPU, las instrucciones de transferencia de datos son las ms sencillas, si por
ejemplo, los operandos tanto destino como fuente son registros, entonces la CPU lo
que hace es simplemente transferir datos de un registro a otro de los ubicados
dentro de la CPU. Y si los operandos se hallan en memoria pues debe calcular la
direccin de memoria de acuerdo al modo de direccionamiento usado y
referenciarlo en la memoria real.

Segn Rodrguez (1988:72), para el Intel 8086 las instrucciones de movimiento de
datos se dividen en las siguientes categoras:

- De propsito general
MOV: mover, transferir, copiar
PUSH: depositar palabra en la pila
POP: recuperar palabra de la pila
XCHG: intercambiar operandos

- De entrada/salida
IN: entrada de byte o palabra desde un puerto de entrada
OUT: salida de byte o palabra mediante un puerto de salida

- De transferencia de direcciones
LEA: cargar direccin efectiva o real.
LDS: cargar el puntero utilizando el registro DS
LES: cargar el puntero utilizando el registro ES

- De transferencia de banderas
LAHF: cargar AH con las banderas
POPF: recuperar banderas de la pila.
PUSHF: depositar banderas en la pila
SAHF: almacenar AH en banderas


2
A continuacin veremos las instrucciones de propsito general solamente, ya que
las de entrada/salida, por ejemplo, se vern en una leccin posterior:

Instruccin MOV: mover datos
Descripcin Transfiere datos entre dos registros o entre un registro y
memoria, enva datos inmediatos a memoria o registro.
Banderas No afecta
Formato MOV {registro/memoria},{registro/memoria/inmediato}
Ejemplo MOV AX, 5BF2H
Tabla N 6.1 Instruccin MOV (Fuente: Fernndez, 1998)

En la Tabla N 6.1 se observa el direccionamiento inmediato con la instruccin MOV
que carga directamente el dato en un registro, como en el ejemplo siguiente:

MOV AX, 0 ; copia el valor 0 en el registro AX.

A continuacin se observan otros ejemplos:

Lenguaje ensamblador Tamao Operacin
MOV BL, 44H 8 bits copia un 44 hexadecimal en registro BL
MOV AX, 44H 16 bits copia un 0044 hexadecimal en AX
MOV SI, 0 16 bits copia un 0000H en SI
MOV CL, 11001110B 8 bits copia un 11001110 binario en CL

En direccionamiento por registro, que es el modo de direccionamiento ms conocido
y fcil de aplicar, existen gran cantidad de variantes debido al nmero de registros
del microprocesador. A continuacin algunos ejemplos:

Lenguaje ensamblador Tamao Operacin
MOV AL, BL 8 bits copia el contenido de BL en AL
MOV AX, CX 16 bits copia el contenido de CX en AX
MOV SI, DI 16 bits copia el contenido de DI en SI
MOV SP, BP 156 bits copia el contenido de BP en SP.

En direccionamiento directo, se transfiere el contenido de una posicin de memoria
hacia un registro. Algunos ejemplos son:

Lenguaje ensamblador Tamao Operacin
MOV AH, NUMERO 8 bits copia el contenido del byte localizado en
la posicin de memoria NUMERO en AH
MOV POSIC1, CX 16 bits copia el contenido de CX en la posicin de
Memoria POSIC1
MOV AX, NUMERO 16 bits copia el contenido de la palabra ubicada
en posicin de memoria NUMERO en AX

En el direccionamiento indirecto por registro, es posible direccionar cualquier
posicin de memoria mediante una direccin contenida en un registro. Ejemplos:

Lenguaje ensamblador Tamao Operacin
MOV DX, [AX] 16 bits copia en DX el contenido de la direccin
de memoria dada por AX
MOV [DI], CL 8 bits copia el contenido de CL en la posicin de
memoria dada por DI.
MOV [DI], CX 16 bits copia el contenido de CX en la posicin de
Memoria dada por DI.

3
Observe que el contenido de AX es diferente al contenido de [AX]. En el primer
caso se refiere al dato contenido en el mismo registro AX, en cambio en el segundo
caso, en AX se halla guardada una direccin a la que debe dirigirse para conseguir
el dato, por ejemplo si AX=0067 y la posicin de memoria 0067 = 234F, entonces:
MOV BX, AX significa cargar el nmero 0067 en el registro BX
MOV BX, [AX] significa que debe dirigirse a la posicin de memoria 0067 para sacar
el dato 234F y cargarlo en el registro BX.

En direccionamiento de registro base ms ndice se transfiere el contenido de o
hacia una posicin de memoria, luego de hacer unos clculos adicionando el
registro base al desplazamiento determinado por el registro ndice. Ejemplos:

Lenguaje ensamblador Tamao Operacin
MOV AX, [BX + DI] 16 bits copia en AX el contenido de la palabra de
la posicin de memoria dada por BX+DI
MOV [BX + SI], SP 16 bits copia el contenido de SP en la posicin de
memoria dada por BX + SI
MOV AH, [BX + DI] 8 bits copia en AH el contenido de la posicin de
memoria dada por BX + DI

En direccionamiento relativo a registro base, ste puede ser BP o BX. La posicin de
memoria a acceder se calcula adicionando el desplazamiento al registro base como
en los ejemplos siguientes:

Lenguaje ensamblador Tamao Operacin
MOV AX, [BX + 5] 16 bits copia en AX el contenido de la posicin de
memoria dada por BX + 5
MOV [BP + 5], AX 16 bits copia el contenido de AX en la posicin de
memoria determinada por BP + 5

En direccionamiento relativo a un registro ndice sucede algo similar a las
operaciones con el registro ndice. Ejemplos:
Lenguaje ensamblador Tamao Operacin
MOV AX, [SI + 2] 16 bits copia en AX el contenido de la posicin de
memoria determinada por SI + 2
MOV [DI + 2], AX 16 bits copia AX en la posicin de memoria
determinada por DI + 2

Si el desplazamiento no existe en los dos ltimos modos, hablamos de
direccionamiento indirecto por registro base o por registro ndice.

Finalmente en relativo a base ms ndice, la posicin de memoria referenciada debe
calcularse mediante una operacin de suma de los contenidos de los registros base,
ndice ms un desplazamiento. Ejemplos:

Lenguaje ensamblador Tamao Operacin
MOV AX, [BX + SI + 4] 16 bits copia en AX el contenido de la posicin de
dada por BX + SI + desplazamiento
MOV [BP + DI + 4], AX 16 bits copia AX en la posicin de memoria
determinada por BP+DI+ desplazamiento

Las instrucciones MOV nos permiten conocer como el microprocesador funciona
transfiriendo datos entre sus registros internos y posiciones de memoria y
viceversa, al inicializar variables por ejemplo. Cabe resaltar tambin el nivel de
complejidad del funcionamiento interno de la CPU al realizar clculos matemticos
en los diferentes modos de direccionamiento mencionados anteriormente.

4
Otro tipo de instrucciones ampliamente utilizadas para almacenaje de resultados
intermedios en registros de pila son los mostrados en las Tablas N 6.2 y 6.3

Instruccin PUSH: guardar en la pila
Descripcin Guarda en la pila una palabra para su uso posterior. SP apunta
al tope de la pila; PUSH decrementa SP en 2 y transfiere la
palabra a SS:SP.
Banderas No afecta
Formato PUSH {registro/memoria}
Ejemplo PUSH AX
Tabla N 6.2 Instruccin PUSH (Fuente: Fernndez, 1998)


Instruccin POP: extrae una palabra de la pila
Descripcin Extrae de la pila una palabra previamente guardada y la enva
al destino especificado. SP apunta al tope de la pila; POP la
transfiere al destino especificado e incrementa SP en 2.
Banderas No afecta
Formato POP {registro/memoria}
Ejemplo POP AX
Tabla N 6.3 Instruccin POP (Fuente: Fernndez, 1998)

En la pila se almacena datos temporales, as como tambin direcciones de retorno
para los procedimientos o subrutinas. La memoria est organizada como una del
tipo LIFO, esto es, el ltimo en ingresar es el primero en salir. La instruccin PUSH
es la que los coloca en la pila y de ella se extraen con la instruccin POP. Ejemplos:

Lenguaje ensamblador Operacin
PUSH AX copia AX a la pila
PUSHF copia las banderas a la pila
PUSHA copia AX, CX, DX, BX, SP, BP, DI y SI en la pila.
POP AX extrae una palabra de la pila y la coloca en AX
POPA extrae datos de la pila y los coloca en SI, DI, BP, SP,
BX, DX, CX, AX


La funcionalidad de la instruccin XCHG, mostrada en la Tabla N 6.4, reside en el
rpido intercambio de contenidos entre el registro fuente y el registro destino.

Instruccin XCHG: intercambia datos
Descripcin Intercambia datos entre registros o entre registro y memoria
Banderas No afecta
Formato XCHG {registro/memoria}, {memoria/registro}
Ejemplo XCHG BX, AX
Tabla N 6.4 Instruccin XCHG (Fuente: Fernndez, 1998)


6.2 Ejercicios resueltos.

Ejercicio 1.
Se desea implementar un programa en lenguaje ensamblador que inicialice los
registros generales del microprocesador de la siguiente manera AX=45F3H,
BX=AA01H, CX=1237H y DX=4DC1H. Los nmeros son hexadecimales.

Solucin.-
5
De la teora estudiada en esta unidad se conoce que existen instrucciones que
transfieren datos entre registros y posiciones de memoria, y tambin de manera
inmediata, esto es, de asignacin inmediata.
La instruccin a utilizar es MOV en el modo de direccionamiento inmediato, as
ORG
MOV AX, 45F3H
MOV BX, AA01H
MOV CX, 1237H
MOV DX, 4DC1H
END


Ejercicio 2.
Cul es el contenido del registro AX, luego de correr este programa?
ORG
MOV AX, 45F3H
MOV BX, AA01H
MOV CX, 1237H
MOV DX, 4DC1H
MOV DX, BX
MOV AX, BX
END
Solucin.-
Ejecutando el programa paso o paso se obtiene lo siguiente:
ORG ; inicio del programa
MOV AX, 45F3H ; AX =45F3H
MOV BX, AA01H ; BX= AA01H
MOV CX, 1237H ; CX= 1237H
MOV DX, 4DC1H ; DX= 4DC1H
MOV DX, BX ; BX se carga en DX: DX= AA01H
MOV AX, BX ; AX= AA01H
END
Finalmente el contenido del registro AX = AA01H


Ejercicio 3.
Si BX=AA01H, SI=1000H y el contenido de la posicin de memoria BA05 = 0020H,
cul es el resultado en AX luego de correr el siguiente programa?
ORG ; inicio del programa
MOV AX, 45F3H ; AX =45F3H
MOV BX, AA01H ; BX= AA01H
MOV SI, 1000H ; SI= 1000H
MOV DX, 4DC1H ; DX= 4DC1H
MOV DX, BX ; BX se carga en DX: DX= AA01H
MOV AX, [BX+SI+4] ; AX= 0020H
END
Solucin.-
Ejecutando el programa lnea por lnea, se obtiene:
ORG ; inicio del programa
MOV AX, 45F3H ; AX =45F3H
MOV BX, AA01H ; BX= AA01H
MOV SI, 1000H ; SI= 1000H
MOV DX, 4DC1H ; DX= 4DC1H
MOV DX, BX ; BX se carga en DX: DX= AA01H
MOV AX, [BX+SI+4] ; [BX+SI+4] =[BA05] y el contenido de esa
END posicin de memoria es 0020
As, finalmente AX = 0020.
6