Documente Academic
Documente Profesional
Documente Cultură
PRACTICA 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
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:
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.
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 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
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:
Direccionamiento Indirecto:
Ejercicio #2:
Con debug genere código de máquina de:
NOP
MOV [3518], AX
MOV CL, [3518]
MOV DX, [3518]
Resultados:
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.
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:
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.
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.
Ejercicio #5:
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
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