11
LABORATORIO DE MICROPROCESADORES Microprocesadores de la arquitectura x86 PRÁCTICA 3 Ensamblador MASM Objetivo Al terminar esta práctica, el alumno será capaz de: 1. Ensamblar un programa usando el ensamblador MASM. 2. Conocer los diferentes archivos generados por el ensamblador y ligador. 3. Analizar un programa con CODEVIEW 4. Usar Programación Estructurada. Contenido El programa ensamblador MASM. El depurador CODEVIEW. Declaración de segmentos, variables y constantes. Suma de enteros de 16 bits. Aritmética ASCII. Mensaje de bienvenida en pantalla de texto. Semana del 16 al 20 de Noviembre del 2015

Practica 3 LAB DE MICROPRO

Embed Size (px)

DESCRIPTION

Las indicaciones de la practica que se desarrollara en el lab de la ESPOL

Citation preview

Page 1: Practica 3 LAB DE MICROPRO

LABORATORIO DE MICROPROCESADORESMicroprocesadores de la arquitectura x86

PRÁCTICA 3

Ensamblador MASM

ObjetivoAl terminar esta práctica, el alumno será capaz de:1. Ensamblar un programa usando el ensamblador MASM.2. Conocer los diferentes archivos generados por el ensamblador y ligador.3. Analizar un programa con CODEVIEW4. Usar Programación Estructurada.

Contenido El programa ensamblador MASM. El depurador CODEVIEW. Declaración de segmentos, variables y constantes. Suma de enteros de 16 bits. Aritmética ASCII. Mensaje de bienvenida en pantalla de texto.

Semana del 16 al 20 de Noviembre del 2015

Page 2: Practica 3 LAB DE MICROPRO

MASM Y CODEVIEWIntroducción

EL PROGRAMA MASM El Macro Assembler (MASM) versión 6.15, se encuentra instalado en el directorio C:\Masm615>, en la plataforma Windows XP Mode. Windows 7 → Windows Virtual PC → Windows XP Mode Los archivos de respaldo para editar, ensamblar y depurar se encuentran en el mismo directorio Masm615 en la máquina virtual. Para editar el programa fuente usar el editor de texto notepad++. Guardar el programa fuente con extensión .ASM, por ejemplo P1.ASM, donde P1 representa el nombre del archivo fuente.

Archivos generados por el ensamblador:

MASM toma el archivo de código fuente y crea un archivo con código objeto con extension .OBJ.

LINK toma uno o varios archivos de código objeto y produce un solo archivo ejecutable con extension .EXE

La version 6.0 del macroensamblador de Microsoft combina MASM y LINK en un solo commando.

MASM genera también un archivo con extension .LST que contiene tanto el código fuente como el código de máquina de cada instrucción.

Para ensamblar en modo real use el comando make16 (genera código de máquina para procesadores de 16 bits). Antes de ejecutar el comando make16 asegúrese de tener una copia de MAKE16.BAT en su directorio de trabajo. El comando para ensamblar es:

C:\Masm615> P#G#>make16 P1 enter

EL PROGRAMA CODEVIEWEl programa CODEVIEW es mucho más amigable que DEBUG, permite fácilmente hacer el seguimiento a la ejecución de instrucciones y los cambios que ocurren tanto en el segmento de datos como en el grupo de registros de trabajo del microprocesador.CODEVIEW se ejecuta desde la línea de comandos del MSDOS. Por ejemplo para analizar el programa P0 en carpeta de trabajo PRÁCTICAS, el comando es:

C:\masm615>PRACTICAS> CV P0.EXE enter

Esto lleva a memoria el archivo ejecutable P0.EXE para su correspondiente análisis como se puede apreciar en la foto mostrada abajo. CODEVIEW muestra una ventana de código, una ventana de comandos, una ventana de memoria 1 y una ventana de registros. Si no aparecen todas las ventanas deseadas use el menú de la pestaña Windows y habilite la ventana requerida.Siempre es conveniente que la ventana de memoria muestre el contenido del segmento de datos de su programa, de tal forma que se pueda hacer el seguimiento a los cambios que ocurran con los datos residentes en memoria. Después de abrir la ventana de memoria, con el ratón se debe editar la dirección (SEGMENT: OFFSET) de los datos de tal manera que se los pueda visualizar en pantalla.Para el RESET o para ANIMACION del programa haga clic en la pestaña RUN. Para la ejecución paso a paso use la tecla F8 o F10. A medida que se avanza con el programa, codeview marca contraste lumínico en los registros y localidades de memoria con la ejecución de instrucciones que las afectan.

Page 3: Practica 3 LAB DE MICROPRO

