Sunteți pe pagina 1din 7

LABORATORIO DE MICROPROCESADORES

Microprocesadores de la arquitectura x86


PRCTICA 2
Modos de Direccionamiento de Datos
Objetivo
Al terminar esta prctica, el alumno ser capaz de usar los
mecanismos que tiene el CPU para acceder datos. A los diferentes
mecanismos de acceso se conocen como modos de
direccionamiento de datos.

Direccionamiento
Direccionamiento
Direccionamiento
Direccionamiento
Direccionamiento
Direccionamiento

por registro
inmediato
directo
indirecto
base relativo
indexado relativo

NOTA: Recuerde que cada grupo (2 estudiantes) debe crear una carpeta de trabajo
para cada prctica.
En directorio C: crear carpeta de trabajo P#G#, donde:
P es por Paralelo
# es nmero de paralelo
G es por Grupo
# es nmero de grupo
Por ejemplo: La carpeta P1G5 pertenece al Paralelo #1 Grupo #5, carpeta temporal
de trabajo para la prctica del da, la misma que deber ser borrada al finalizar la
prctica.

Semana del 26 al 30 de Mayo del 2014

INTRODUCCIN
El CPU puede acceder operandos (datos) de varias formas que se
conocen como modos de direccionamiento. El nmero de modos
de direccionamiento se determina cuando el procesador se disea
y no puede cambiarse. Los modos de direccionamiento son:
1
2
3
4
5
6
7

por registro
inmediato
directo
indirecto
base+ relativo
indexado+ relativo
base indexado + relativo

Direccionamiento por registro:


Este modo de direccionamiento involucra el uso de registros para el
almacenamiento de los datos que una instruccin procesa. En este
caso el CPU no accede memoria por lo que su ejecucin es muy
rpida. A continuacin tenemos algunos ejemplos:
MOV BX, DX; copia el contenido de DX en BX
MOV ES, AX; copia el contenido de AX en ES
ADD AL, BH; suma el contenido de BH al contenido de AL
Debe notarse que los registros fuente y destino deben coincidir en
tamao. Por ejemplo, MOV CL, AX marca error porque la fuente y
destino son de distinto tamao.
Direccionamiento inmediato:
Con este modo de direccionamiento el operando fuente es una
constante. Cuando la instruccin se ensambla el operando (dato) se
ubica inmediatamente despus del cdigo de operacin de la
instruccin. Por esta razn, este direccionamiento se ejecuta muy
rpido. Este modo de direccionamiento no se usa para cargar
informacin en los registros de segmento y en el registro de
banderas, pero s en todos los dems registros.
Ejemplos:
MOV AX, 89ABH; carga 89ABH em registro AX
MOV CX, 1BF6; carga el valor decimal 1BF6 en CX
MOV BL, E5H; carga E5H en BL.
Para cargar informacin en los registros de segmento, primero se
mueve el dato a uno de los registros de propsito general y de aqu
se carga el registro de segmento. Ejemplo:

MOV AX, 4567H


MOV DS, AX
MOV DS, 4567H; ilegal

Direccionamiento Directo:
En este modo de direccionamiento el dato reside en alguna localidad
de memoria cuya direccin se ubica inmediatamente despus del
cdigo de operacin de la instruccin, es decir, ahora la direccin del
dato forma parte del cdigo de mquina de la instruccin. Esta
direccin es un desplazamiento desde el origen del segmento, para
calcular la direccin fsica multiplicamos DS por 16 y luego sumamos
este desplazamiento. Ejemplo:
MOV DL, [0200]; mueve contenido de memoria DS: 0200H a DL
MOV [0210], AX; mueve contenido de AX a memoria DS: 0210H
Direccionamiento Indirecto:
En este modo de direccionamiento, la direccin de la localidad de
memoria del operando reside en un registro. Los registros usados
para este propsito son SI, DI, y BX. Estos registros actan como
punteros, y como tales siempre guardan el desplazamiento de
direccin de la localidad de memoria que almacena el operando
(dato), este desplazamiento se combina con DS para generar la
direccin fsica.
Ejemplos:
MOV AX, [BP]; carga AX con el contenido de memoria apuntada por
SS: BP.
MOV CL, [SI]; transfiere contenido de memoria DS: SI a registro CL
MOV [SI], AH; carga memoria DS: SI con el contenido de AH
Direccionamiento Base Relativo:
En este modo de direccionamiento, la direccin efectiva del dato se
calcula sumando a BX BP un valor numrico. Por defecto el
segmento de BX es DS y de BP es SS. Por ejemplo:
MOV CX, [BX]+10; mueve DS: BX+10 y DS: BX+10+1 a registro CX.
; PA=DSx16 + BX+10 para LSB.
; PA=DSx16 + BX+10+1 para MSB.
MOV AL, [BP]+5; mueve SS: BP+5 a registro AL.
; PA=SSx16 + BP+5
Para el ensamblador las tres instrucciones
equivalentes
MOV AL, [BP]+5
MOV AL, [BP+5]
MOV AL, 5[BP].
Direccionamiento Indexado Relativo:

siguientes

son

Este direccionamiento es similar al direccionamiento base relativo,


excepto que ahora usamos SI y DI ms un desplazamiento numrico
para el clculo de la direccin efectiva del dato.
Ejemplos:
MOV DX, [SI]+5; PA= DSx16 + SI +5
MOV CL, [DI] + 20; PA= DSx16 + DI + 20

