Вы находитесь на странице: 1из 14

Universidad Estatal Pennsula de Santa Elena

PRACTICA # 03
MASM y EMU8086
Suma de enteros de 16 bits
Aritmtica ASCII
Aritmtica BCD

Gabriel Romn Lanez.


INTRODUCCION: El Macro Assembler de Microsoft, se encuentra instalado en el
directorio C:\8086>, en la plataforma
Windows dosbox cmd mode
Para editar el programa fuente usar cualquier editor de texto: EDIT, NOTEPAD,
NOTEPAD2, TEXTPAD. Una vez editado guardarlo con extensin .ASM, por ejemplo
P1.ASM, donde P1 representa el nombre del programa fuente.
Para ensamblar en modo real, use el comando masm. Antes de ejecutar el comando
asegrese de tener una copia de masm.exe en su directorio de trabajo. El comando para
ensamblar es:
C:\8086\>masm P1.asm enter
Antes verifique que el archive se encuentre en la carpeta 8086
C:\8086> dir *.asm
*********************************************************************
EJERCICIO 1: SUMA DE ENTEROS DE 16 BITS.
*********************************************************************
assume cs:code,ds:data
data segment
opr1 dw 1144h
opr2 dw 3322h
result db 02 dup(?)
data ends
code segment
org 0100h ;nos colocamos en un segmento de memoria
start: mov ax,data ; cualquier dato que este en 100h lo pasamos a ax
mov ds,ax ; datos de ax van a ds
mov ax,opr1 ; la variable opr1 pasa a ax
mov bx,opr2 ; igual que ax
add ax,bx ; sumamos bx y ax
mov si,offset result;
mov [si],ax
mov ah,4ch
int 21h
code ends
end start

1. Guarde el cdigo anterior en un archive de notas con extensin .asm