***************************************************************************PRÁCTICA LABORATORIO

Usando el programa ensamblador MASM, CODEVIEW y el editor de texto notepad++ resolver los ejercicios siguientes, documente su trabajo mediante fotos de pantalla (use tecla Imprimir Pantalla).

EJERCICIO 1:Edite y ensamble P1. Ejecute paso a paso en CODEVIEW.; *********************************************************************************; Programa: P1.ASM; Descripción: Declaración de segmentos, variables, constantes y movimiento de datos. El; programa usa la función 4CH de MSDOS que permite salir, es decir regresar al nivel de comandos; de MSDOS. ; ********************************************************************* .MODEL SMALL

.386 .STACK 64H ; Reserva 100 bytes para Stack .DATA ; Declaración de variables VAR1 DW 10, 20, 30, 40, 50,120, 70, 200, 215, 150 VAR2 DW 8H,10H,16H,20H,30H,40H,50H,60H,64H,0F1H,0D2H,0B5H VAR3 DB “12345ABCD” VAR4 DW 0AFEDH VAR5 DD 89AB12A6H VAR6 DD 2468ACEAH VAR7 DB ? VAR8 DW 30, 5436H, ?, 74H, 28ABH VAR9 DD ? ; Declaración de constantes CONST1 EQU 53556 CONST2 EQU 0ACE148CDH

Page 4: Practica 3 LAB DE MICROPRO

.CODE ; segmento de códigoPRINCIPAL PROC FAR MOV AX, @DATA MOV DS, AX MOV BX, VAR4

MOV CX, VAR1+2ADD CX, VAR1+3MOV BH, VAR3+2

MOV AX, 04567hMOV VAR4, AXMOV DL, VAR3

MOV DX, CONST1MOV VAR9, CONST2

MOV AX, VAR2+2ADD AX, VAR2+5MOV VAR2+10, AXMOV VAR7, ALMOV AX, VAR8+8SUB AX, VAR8MOV VAR8+4, AXCALL SALIR; regresa a MSDOSNOPRET

PRINCIPAL ENDP; Subrutina SALIRSALIR PROC NEAR

MOV AX, 4C00H; función 4CH en registro AHINT 21H; ejecuta regreso a MSDOSRET

SALIR ENDPEND PRINCIPAL

Ensamble P1 con: MAKE16 P1 enter.

Con el editor de texto abra el archivo P1.LST y conteste las preguntas siguientes:1. ¿Cuál es el desplazamiento (offset) de la variable VAR8?2. ¿Cuál es el código de máquina de la instrucción ADD CX, VAR1 + 3?3. ¿Cuál es el código de máquina de MOV VAR2+10, AX?4. ¿Cuál es el desplazamiento offset de la variable VAR9?

;**********************************************************************************

En su directorio de trabajo P#G#> escriba el comando cv P1.exe como se ilustra a continuación:

CV P1.EXE enter puede excluir la extension .EXE

Este comando carga P1.EXE en la memoria para ejecutarlo con el depurador CODEVIEW. Con tecla F10 ejecute el programa paso a paso y conteste las preguntas siguientes:

5. ¿Cuál es el contenido de DS después de ejecutar MOV DS, AX?6. ¿Cuál es el contenido de CX después de ejecutar ADD CX, VAR1 + 3?7. ¿Cuál es el contenido de BH después de ejecutar MOV BH, VAR3 + 2?8. ¿Cuál es el contenido de VAR9 después de ejecutar MOV VAR9, CONST2?9. ¿Cuál es el contenido de la variable VAR2+10 después de ejecutar MOV VAR2+10,

AX? 10. ¿Cuál es el contenido de la variable VAR8+4 después de ejecutar MOV VAR8+4, AX?

Nota: Incluya en su reporte el listado de P1.asm editado con notepad++.

Page 5: Practica 3 LAB DE MICROPRO

EJERCICIO 2:Edite y ensamble P2.ASM. Ejecute paso a paso en CODEVIEW.;**********************************************************************; Programa: P2.ASM; Descripción: Suma enteros de 16 bits residentes en memoria de datos definidos en ARREGLO, deja; el resultado en la variable SUMA. ;**********************************************************************

TITLE Suma elementos de ARREGLO..MODEL SMALL.STACK 200.DATA; segmento de datosORG 300H

ARREGLO DW 1234H, 5678H, 1A24H, 4B56H, 500, 1024CNT DW 5SUMA DW ?

.CODE; segmento de código INICIO: MOV AX, @DATA MOV DS, AX

MOV CX, CNTMOV BX, OFFSET ARREGLOMOV AX, 0