PRCTICA LABORATORIO
Usando el programa DEBUG resolver los ejercicios siguientes, en lo
posible documente su trabajo mediante fotos de pantalla (use tecla
Imprimir Pantalla).
EJERCICIO 1:
Con Debug (comando A ensambla, comando U desensambla) obtenga
cdigo de mquina de las instrucciones siguientes:
MOV AX, 2EA9 Respuesta: _____________
# de bytes: _________
ADD AX, 346C Respuesta: _____________
# de bytes: _________
MOV CX, AX
Respuesta: _____________
#
de
bytes:
_________
MOV DH, AH
Respuesta: _____________
# de bytes: _________
MOV AH, 9B
Respuesta: _____________
# de bytes: _________
EJERCICIO 2:
Con debug genere cdigo de mquina de:
NOP
Respuesta: __________
MOV [0200], AX
Respuesta: __________
MOV CL, [0150]
Respuesta: __________
MOV BX, [5614]
Respuesta: __________

#
#
#
#

de
de
de
de

bytes:
bytes:
bytes:
bytes:

____
____
____
____

EJERCICIO 3:
Ensamble el siguiente programa en CS: 100 y ejecute paso a paso
con P.
NOP
MOV AX, 1500
MOV DS, AX
MOV AX, CDEF
MOV SI, 0200
MOV [SI], AX
INT 20
NOP
La instruccin MOV [SI], AX transfiere una palabra (dos bytes) a la
memoria de datos, llene la tabla con la direccin lgica y el contenido
de cada localidad de memoria afectada por su ejecucin, aplique el
ordenamiento del pequeo indio. Para visualizar datos use el
comando D.

Direccin Lgica (DS:


desplazamiento)

Contenido de memoria

Direccin menor
Direccin mayor

EJERCICIO 4:
Ensamble en CS: 100 el siguiente segmento de programa:
MOV AX, 1300
MOV DS, AX
MOV AX, 2000
MOV SS, AX
MOV BX, 0200
MOV SI, 0600
MOV BP, 0300
MOV AX, 678D
MOV [BX] +6, AX
INC
AX
MOV [SI]+8, AX
ADD AX, 7
INC
AX
MOV [BP]+10, AX
INT 20

Con comando P, ejecute el programa paso a paso. Con cada


instruccin examine los registros del CPU y tambin el valor de los
operandos que se encuentran en la memoria.
Para las tres instrucciones mostradas en la tabla calcule la direccin
efectiva EA asociada con el operando destino. Con comando D
visualice el contenido de memoria y llene la tercera columna de la
tabla con el valor del contenido de memoria correspondiente al
operando destino que demanda dos bytes en memoria.
Instruccin
MOV

[BX] +6, AX

MOV

[SI]+8, AX

MOV
AX

[BP]+10,

Direccin Lgica de
Operando Destino

Contenido de Memoria
(operando destino dos
bytes)

DS: EA
*EA=BX+6=
DS: EA
*EA=SI+8=
SS: EA
*EA=BP+10=

*EA= Direccin Efectiva del dato


EJERCICIO 5:
Directiva DB: Define en memoria datos tipo byte. Esta directiva DB del
ensamblador del DEBUG nos permite crear arreglos en el segmento de

datos, en este ejercicio creamos un arreglo de 9 bytes en el segmento


1000H: 0050H, en consecuencia inicialice DS con 1000H. El proceso de crear
un arreglo en el segmento de datos se ilustra a continuacin:
A DS: 0050 enter DB A1 B2 C3 D4 E5 F6 E8 00 00 enter.
Use la barra de espacio para separar el ingreso de cada uno de los 9 bytes,
la tecla enter valida el arreglo.
Visualice el arreglo con el comando D DS: 0050 L9 enter. El siguiente
segmento de programa usa el arreglo que acabamos de crear. Ensamble el
programa en CS: 100.
NOP
MOV AX, [050]
ADD AX, [052]
ADC AX, 5290
MOV [57], AX
MOV SI, 55
LDS AX, [SI]
NOP
MOV BX, 1000
MOV DS, BX
STC
INT 20
Con el comando P ejecute paso a paso el programa.
Despus de ejecutar LDS AX, [SI]:
AX=
DS=
Despus de ejecutar INT 20: visualice el arreglo de datos y escriba el
contenido final de las localidades siguientes en la memoria de datos:
DS: 55=
DS: 56=
DS: 57=
DS: 58=
Estado Final de CF=
(bandera de acarreo)

EJERCICIO 6:

Ingrese al segmento de cdigo las instrucciones siguientes, use A CS:


0100.
CS:
CS:
CS:
CS:
CS:
CS:
CS:
CS:
CS:
CS:
CS:

0100
0101
0104
0106
0108
010B
010D
0110
0112
0114
0118

NOP
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
ADD
DEC

AX, 1000
DS, AX
AL, 0A
[0150], AL
AL, CC
[0151], AL
AL, 20
CL, 0A
AL, [0150]
CL

CS:
CS:
CS:
CS:
CS:
CS:
CS:

011A
011C
011E
0121
0125
0129
012A

JNZ
MOV
MOV
MOV
SUB
INT
NOP

0114; implementa un lazo


BH, AL
[0151], AL
CL, [0151]
CL, [0150]
3
; ruptura (breakpoint)

Antes de ejecutar el programa verifique IP=100H y tambin la presencia de


la instruccin INT 3 (punto de ruptura) en el programa.
Corra el programa con: G ENTER.
Cul es el valor hexadecimal final de:
DS: 0150=
DS: 0151=
Registro CL=
?
************************************************************

FN DE PRCTICA

S-ar putea să vă placă și