2. Ejecute dentro del directorio C:\8086\> dir *.asm
3. Ejecute C:\8086\>masm nombre_de_archivo.asm enter (con esto crea el
archivo ojeto.
4. Luego ejecute C:\8086\> link nombre_de_archivo.asm enter (con esto crea el
archivo .exe
5. Luego ejecute C:\8086\> debug nombre_de_archivo.exe
6. Para terminar ejecute u (desensambla), -d (direcciona), -e (guarda un valor en
un registro).

Solucin:
*********************************************************************
Realice 5 operaciones de suma de 16 bit
*******************************************
EJERCICIO 2: EL PROGRAMA STRING HI
*******************************************

ASSUME CS:CODE,DS:DATA
DATA SEGMENT
MESSAGE DB "Hi All !!!$"
DATA ENDS
CODE SEGMENT
START:MOV AX,DATA
MOV DS,AX
MOV AH,9 ; DOS FUNCTION #9
MOV DX,OFFSET MESSAGE ; OFFSET OF THE STRING
INT 21H ; DISPLAY IT
MOV Ah,4CH
INT 21H
CODE ENDS
END START

*****************************************************************
EMU8086
*****************************************************************

El programa EMU8086 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.
Para trabajar en el programa vamos a C:\emu8086\emu8086.EXE enter

Esto lleva a memoria el archivo ejecutable .EXE para su correspondiente anlisis como
se puede apreciar en la siguiente foto.

Emu8086 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.

*********************************************************************
SUMA DE ENTEROS DE 16 BITS.
**********************************************************************
EJERCICIO # 01: Edite P1.ASM y luego ensamble con MAKE16 P1. Las lneas de
cdigo de P1 son:
TITLE Suma de cuatro nmeros enteros residentes en memoria.
.MODEL SMALL
.STACK 200
.DATA ; segmento de datos
ARREGLO DW 1234, 5678,9876, 5432, 1023, 4567
CNT DW 4
STOTAL DW ?
.CODE ; segmento de cdigo
MOV AX, @DATA
MOV DS, AX
MOV CX, CNT
MOV BX, OFFSET ARREGLO
MOV AX, 0
OTRO: ADD AX, WORD PTR [BX]
INC BX
INC BX
DEC CX
JNZ OTRO
MOV STOTAL, AX
MOV AX, 4C00H
INT 21H
END; Fin del programa fuente.
.
EJERCICIO # 03: Cargar P1.EXE en EMU8086 para su anlisis.
Con F10 ejecute paso a paso y conteste las preguntas.
1. Cul es la direccin lgica inicial de ARREGLO?
DW 1234, 5678,9876, 5432, 1023, 4567
07100: 44 068 D
2. Cul es la direccin lgica inicial de CNT?
DW 4
07101: 11 017 ADC[BP+SI], SP
07102: 22 034
3. Durante la ejecucin del programa con qu valor se carg el registro DS?
20CC
4. Inicialmente con qu valor se carga BX?
0000
5. Este valor en BX qu representa?
Valor base para un direccionamiento indirecto.
6. Visualice luego escriba el cdigo de mquina de MOV STOTAL, AX.
MOV [0000Eh],AX
7. Cul es el modo de direccionamiento asociado con el operando destino en la
instruccin MOV STOTAL, AX?
Directo
MOV STOTAL DW es un doubl Word
8. Visualice luego escriba el cdigo de mquina de MOV AX, WORD PTR [BX].
ADD AX,[BX]
9. Cul es el efecto despus de la ejecucin de MOV AX, 4C00H e INT 21H?
Se carga a AX el valor de 4C00 y con INT 21H CS toma el valor de F400 IP=200
SP=00C2 CIERRA TODOS LOS ARCHIVOS Y CIERRA EL PROGRAMA.
10. Incluya en su reporte el archivo P1.ASM.

*******************************************************************
ARITMETICA ASCII.
*******************************************************************
EJERCICIO # 04: Edite P2.ASM cuyo listado es el siguiente:
.MODEL SMALL
.STACK
.DATA
OPERANDO1 DB 39h ; 39h codigo ascii del 9 decimal
OPERANDO2 DB 39h
RESULTADOASCII DB 2 DUP (?) ;reserva dos byte para el resultado
.CODE
MOV AX, @DATA ;indica donde estan los datos que se van a operar
MOV DS, AX
MOV AX, 0
MOV AL, OPERANDO1
ADD AL, OPERANDO2
AAA ; ajuste ascii despus de sumar 2 bytes ascii
ADD AX, 3030H
MOV RESULTADOASCII, AH
MOV RESULTADOASCII+1, AL
MOV AX, 4C00H
INT 21H
END
1. Ensamble con MASM.
2. Cargar P2.exe en EMU8086.
3. Corra el programa paso a paso hasta antes de ejecutar la instruccin de ajuste
AAA, observe el estado de
AX = 0072
AF =
4. Ejecute la instruccin de ajuste y observe el estado de:
AX = 0108
CF =
AF =
5. Ejecute todo el programa y observe el contenido de la variable:
resultadoascii = &
6. Modifique el programa anterior poniendo como operandos los nmeros 34h y
32h.
7. Repita los pasos anteriores del 1 al 5 y describa las diferencias en los estados
del acumulador AX, banderas AF y CF y de la variable resultadoascii.
AF: Bandera auxiliar. Indica si hay necesidad de ajuste en las operaciones
aritmticas con nmeros BCD.
CF: Bandera de acareo.
Corra el programa paso a paso hasta antes de ejecutar la instruccin de
ajuste AAA, observe el estado de
AX = 0066
AF =
Ejecute la instruccin de ajuste y observe el estado de:
AX = 0006
CF =
AF =
Ejecute todo el programa y observe el contenido de la variable:
resultadoascii =
8. Para qu se realiza la instruccin ADD AX, 3030h?
El valor de 3030h se acumula con el valor actual de AX=0006 quedando como resultado
AX =3036h
9. En qu formato de decimal (empaquetado o no empaquetado) se obtiene el
resultado, despus del ajuste AAA en AX?

ARITMETICA BCD.
EJERCICIO # 05: Edite P3.ASM cuyo listado es el siguiente:
.MODEL SMALL
.STACK
.DATA
OPERANDO1 DB 95h; dos digitos BCD el 9 y el 5
OPERANDO2 DB 98h; dos digitos BCD el 9 y el 8
RESULTADOBCD DW 0
.CODE
MOV AX, @DATA ;indica donde estan los datos que se van a operar
MOV DS, AX
MOV AH, 00
MOV AL, OPERANDO1
MOV BL, OPERANDO2
ADD AL, BL
DAA ; ajuste decimal despus de sumar dos dgitos BCD
ADC AH, 00
MOV resultadoBCD, AX
MOV AX, 4C00H
INT 21H
END

1. Ensamble con MSM.


2. Cargar P2.exe en EMU8086.
3. Corra el programa paso a paso hasta antes de ejecutar la instruccin DAA,
observe el estado de:
AX = 0095
AF =
CF =
4. Ejecute la instruccin de ajuste DAA y observe el estado de
AX = 002D
AF =
CF =
5. Cul es el propsito de la suma del acumulador AH con 00h? (ADC AH, 00H)
Realiza una suma en el Low del registro AX dejando un resultado = 93
6. Ejecute todo el programa.
7. Observe el contenido de la variable
resultadoBCD = 0193
8. Cambie los operandos por 45h y 67h respectivamente y repita los pasos 1 a 7.
Compruebe los resultados de la suma BCD.
Corra el programa paso a paso hasta antes de ejecutar la instruccin DAA,
observe el estado de:
AX = 0045
AF =
CF =
Ejecute la instruccin de ajuste DAA y observe el estado de
AX = 00AC
AF =
CF =
Cul es el propsito de la suma del acumulador AH con 00h? (ADC AH,
00H)
Realiza una suma en el Low del registro AX dejando un resultado = 93
Ejecute todo el programa.
Observe el contenido de la variable
resultadoBCD = 0112

Вам также может понравиться