BUCLE: ADD AX, WORD PTR [BX]INC BXINC BXDEC CXJNZ BUCLEMOV SUMA, AXMOV AX, 4C00HINT 21HEND INICIO; Fin del programa fuente.

Ensamble P2, luego con el editor de texto abra el archivo P2.LST y conteste las preguntas.

1. Escriba el OFFSET del elemento 500 de ARREGLO: 2. Escriba el OFFSET de la instrucción MOV CX, CNT: 3. Escriba el OFFSET de la variable SUMA: 4. Observe el código de máquina de MOV AX, @DATA.

Usted verá “B8 - - - - R“. Esto se debe a que el símbolo @DATA representa la dirección de segmento que no se conoce hasta que el programa se lleva a memoria para su ejecución.

5. ¿Por qué son necesarias las dos primeras instrucciones del programa? MOV AX, @ DATA y MOV DS, AX. Cargar P2.EXE en CODEVIEW para su análisis.Con F10 ejecute paso a paso y conteste las preguntas.

6. ¿Cual es el contenido de BX después de ejecutar MOV BX, OFFSET ARREGLO?7. Este valor inicial en BX ¿Qué representa?8. ¿Cuál es la dirección lógica inicial de ARREGLO?9. ¿Cuál es la dirección lógica de la variable SUMA?10. ¿Cuál es el contenido final de la variable SUMA?

La instrucción LOOP: La instrucción LOOP es el reemplazo de DEC y JNZ. La instrucción LOOP primero decrementa CX (CX ← CX – 1), luego salta a etiqueta si CX ≠ 0, con CX = 0 no ejecuta el salto (sale del lazo).

Page 6: Practica 3 LAB DE MICROPRO

Para evaluar ejercicio 2: Modifique P2.asm de tal forma que sume solamente los 4 últimos elementos de ARREGLO, además implemente el BUCLE (lazo) con la instrucción LOOP en reemplazo de las dos instrucciones DEC CX y JNZ BUCLE. Ejecute paso a paso con F8 hasta salir de BUCLE y verifique la nueva suma.

Nota: Capture pantalla mostrando el nuevo resultado de SUMA. Incluya en reporte el listado de P2.asm modificado y editado con notepad++. EJERCICIO 3:Edite y ensamble P3. Ejecute paso a paso en CODEVIEW.; ******************************************************************************; Programa: P3.ASM; Descripción: Aritmética ASCII. Suma números de dos dígitos decimales codificados en ASCII. ; Usa la instrucción AAA que genera BCD desempaquetado para facilitar la conversión a código ASCII; Visualiza resultado en pantalla de texto.; ******************************************************************************

.MODEL SMALL

.STACK

.DATASUMDO1 DB 34H, 32H ; SUMANDO1=42 codificado en ASCIISUMDO2 DB 35H, 38H ; SUMANDO2=58 codificado en ASCIISUMA DB 4 DUP(?) ; reserva cuatro bytes para SUMA codificada en ASCII

.CODEINICIO: MOV AX, @DATA

MOV DS, AXMOV AX, 0MOV AL, SUMDO1+1ADD AL, SUMDO2+1; suma dígitos menos significativos

; ajuste ascii después de la suma, genera BCD desempaquetadoAAA

; convierte BCD desempaquetado en código ASCII ADD AX, 3030H

; preservar resultado ASCII en memoriaMOV SUMA, ALMOV AH,0STCMOV AL,SUMDO1;suma dígitos más significativosADC AL,SUMDO2AAAADD AX,3030H; BCD desempaquetado a ASCIIMOV SUMA+1, ALMOV SUMA+2, AH

; Visualiza resultado de la suma en pantalla de textoMOV AH, 2MOV DL, SUMA+2INT 21HMOV DL, SUMA+1INT 21HMOV DL, SUMAINT 21H

; Termina el programa y regresa a MSDOSMOV AX, 4C00HINT 21HEND INICIO

Ensamble P3 y proceda con los pasos siguientes:

1. Cargar P3.exe en CODEVIEW.

Page 7: Practica 3 LAB DE MICROPRO

2. Ejecute paso a paso (use F10) hasta apuntar la primera instrucción AAA, observe el estado deAX = AF =

3. Ejecute la instrucción AAA y observe el estado de:AX = CF = AF =

4. Continuar con la ejecucion paso a paso hasta apuntar la instrucción MOV AH, 2. Verifique el contenido de la variable SUMA (SUMA, SUMA+1 Y SUMA+2) en segmento de datos y escriba el contenido de las localidades de memoria:SUMA= SUMA+1= SUMA+2=

5. Salga de CODEVIEW y ejecute el programa desde MSDOS. Verifique la suma en pantalla y escriba su valor. Mediante aritmética decimal (base 10) confirme el valor de la suma.

