Sunteți pe pagina 1din 16

UNIVERSIDAD ESTATAL PENÍNSULA DE SANTA ELENA

FACULTAD DE SISTEMAS Y TELECOMUNICACIONES

ESCUELA DE ELECTRÓNICA Y TELECOMUNICACIONES

PRACTICA 2:

Modos de Direccionamiento de Datos 2

MATERIA:

Microprocesadores

GRUPO:

 Cristian Marcatoma
 Johnny Merchán

PROFESOR(a):
MSC. ELSY VILLAMAR

CURSO:
8° SEMESTR
CARRERA CICLO CODIGO NOMBRE DE LA
ASIGNATURA
Electronica y 2017-1 EL075 Microprocesadores
Telecomunicaciones

PRACTICAS Microprocesadores DURACION


NOMBRE DE LA PRACTICA Modos de Direccionamiento de Datos 2 2h

PRACTICA 2

1 OBJETIVOS

 Identificar y familiarizarse con DEBUG que forma parte del sistema operativo MS-DOS bajo
Windows.
 Aprender a usarlo para examinar y alterar el contenido de: Modo de direccionamiento.
 Practicar para reforzar los conocimientos aprendidos.

2 FUNDAMENTO TEORICO

MODOS DE DIRECCIONAMIENTO
Los modos de direccionamiento indican la manera de obtener los operandos y son:
• Direccionamiento de registro
• Direccionamiento inmediato
• Direccionamiento directo
• Direccionamiento indirecto mediante registro
• Direccionamiento indirecto por registro base
• Direccionamiento indexado
• Direccionamiento indexado respecto a una base
El tipo de direccionamiento se determina en función de los operandos de la instrucción. La instrucción
MOV realiza transferencia de datos desde un operando origen a un operando destino (se verá más con
más detalle en los siguientes apartados). Su formato es el siguiente:

MOV destino, origen

Direccionamiento de registro
Cuando ambos operando son un registro.
Ejemplo:
MOV AX, BX; transfiere el contenido de BX en AX

Direccionamiento inmediato
Cuando el operando origen es una constante.
Ejemplo:
MOV AX,500; carga en AX el valor 500.
Direccionamiento directo
Cuando el operando es una dirección de memoria. Ésta puede ser especificada con su valor entre [], o
bien mediante una variable definida previamente (cómo definir etiquetas se verá más adelante).
Ejemplo:
MOV BX, [1000]; almacena en BX el contenido de la dirección de memoria DS:1000.
MOV AX, TABLA; almacena en AX el contenido de la dirección de memoria DS: TABLA.

Direccionamiento indirecto mediante registro


Cuando el operando esta en memoria en una posición contenida en un registro (BX, BP, SI o DI).
Ejemplo:
MOV AX, [BX]; almacena en AX el contenido de la dirección de memoria DS: [BX].

MOV [BP], CX; almacena en la dirección apuntada por BP en contenido de CX.

Direccionamiento por registro base


Cuando el operando esta en memoria en una posición apuntada por el registro BX o BP al que se le añade
un determinado desplazamiento
Ejemplo:
MOV AX, [BP] + 2; almacena en AX el contenido de la posición de
memoria que resulte de sumar 2 al contenido de BP
(dentro de segmento de pila). Equivalente a
MOV AX, [BP + 2]

Este tipo de direccionamiento permite acceder, de una forma cómoda, a estructuras de datos que se
encuentran en memoria.

Direccionamiento indexado
Cuando la dirección del operando es obtenida como la suma de un desplazamiento más un índice (DI, SI).
Ejemplo:
MOV AX, TABLA[DI]; almacena en AX el contenido de la posición de memoria apuntada por el resultado
de sumarle a TABLA el contenido de DI.

Direccionamiento indexado respecto a una base


Cuando la dirección del operando se obtiene de la suma de un registro base (BP o BX), de un índice (DI,
SI) y opcionalmente un desplazamiento.
Ejemplo:
MOV AX, TABLA[BX][DI]; almacena en AX el contenido de la posición de memoria apuntada por la suma
de TABLA, el contenido de BX y el contenido de DI.
3 PROCEDIMIENTO
3.1 EQUIPO
EQUIPO NECESARIO MATERIAL DE APOYO
 Computadora.  Practica digital
 Software DosBox  Pizarron
 Marcadores
 Proyector
3.2 DESARROLLO DE LA PRACTICA

Direccionamiento Directo:

