You are on page 1of 9

LABORATORIO DE MICROPROCESADORES

Microprocesadores de la arquitectura x86

PRCTICA 3
Ensamblador MASM
Objetivo
Al
1.
2.
3.
4.

terminar esta prctica, el alumno ser capaz de:


Ensamblar un programa usando el ensamblador MASM.
Conocer los diferentes archivos generados por el ensamblador y ligador.
Analizar un programa con CODEVIEW
Usar Programacin Estructurada.

Contenido
El programa ensamblador MASM.
El depurador CODEVIEW.
Declaracin de segmentos, variables y constantes.
Suma de enteros de 16 bits.
Aritmtica ASCII.
Mensaje de bienvenida en pantalla de texto.

Semana del 16 al 20 de Noviembre del 2015

MASM Y CODEVIEW
Introduccin
EL PROGRAMA MASM
El Macro Assembler (MASM) versin 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 mquina virtual. Para editar el programa fuente usar el editor de
texto notepad++. Guardar el programa fuente con extensin .ASM, por ejemplo P1.ASM,
donde P1 representa el nombre del archivo fuente.
Archivos generados por el ensamblador:

MASM toma el archivo de cdigo fuente y crea un archivo con cdigo objeto con
extension .OBJ.
LINK toma uno o varios archivos de cdigo 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 tambin un archivo con extension .LST que contiene tanto el cdigo
fuente como el cdigo de mquina de cada instruccin.