6. En el segmento de datos modifique el valor de SUMDO1= 62 (base 10) y SUMDO2=56 (base 10) codificados en ASCII.

7. Repita los pasos del 1 al 5.8. ¿Cuál es el propósito de la instrucción ADD AX, 3030h? 9. ¿Qué formato decimal (empaquetado o desempaquetado) genera la instrucción AAA en

registro AX?

Nota: Incluya en su reporte el listado de P3.asm editado con notepad++.

EJERCICIO 4:Edite, ensamble y ejecute P4.; *********************************************************************************; Programa: P4.ASM; Descripción: El programa visualiza en Pantalla un mensaje de bienvenida.; Programación estructurada: El programa principal invoca macros y llama subrutinas. Los macros y; Subrutinas usan funciones de ROMBIOS y MSDOS. ; Macros: ; LPANT limpia pantalla de texto con atributo azul.; LVENT limpia ventana con atributo verde.; Subrutinas: ; PCURSOR posiciona cursor en pantalla de texto.; DISPLAY visualiza cadena de caracteres en pantalla. ; SALIR regresa al nivel de comandos del MSDOS.; Estudiar: Funciones 02H, 06H de ROMBIOS y las funciones 09H, 0CH de MSDOS.;; *********************************************************************************

TITLE Visualizar en pantalla mensaje de bienvenida..MODEL SMALL.STACK 64.DATA

CR EQU 0DH ; caractér de control “carriage return”LF EQU 0AH ; caractér de control “line feed”MENSAJE DB 2AH, 20H,’EJERCICIO 4’,CR,LF,LF

DB 2AH, 20H, ‘Bienvenidos al Lab de Microprocesadores’ DB 20H,02H,01H,02H,01H,02H,01H,CR,LF, LFDB 2AH, 20H, ‘Arquitectura Interna de los MICPs xx86 +’ DB ‘ Ensamblador MASM version 6.15.’, CR, LF, LF

DB 2AH, 20H, ‘Disfruten la Programacion en Lenguaje Ensamblador. ‘, CR, LF, LF, LF, LF, ’$’

.CODE; listado de macros

Page 8: Practica 3 LAB DE MICROPRO

LPANT MACRO M, N ;limpia pantalla con atributo azulMOV AX,0600HMOV BH,1FH; atributoMOV CX,MMOV DX,NINT 10HENDM

LVENT MACRO M,N ; ventana con atributo verdeMOV AX,0600HMOV BH,2FH; atributoMOV CX,MMOV DX,NINT 10HENDM

; Programa Principal.PRINCIPAL PROC FAR

MOV AX, @DATAMOV DS, AXLPANT 0000H, 184FH; limpia toda la pantalla con atributo azulLVENT 0000H, 094BH; genera ventana verdeCALL PCURSOR ; posiciona el cursor en la pantalla de texto

; Observe que la cadena termina con caractér especial $.LEA DX, MENSAJE ; carga EA inicial de la cadena de caracteres en DX.CALL DISPLAY ; visualiza en pantalla de texto la cadena de caracteres.CALL SALIR

PRINCIPAL ENDP

; listado de subrutinas;******************************************************************************PCURSOR PROC NEAR

MOV DX, 0;DH=#fila, DL=#colMOV BH,0;numero de pagina-normalmente 0MOV AH,2INT 10H ; BIOSRET

PCURSOR ENDP;******************************************************************************DISPLAY PROC NEAR

MOV AH,9;muestra cadena de caracteres en pntallaINT 21H; MSDOSRET

DISPLAY ENDP;******************************************************************************SALIR PROC NEAR

MOV AX, 4C00HINT 21HRET

SALIR ENDP;******************************************************************************

END PRINCIPAL

Ejecute P4: Observe que el texto del mensaje aparece en ventana de color verde con caracteres en color blanco, la ventana verde se inicia en fila #0 - columna #0 y termina en la fila #9 - columna #75, es decir sin margen superior y sin margen izquierdo. Para evaluar ejercicio 4: Modifique el programa de tal forma que la ventana verde con el mensaje de bienvenida se reubique en pantalla con un margen superior de 8 filas y un margen izquierdo de 4 columnas, mantenga en color azul el fondo de la pantalla de texto.

Page 9: Practica 3 LAB DE MICROPRO

Nota: Capture pantalla mostrando nueva posición de la ventana verde con su mensaje de bienvenida. Incluya en reporte el listado de P4.asm modificado y editado con notepad++.

BYTE ATRIBUTO DE COLORES

7BL

6R

5G

4B

3I

2R

1G

0

B

;******************************************************************************

FIN PRÁCTICA