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

Objetivo:

Aplicar los principios del lenguaje ensamblador para realizar, compilar y ejecutar un
programa que permita realizar operaciones básicas.

Instrucciones:

 Efectúa un programa en lenguaje ensamblador que le presente al usuario un menú


con las cuatro operaciones fundamentales (suma, resta, multiplicación y división) y
que acepte dos números como argumentos para calcular el resultado con base en la
operación elegida.
 Entrega el resultado en un reporte que contenga el código de la implementación y las
pantallas que muestren la ejecución del programa.

Programa:
Codigo: $"
Data segment label12 DB "residuo $" pila ends
label1 DB "Selecciona mensaje2 db 13,10,
una operacion $" 'Victor Ivan Martinez code segment
label2 DB "1.- Suma Bernabe $'
$" mensaje3 db 13,10, menu proc far
label3 DB "2.- Resta 'Matricula: 103567 $'
$" mensaje4 db 13,10, assume
label4 DB "3.- 'Grupo: K059 $' cs:code,ds:data,ss:pila
Multiplicacion $" resultado DB 0 push ds
label5 DB "4.- Division cociente DB 0 xor ax,ax
$" residuo DB 0 push ax
label6 DB "5.- Salir $" numero DB 0 mov ax,data
label7 DB "Ingrese signox DB 0 mov ds,ax
una opcion $" r2 DB ? xor dx,dx
label8 DB "Ingrese ac DB 0 lea dx, mensaje2
numero $" mov ah, 9h
label9 DB "El Data ends int 21h
resultado es $"
label10 DB "error no pila segment stack lea dx, mensaje3
divisible entre 0 $" mov ah, 9h
label11 DB "`cociente DW 256 DUP (?) int 21h
int 21h
lea dx, mensaje4 mov ah,02h mov ah,02h
mov ah, 9h mov dl,10 mov dl,13
int 21h int 21h int 21h
mov ah,02h
;interlineado mov dl,13 mov ah,09h
mov ah,02h int 21h mov dx,offset label6
mov dl,10 int 21h
int 21h mov ah,09h
mov ah,02h mov dx,offset label3 mov ah,02h
mov dl,13 int 21h mov dl,10
int 21h int 21h
;interlineado mov ah,02h mov ah,02h
mov ah,02h mov dl,10 mov dl,13
mov dl,10 int 21h int 21h
int 21h mov ah,02h
mov ah,02h mov dl,13 mov ah,09h
mov dl,13 int 21h mov dx,offset label7
int 21h int 21h
;imprime seleccion de mov ah,09h
menu mov dx,offset label4 ;lee teclado
mov ah,09h int 21h mov ah,01h
mov dx,offset label1 int 21h
int 21h mov ah,02h
mov dl,10 ;ajunstando el teclado
;interlineado int 21h xor ah,ah
mov ah,02h mov ah,02h sub al,30h
mov dl,10 mov dl,13 mov cx,2
int 21h int 21h ;verificando opcion
mov ah,02h
mov dl,13 mov ah,09h cmp al,1
int 21h mov dx,offset label5 jz suma ;se dirige al
int 21h metodo suma
mov ah,09h
mov dx,offset label2 mov ah,02h cmp al,2
int 21h mov dl,10 jz resta ;se dirige al
metodo resta jmp return1 int 21h
mov ah,02h
cmp al,3 mov dl,13
jz mult ;se dirige al signo: int 21h
metodo multiplik mov ah,01h
int 21h mov AH,09H
cmp al,4 sub al,30h mov DX,OFFSET
jz divi ;se dirige al neg al label9
metodo dividir add resultado,al int 21H
je return1 mov ah,02h
cmp al,5 mov dl,'-'
jz fin return1: loop suma int 21h
jmp imprime
suma:
mov ah,02h imp1: imprime:
mov dl,10 cmp resultado,00
int 21h jl imp2
mov ah,02h ;interlineado MOV AH,0
mov dl,13 mov ah,02h MOV AL,resultado
int 21h mov dl,10 MOV CL,10
mov ah,09h int 21h DIV CL
mov dx,offset label8 mov ah,02h
int 21h mov dl,13 ADD AL,30H
int 21h ADD AH,30H;
;lee teclado mov AH,09H CONVIRTIENDO A
mov ah,01h mov DX,OFFSET DECIMAL
int 21h label9 MOV BL,AH
int 21H
;verificando si es jmp imprime MOV DL,AL
negativo MOV
cmp al,2dh AH,02H;IMPRIME LA
je signo imp2: DECENA
neg resultado INT 21H
;ajusta teclado ;interlineado
sub al,30h mov ah,02h MOV DL,BL
add resultado,al mov dl,10 MOV AH,02H
INT 21H;IMPRIME sub al,30h mov resultado,al
LA UNIDAD neg al jmp return3
mov cx,2 cmp cx,2 signom:
jmp menu je etiqueta1 mov ah,01h
resta: sub resultado,al int 21h
mov ah,02h je return2 sub al,30h
mov dl,10 neg al
int 21h return2: loop resta cmp cx,2
mov ah,02h jmp imp1 je etiqueta2
mov dl,13 mov ah,0
int 21h mult: mul resultado
mov ah,09h mov ah,02h jmp return3
mov dx,offset label8 mov dl,10 return3:loop mult
int 21h int 21h mov resultado,al
mov ah,02h jmp imp1
;lee teclado mov dl,13
mov ah,01h int 21h mov signox,0
int 21h mov ah,09h divi:
mov dx,offset label8 mov ah,02h
;verificando si es int 21h mov dl,10
negativo int 21h
cmp al,2dh ;lee teclado mov ah,02h
je signor mov ah,01h mov dl,13
int 21h int 21h
;ajusta teclado mov ah,09h
sub al,30h ;verificando si es mov dx,offset label8
cmp cx,2 negativo int 21h
je etiqueta1 cmp al,2dh
sub resultado,al je signom ;lee teclado
jmp return2 sub al,30h mov ah,01h
etiqueta1: mov cmp cx,2 int 21h
resultado,al je etiqueta2
jmp return2 mov ah,0 ;verificando si es
signor: mul resultado negativo
mov ah,01h jmp return3 cmp al,2dh
int 21h etiqueta2: je signod
mov ah,9 INT 21H
sub al,30h mov dx, offset label10
cmp cx,2 int 21h cmp signox,1
je etiqueta3 jmp divi jz cambio
cmp al,0 imp3: jmp termina
je falla
mov ah,0 cambio:
mov numero,al mov ah,02h mov dl,"-"
mov al,resultado mov dl,10 mov ah,02h
div numero int 21h int 21h
jmp return4 mov ah,02h mov signox,0
mov dl,13
etiqueta3: int 21h termina:
mov resultado,al mov AH,09H MOV DX,0
jmp return4 mov DX,OFFSET ADD cociente,30H
signod: label9 MOV DL,cociente
mov ah,01 int 21H MOV
int 21h jmp imprimedivi AH,02H ;IMPRIME EL
sub al,30h COCIENTE
inc signox INT 21H
cmp cx,2
je etiqueta3
mov ah,0 imprimedivi: MOV AH,9
mov numero,al MOV AL,resultado MOV DX,OFFSET
mov al,resultado label12
div numero MOV CH,30H INT 21H
jmp return4 ADD AL,CH
ADD AH,CH MOV DX,0
return4:loop divi MOV BL,AH ADD residuo,30H
mov cociente,al MOV DL,residuo
mov residuo,ah MOV
mov resultado,al MOV AH,9 AH,02H ;IMPRIME EL
jmp imp3 MOV DX,OFFSET
falla: label11
RESIDUO
INT 21H jmp menu
fin: ret code ends
menu endp end menu

Suma:

Resta
Multiplicación

División
Opción Salir

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