En este modo de direccionamiento el dato reside en alguna localidad de memoria cuya dirección se
ubica inmediatamente después del código de operación de la instrucción, es decir, ahora la dirección
del dato forma parte del código de máquina de la instrucción. Esta dirección es un “desplazamiento”
desde el origen del segmento, para calcular la dirección física multiplicamos DS por 16 y luego sumamos
este desplazamiento. Ejemplo:
MOV DL, [2400]; mueve contenido de memoria DS: 2400H a DL
MOV [0500], AX; mueve contenido de AX a memoria DS: 0500H

Ejercicio #1: Como ejemplo.

Con debug (comando A ensambla, comando U desensambla) genere código de máquina de las
instrucciones siguientes:
MOV BX, 1234
MOV AX, BX
MOV BL, AL
MOV AX, ABCD
MOV AH, 1F
Resultados:

 MOV BX, 1234


Inicializamos el registro BX con el valor 1234H
 MOV AX, BX
Copiamos el valor de BX en AX
 MOV BL, AL
Copiamos lo que se encuentra en los 2 dígitos hexadecimales inferiores de BX en 2 dígitos
inferiores de AX
 MOV AX, ABCD
Colocamos en el registro AX el valor ABCDH
 MOV AH, 1F
Por último, en los 2 dígitos superiores de AX se colocará el valor 1FH

Instrucciones desensambladas (Número de bits por instrucción)

MOV AX, BX Respuesta: __89D8_______ # de bytes: ____2____


MOV BL, AL Respuesta: __88C3_______ # de bytes: ___2_____
MOV AX, ABCD Respuesta: __B8CDAB____ # de bytes: ____3____
MOV AH, 1F Respuesta: __B41F_______ # de bytes: ____2____

Direccionamiento Indirecto:

En este modo de direccionamiento, la dirección de la localidad de memoria del operando reside en un


registro. Los registros usados para este propósito son SI, DI, y BX. Estos registros actúan como punteros,
y como tales siempre guardan el desplazamiento de dirección de la localidad de memoria que almacena
el operando (dato), este desplazamiento se combina con DS para generar la dirección física.
Ejemplos:
MOV AL, [BX]; carga AL con el contenido de memoria apuntada por DS: BX. Note
; que BX esta entre corchetes.
MOV CL, [SI]; transfiere contenido de memoria DS:SI a registro CL
MOV [DI], AH; carga memoria DS:DI con el contenido de AH

Ejercicio #2:
Con debug genere código de máquina de:
NOP
MOV [3518], AX
MOV CL, [3518]
MOV DX, [3518]
Resultados:

Instrucciones desensambladas (Número de bits por instrucción)

MOV [3518], AX Respuesta: __A31835_______ # de bytes: ____3____


MOV CL, [3518] Respuesta: __8A0E1835_______ # de bytes: ___4_____
MOV DX, [3518] Respuesta: __8B161835____ # de bytes: ____4____

Direccionamiento Base – Relativo:


En este modo de direccionamiento, la dirección efectiva del dato se calcula sumando a BX ó BP un valor
numérico. 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

NOTA:
Las tres instrucciones
MOV AL, [BP]+5
MOV AL, [BP+5]
MOV AL, 5[BP]
son equivalentes.

Ejercicio #3:
Com debug obtenga código de máquina de:

MOV AL, [BX]


MOV [DI], AH
MOV AX, [SI]
Ensamble el siguiente programa en CS: 100 y ejecute paso a paso con P.
NOP
MOV AX, 1120
MOV DS, AX
MOV AX, 17FE
MOV SI, 2498
MOV [SI], AX
INT 20

Sabemos que la instrucción MOV [SI], AX transfiere a la memoria un dato tipo palabra (2 bytes). En la
tabla escriba (en su reporte no aquí) la dirección lógica de memoria y su contenido de cada byte de la
palabra transferida.

Dirección lógica →DS: desplazamiento Contenido de memoria


Dirección menor 2498H FE
Dirección mayor 2499H 17
Direccionamiento Indexado – Relativo:
Este direccionamiento es similar al direccionamiento base relativo, excepto que ahora usamos SI y DI
más un desplazamiento numérico para el cálculo de la dirección efectiva del dato. Ejemplos:
MOV DX, [SI]+5; PA= DSx16 + SI +5
MOV CL, [DI] + 20; PA= DSx16 + DI + 20

Ejercicio #4:
Ensamble el siguiente programa en CS: 100.
NOP
MOV AX, 4500
MOV DS, AX
MOV AX, 2000
MOV SS, AX
MOV BX, 2100
MOV SI, 1486
MOV DI, 8500
MOV BP, 7814
MOV AX, 2512
MOV [BX] +20, AX
INC AX
MOV [SI]+10, AX
ADD AX, 7
MOV [DI]+4, AX
INC AX
MOV [BP]+12, AX
INT 20
Confirme IP=100. Con comando “G enter” ejecute el programa. OJO: el programa debe terminar con la
instrucción INT 20.