Para ensamblar en modo real use el comando make16 (genera cdigo de mquina para
procesadores de 16 bits). Antes de ejecutar el comando make16 asegrese 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 CODEVIEW
El programa CODEVIEW es mucho ms amigable que DEBUG, permite fcilmente hacer el
seguimiento a la ejecucin 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 lnea de comandos del MSDOS. Por ejemplo para analizar el
programa P0 en carpeta de trabajo PRCTICAS, el comando es:
C:\masm615>PRACTICAS> CV P0.EXE enter
Esto lleva a memoria el archivo ejecutable P0.EXE para su correspondiente anlisis como se
puede apreciar en la foto mostrada abajo. CODEVIEW muestra una ventana de cdigo, 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 pestaa 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. Despus de abrir la ventana de memoria, con
el ratn se debe editar la direccin (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 pestaa RUN. Para la ejecucin
paso a paso use la tecla F8 o F10. A medida que se avanza con el programa, codeview marca

contraste lumnico en los registros y localidades de memoria con la ejecucin de


instrucciones que las afectan.

***************************************************************************

PRCTICA 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
; Descripcin: Declaracin de segmentos, variables, constantes y movimiento de datos. El
; programa usa la funcin 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
; Declaracin 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
?
; Declaracin de constantes

CONST1
CONST2

EQU
EQU

53556
0ACE148CDH
.CODE ; segmento de cdigo
PRINCIPAL PROC FAR
MOV AX, @DATA
MOV DS, AX
MOV BX, VAR4
MOV CX, VAR1+2
ADD CX, VAR1+3
MOV BH, VAR3+2
MOV AX, 04567h
MOV VAR4, AX
MOV DL, VAR3
MOV DX, CONST1
MOV VAR9, CONST2
MOV AX, VAR2+2
ADD AX, VAR2+5
MOV VAR2+10, AX
MOV VAR7, AL
MOV AX, VAR8+8
SUB
AX, VAR8
MOV VAR8+4, AX
CALL SALIR; regresa a MSDOS
NOP
RET
PRINCIPAL ENDP
; Subrutina SALIR
SALIR
PROC NEAR
MOV AX, 4C00H; funcin 4CH en registro AH
INT
21H; ejecuta regreso a MSDOS
RET
SALIR
ENDP
END PRINCIPAL
Ensamble P1 con: MAKE16 P1 enter.
Con el editor de texto abra el archivo P1.LST y conteste las preguntas siguientes:
1. Cul es el desplazamiento (offset) de la variable VAR8?
2. Cul es el cdigo de mquina de la instruccin ADD CX, VAR1 + 3?
3. Cul es el cdigo de mquina de MOV VAR2+10, AX?
4. Cul 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
continuacin:

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. Cul es el contenido de DS despus de ejecutar MOV DS, AX?
6. Cul es el contenido de CX despus de ejecutar ADD CX, VAR1 + 3?
7. Cul es el contenido de BH despus de ejecutar MOV BH, VAR3 + 2?
8. Cul es el contenido de VAR9 despus de ejecutar MOV VAR9, CONST2?
9. Cul es el contenido de la variable VAR2+10 despus de ejecutar MOV VAR2+10,
AX?
10. Cul es el contenido de la variable VAR8+4 despus de ejecutar MOV VAR8+4, AX?
Nota: Incluya en su reporte el listado de P1.asm editado con notepad++.

EJERCICIO 2:
Edite y ensamble P2.ASM. Ejecute paso a paso en CODEVIEW.
;**********************************************************************
; Programa: P2.ASM
; Descripcin: 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 datos
ORG 300H
ARREGLO
DW
1234H, 5678H, 1A24H, 4B56H, 500, 1024
CNT
DW
5
SUMA
DW
?
.CODE ; segmento de cdigo
INICIO:
MOV AX, @DATA
MOV DS, AX
MOV CX, CNT
MOV BX, OFFSET ARREGLO
MOV AX, 0
BUCLE:
ADD AX, WORD PTR [BX]
INC
BX
INC
BX
DEC
CX
JNZ
BUCLE
MOV SUMA, AX
MOV AX, 4C00H
INT
21H
END INICIO; Fin del programa fuente.
Ensamble P2, luego con el editor de texto abra el archivo P2.LST y conteste las
preguntas.
1.
2.
3.
4.

Escriba el OFFSET del elemento 500 de ARREGLO:


Escriba el OFFSET de la instruccin MOV CX, CNT:
Escriba el OFFSET de la variable SUMA:
Observe el cdigo de mquina de MOV AX, @DATA.
Usted ver B8 - - - - R. Esto se debe a que el smbolo @DATA representa la direccin
de segmento que no se conoce hasta que el programa se lleva a memoria para su
ejecucin.
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 anlisis.
Con F10 ejecute paso a paso y conteste las preguntas.
6. Cual es el contenido de BX despus de ejecutar MOV BX, OFFSET ARREGLO?
7. Este valor inicial en BX Qu representa?
8. Cul es la direccin lgica inicial de ARREGLO?
9. Cul es la direccin lgica de la variable SUMA?
10. Cul es el contenido final de la variable SUMA?

La instruccin LOOP: La instruccin LOOP es el reemplazo de DEC y JNZ. La instruccin


LOOP primero decrementa CX (CX CX 1), luego salta a etiqueta si CX 0, con CX = 0 no
ejecuta el salto (sale del lazo).
Para evaluar ejercicio 2: Modifique P2.asm de tal forma que sume solamente los 4 ltimos
elementos de ARREGLO, adems implemente el BUCLE (lazo) con la instruccin 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
; Descripcin: Aritmtica ASCII. Suma nmeros de dos dgitos decimales codificados en
ASCII.
; Usa la instruccin AAA que genera BCD desempaquetado para facilitar la conversin a
cdigo ASCII
; Visualiza resultado en pantalla de texto.
; ******************************************************************************
.MODEL SMALL
.STACK
.DATA
SUMDO1
DB
34H, 32H ; SUMANDO1=42 codificado en ASCII
SUMDO2
DB
35H, 38H ; SUMANDO2=58 codificado en ASCII
SUMA
DB
4 DUP(?) ; reserva cuatro bytes para SUMA codificada en ASCII
.CODE
INICIO:
MOV AX, @DATA
MOV DS, AX
MOV AX, 0
MOV AL, SUMDO1+1
ADD AL, SUMDO2+1; suma dgitos menos significativos
; ajuste ascii despus de la suma, genera BCD desempaquetado
AAA
; convierte BCD desempaquetado en cdigo ASCII
ADD AX, 3030H
; preservar resultado ASCII en memoria
MOV SUMA, AL
MOV AH,0
STC
MOV AL,SUMDO1;suma dgitos ms significativos
ADC AL,SUMDO2
AAA
ADD AX,3030H; BCD desempaquetado a ASCII
MOV SUMA+1, AL
MOV SUMA+2, AH
; Visualiza resultado de la suma en pantalla de texto
MOV AH, 2
MOV DL, SUMA+2
INT
21H
MOV DL, SUMA+1
INT
21H
MOV DL, SUMA
INT
21H
; Termina el programa y regresa a MSDOS
MOV AX, 4C00H
INT
21H

END INICIO
Ensamble P3 y proceda con los pasos siguientes:
1. Cargar P3.exe en CODEVIEW.
2. Ejecute paso a paso (use F10) hasta apuntar la primera instruccin AAA, observe el
estado de
AX =
AF =
3. Ejecute la instruccin AAA y observe el estado de:
AX =
CF =
AF =
4. Continuar con la ejecucion paso a paso hasta apuntar la instruccin 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 aritmtica 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. Cul es el propsito de la instruccin ADD AX, 3030h?
9. Qu formato decimal (empaquetado o desempaquetado) genera la instruccin 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
; Descripcin: El programa visualiza en Pantalla un mensaje de bienvenida.
; Programacin 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 ; caractr de control carriage return
LF
EQU 0AH ; caractr 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, LF
DB 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
LPANT
MACRO
M, N ;limpia pantalla con atributo azul
MOV AX,0600H
MOV BH,1FH; atributo
MOV CX,M
MOV DX,N
INT
10H
ENDM
LVENT
MACRO
M,N ; ventana con atributo verde
MOV AX,0600H
MOV BH,2FH; atributo
MOV CX,M
MOV DX,N
INT
10H
ENDM
; Programa Principal.
PRINCIPAL PROC FAR
MOV AX, @DATA
MOV DS, AX
LPANT 0000H, 184FH; limpia toda la pantalla con atributo azul
LVENT 0000H, 094BH; genera ventana verde
CALL PCURSOR ; posiciona el cursor en la pantalla de texto
; Observe que la cadena termina con caractr 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=#col
MOV
BH,0;numero de pagina-normalmente 0
MOV
AH,2
INT
10H ; BIOS
RET
PCURSOR
ENDP
;******************************************************************************
DISPLAY
PROC NEAR
MOV
AH,9;muestra cadena de caracteres en pntalla
INT
21H; MSDOS
RET
DISPLAY
ENDP
;******************************************************************************
SALIR
PROC NEAR
MOV AX, 4C00H
INT
21H
RET
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.
Nota: Capture pantalla mostrando nueva posicin 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
7

BL

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

FIN PRCTICA

You might also like