Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diciembre, 2021
Contenido
Objetivo general.................................................................................................................................3
Objetivos específicos..........................................................................................................................3
Introducción.......................................................................................................................................4
Tabla de presentación de actividades................................................................................................5
Consolidado de los códigos en .ASM presentados, indicando el autor del aporte.............................5
Edwin Alejandro castro..................................................................................................................5
John Carlos Gallego Montes...........................................................................................................5
Juliana Abeba Zuluaga Navarro....................................................................................................11
Luis Felipe Arboleda.....................................................................................................................32
Código del prototipo funcional en lenguaje ensamblador elegido por el grupo como referente de la
actividad solicitada, con una breve explicación del porqué de la elección.......................................32
Tres capturas de pantalla de la ejecución del programa elegido.....................................................54
Conclusiones....................................................................................................................................56
Objetivo general
Aprender cómo usar el Lenguaje Ensamblador de forma correcta para poder dar solución a
problemas lógicos.
Objetivos específicos
Introducción
Con el presente trabajo se busca evaluar todos los conocimientos obtenidos a lo largo del curso,
diseñando un prototipo el cual es un menú donde están los datos de autor, y se pueden realizar
operaciones matemáticas como suma, resta multiplicación, división y comparar si un número es
negativo o positivo en Lenguaje ensamblador en el programa EMU8086.
MENÚ
Datos del autor
Suma de dos números
Resta de dos números
Multiplicación de dos números
División de dos números
Validar si un número es positivo o negativo
Salir
Opciones 2, 3, 4 y 5: debe solicitar por teclado dos números de un digito cada uno.
Fecha de presentación.
include 'emu8086.inc'
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
jmp inicio
menu:
db 13,10, 'MENU',13,10,
opc db 0H
Texto10 db 10,13, "El programa ha terminado, Oprimir enter para salir del programa $"
return db 0
resultado db 0
numero db 0
signox db 0
r2 db ?
ac db 0
NUMERO1 db ?
num1 dw ?
num2 dw ?
inicio:
mov ah,09
lea dx,menu
int 21h
call SCAN_NUM
mov num1,cx
mov ah,09
lea dx,texto2
int 21h
call SCAN_NUM
mov num2,cx
mov ah,09
lea dx,texto3
int 21h
mov ax,num1
add ax,num2
call PRINT_NUM
mov ah,09
lea dx,texto4
int 21h
mov ax,num1
sub ax,num2
call PRINT_NUM
mov ah,09
lea dx,texto5
int 21h
mov ax,num1
mov bx,num2
mul bx
call PRINT_NUM
mov ah,09
lea dx,texto6
int 21h
xor dx,dx
mov ax,num1
mov bx,num2
div bx
call PRINT_NUM
cmp bl,0
mov ah,09
lea dx,texto11
int 21h
CALL SCAN_NUM
POSITIVO:
mov ah,02h
mov dl,10
mov ah,02h
mov dl,13
int 21h
MOV AH,09H
LEA DX,texto7
INT 21h
jmp menu1
NEGATIVO:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
MOV AH,09H
INT 21h
menu1:
int 21h
mov ah,01h
int 21h
mov opc, al
cmp al, 0
jz inicio
int 21h
mov ah, 07
int 21h
int 21h
INCLUDE 'EMU8086.INC'
DATA segment
text12 db 'Residuo$'
resultado db 0
cociente db 0
residuo db 0
numero db 0
signox db 0
r2 db ?
ac db 0
NUMERO1 db ?
DATA ends
pila ends
code segment
push ds
xor ax,ax
mov ax,data
mov ds,ax
xor dx,dx
mov al,0
mov resultado, al
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
mov dx,offset text1
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov ah,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,01h
int 21h
xor ah,ah
sub al,30h
mov cx,2
cmp al,1
jz autor
cmp al,2
jz suma
cmp al,3
jz resta
cmp al,4
jz mult
cmp al,5
jz divi
cmp al,6
jz validar
cmp al,7
jz fin
autor:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov cx,12
mov si,0
jmp menu
leer:
mov ah,07h
int 21h
leer2:
mov ah,07h
int 21h
jmp menu
suma:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,2dh
je signo
sub al,30h
add resultado,al
jmp return1
signo:
mov ah,01h
int 21h
sub al,30h
neg al
add resultado,al
je return1
imp1:
cmp resultado,00
jl imp2
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov AH,09H
int 21H
jmp imprime
imp2:
neg resultado
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov AH,09H
int 21H
mov ah,02h
mov dl,'-'
int 21h
jmp imprime
imprime:
MOV AH,0
MOV AL,resultado
MOV CL,10
DIV CL
ADD AL,30H
ADD AH,30H
MOV BL,AH
MOV DL,AL
MOV AH,02H
INT 21H
MOV DL,BL
MOV AH,02H
INT 21H
mov cx,2
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
jmp menu
resta:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,2dh
je signor
sub al,30h
cmp cx,2
je etiqueta1
sub resultado,al
jmp return2
jmp return2
signor:
mov ah,01h
int 21h
sub al,30h
neg al
cmp cx,2
je etiqueta1
sub resultado,al
je return2
jmp imp1
mult:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,2dh
je signom
sub al,30h
cmp cx,2
je etiqueta2
mov ah,0
mul resultado
jmp return3
etiqueta2:
mov resultado,al
jmp return3
signom:
mov ah,01h
int 21h
sub al,30h
neg al
cmp cx,2
je etiqueta2
mov ah,0
mul resultado
jmp return3
return3:loop mult
mov resultado,al
jmp imp1
mov signox,0
divi:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,2dh
je signod
sub al,30h
cmp cx,2
je etiqueta3
cmp al,0
je falla
mov ah,0
mov numero,al
div numero
jmp return4
etiqueta3:
mov resultado,al
jmp return4
signod:
mov ah,01
int 21h
sub al,30h
inc signox
cmp cx,2
je etiqueta3
mov ah,0
mov numero,al
mov al,resultado
div numero
jmp return4
mov cociente,al
mov residuo,ah
mov resultado,al
jmp imp3
falla:
mov ah,9
mov dx,offset text10
int 21h
jmp divi
imp3:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
jmp imprimedivi
imprimedivi:
MOV AL,resultado
MOV CH,30H
ADD AL,CH
ADD AH,CH
MOV BL,AH
MOV AH,9
INT 21H
cmp signox,1
jz cambio
jmp termina
cambio:
mov dl,'-'
mov ah,02h
int 21h
mov signox,0
termina:
mov ah,02h
MOV DX,0
ADD cociente,30h
MOV DL,cociente
MOV AH,02H
INT 21H
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
MOV AH,9
INT 21H
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
MOV DX,0
ADD residuo,30H
MOV DL,residuo
MOV AH,02H
INT 21H
jmp menu
validar:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
CALL SCAN_NUM
MOV NUMERO1[0],cL
MOV AL,00
CMP AL, numero1[0]
JL POSITIVO
jG NEGATIVO
POSITIVO:
mov ah,02h
mov dl,10
mov ah,02h
mov dl,13
int 21h
MOV AH,09H
LEA DX,text15
INT 21h
jmp menu
NEGATIVO:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
MOV AH,09H
jmp menu
fin: ret
menu endp
code ends
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
DEFINE_SCAN_NUM
end menu
Código del prototipo funcional en lenguaje ensamblador elegido por el grupo como
referente de la actividad solicitada, con una breve explicación del porqué de la
elección.
Código:
INCLUDE 'EMU8086.INC'
DATA segment
text11 db 'Cociente$'
text12 db 'Residuo$'
resultado db 0
cociente db 0
residuo db 0
numero db 0
signox db 0
r2 db ?
ac db 0
NUMERO1 db ?
DATA ends
pila segment stack
pila ends
code segment
push ds
xor ax,ax
mov ax,data
mov ds,ax
xor dx,dx
mov al,0
mov resultado, al
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov ah,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,01h
int 21h
xor ah,ah
sub al,30h
mov cx,2
cmp al,1
jz autor
cmp al,2
jz suma
cmp al,3
jz resta
cmp al,4
jz mult
cmp al,5
jz divi
cmp al,6
jz validar
cmp al,7
jz fin
autor:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov cx,12
mov si,0
jmp menu
leer:
mov ah,07h
int 21h
leer2:
mov ah,07h
int 21h
jmp menu
suma:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
mov ah,01h
int 21h
cmp al,2dh
je signo
sub al,30h
add resultado,al
jmp return1
signo:
mov ah,01h
int 21h
sub al,30h
neg al
add resultado,al
je return1
imp1:
cmp resultado,00
jl imp2
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov AH,09H
int 21H
jmp imprime
imp2:
neg resultado
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov AH,09H
int 21H
mov ah,02h
mov dl,'-'
int 21h
jmp imprime
imprime:
MOV AH,0
MOV AL,resultado
MOV CL,10
DIV CL
ADD AL,30H
ADD AH,30H
MOV BL,AH
MOV DL,AL
MOV AH,02H
INT 21H
MOV DL,BL
MOV AH,02H
INT 21H
mov cx,2
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
jmp menu
resta:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,2dh
je signor
sub al,30h
cmp cx,2
je etiqueta1
sub resultado,al
jmp return2
jmp return2
signor:
mov ah,01h
int 21h
sub al,30h
neg al
cmp cx,2
je etiqueta1
sub resultado,al
je return2
return2: loop resta
jmp imp1
mult:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,2dh
je signom
sub al,30h
cmp cx,2
je etiqueta2
mov ah,0
mul resultado
jmp return3
etiqueta2:
mov resultado,al
jmp return3
signom:
mov ah,01h
int 21h
sub al,30h
neg al
cmp cx,2
je etiqueta2
mov ah,0
mul resultado
jmp return3
return3:loop mult
mov resultado,al
jmp imp1
mov signox,0
divi:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,2dh
je signod
sub al,30h
cmp cx,2
je etiqueta3
cmp al,0
je falla
mov ah,0
mov numero,al
div numero
jmp return4
etiqueta3:
mov resultado,al
jmp return4
signod:
mov ah,01
int 21h
sub al,30h
inc signox
cmp cx,2
je etiqueta3
mov ah,0
mov numero,al
mov al,resultado
div numero
jmp return4
return4: loop divi
mov cociente,al
mov residuo,ah
mov resultado,al
jmp imp3
falla:
mov ah,9
int 21h
jmp divi
imp3:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
int 21h
jmp imprimedivi
imprimedivi:
MOV AL,resultado
MOV CH,30H
ADD AL,CH
ADD AH,CH
MOV BL,AH
MOV AH,9
INT 21H
cmp signox,1
jz cambio
jmp termina
cambio:
mov dl,'-'
mov ah,02h
int 21h
mov signox,0
termina:
mov ah,02h
MOV DX,0
ADD cociente,30h
MOV DL,cociente
MOV AH,02H
INT 21H
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
MOV AH,9
INT 21H
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
MOV DX,0
ADD residuo,30H
MOV DL,residuo
MOV AH,02H
INT 21H
jmp menu
validar:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
CALL SCAN_NUM
MOV NUMERO1[0],cL
MOV AL,00
JL POSITIVO
jG NEGATIVO
POSITIVO:
mov ah,02h
mov dl,10
mov ah,02h
mov dl,13
int 21h
MOV AH,09H
LEA DX,text15
INT 21h
jmp menu
NEGATIVO:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
MOV AH,09H
INT 21h
jmp menu
fin: ret
menu endp
code ends
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
DEFINE_SCAN_NUM
end menu
Puesto que cumplen con lo requerido, es un Código que también es practico y un poco interactivo.