Con comando D (visualiza en pantalla el contenido de memoria) determine el contenido de memoria para
las 4 instrucciones del programa fuente que se muestran en la tabla siguiente: Observe que: DS=4500,
SS=2000, BX=2100, SI=1486, DI=8500, BP=7814 y AX=2512.

INSTRUCCION DIRECCION LOGICA DE CONTENIDO DE MEMORIA


OPERANDO DESTINO
MOV [BX] +20, AX DS: EA 12H EN LA SIGUIENTE 25H
*EA=BX+20= 2120
MOV [SI]+10, AX DS: EA 13H EN LA SIGUIENTE 25H
*EA=SI+10= 1496
MOV [DI]+4, AX DS: EA 1AH EN LA SIGUIENTE 25H
*EA=DI+4= 8504

MOV [BP]+12, AX SS: EA 1BH EN LA SIGUIENTE 25H


*EA=BP+12=7826
.
*EA= Dirección Efectiva del dato

Ejercicio #5:

Directiva DB: Define datos tipo byte (8bits)


Use DEBUG para crear en memoria el arreglo de datos siguiente: 52, 56, A9, 3D, 59, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0.
El proceso se ilustra a continuación:

El siguiente programa usa el arreglo que se acaba de crear con la directiva DB.
Ensamble el programa en:

NOP
MOV AX, 2000
MOV DS, AX
MOV AX, [300]
ADD AX, [302]
ADD AX, 25
MOV [307], AX
MOV WORD PTR [30A], ABCD
MOV BYTE PTR [30D], FF
INT 20
A DS: 0300 enter
DS: 0300 DB 52, 56, A9, 3D, 59 ,0, 0,0,0,0,0,0,0,0,0,0 enter
Use la barra de espacio para el ingreso de los datos. Con enter sale.
Visualice el arreglo (enteros hexadecimales) con el comando D DS: 0300 enter.
Ejercicio #6:
Con el comando A CS: 0100 ingrese a memoria las líneas de código siguientes:
CS: 0100 NOP
CS: 0101 MOV AX, 2000
CS: 0104 MOV DS, AX
CS: 0106 MOV AL, 5
CS: 0108 MOV CL, 0A
CS: 010A ADD AL, [0100]
CS: 010E DEC CL
CS: 0110 JNZ 0105
CS: 0112 MOV BH, AL
CS: 0114 MOV [0101], AL
CS: 0118 INT 3 ; BREAKPOINT
CS: 0119 NOP
Con comando E ingrese a memoria el dato siguiente:

DS: 0100 8 FF
DS: 0101 FF

Corra el programa: -G = 100 enter.

¿Cuál es el valor hexadecimal final en BH = ____CD_______?


¿Cuál es el valor hexadecimal final en memoria DS: 0101= _____CD_____?
¿Cuál es el valor hexadecimal final en CL = _____00______?
5 Conclusiones y Bibliografia

6.1 Conclusiones

 Cada comando utilizado debe estar correcto para que el programa se ejecute correctamente,
ingresando los distintos comandos que interpretarán el lenguaje correspondiente, nos permite
visualizar en pantalla y entender lo que hace cada función que se ha empleado.

 Una desventaja es que hay momentos que estamos codificando y nos equivocamos en una línea
de codigo, no podemos regresar a corregirl el error, entonces tendremos que volver a comenzar
a codificar desde el inicio.

 Las funciones usadas nos permitieron examinar el contenido de la memoria, registro, estados e
instrucciones, cada dato que se transmite al ser evaluada cada línea de ingreso de datos del
ejercicio, esto nos brinda una mejor comprensión de como funcionan internamente los
microprocesadores.

 En el momento que colocamos CS igual al valor establecido por el ejercicio presentado, al dar
enter nos aparece un valor el cual se comienza a ensamblar las instrucciones nop, mov, int, entre
otras, llegando a un resultado final por cada registro, en este mismo podemos presentar solo el
dato que queremos saber mediante –R y la ubicación respectiva.

6.2 Bibliografia

 THE INTEL MICROPROCESSORS, Architecture, Programming and Interfacing. Barry B.


Brey. Prentice Hall.
 IBM PC ASSEMBLY LANGUAGE AND PROGRAMMING. Peter Abel. Prentice Hall.
 www.unitec.edu.ve/materiasenlinea/upload/T368-1-1.ppt

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