include 'emu8086.inc'
.model small ;Modelo de memoria m?s utilizado
.stack
.data ;definición de datos(variables), donde se almacenara información
.code
chr1 db ? ;primer digito
chr2 db ? ;segundo digito
chr3 db ? ;multiplo
chr4 db ?
r1 db ? ;resultado 1
r2 db ? ;resultado 2
r3 db ?
r4 db ?
ac db 0 ;acarreo
ac1 db 0
.startup
;cls
mov ah,00h ;Function(Set video mode)
mov al,03 ;Mode 80x25 8x8 16
int 10h ;Interruption Video
gotoxy 0,8
printn 'La multiplicacion es:'
gotoxy 0,0
printn 'Ingrese un numero de 2 digitos'
inicio:
mov ah,00h
call scan_num
mov ax,cx
cmp ax,99
jg mayor1
gotoxy 0,10
call print_num
mov al,cl
aam
mov chr1,ah ;[chr1].chr2 * chr3 = ac.r1.r2
mov chr2,al ;chr1.[chr2] * chr3 = ac.r1.r2
gotoxy 2,10
putc '*'
gotoxy 0,2
printn 'Ingrese otro numero de 2 digitos'
cont:
mov ah,00h
mov cl,00h
call scan_num
mov ax,cx
cmp ax,99
jg mayor2
gotoxy 3,10
call print_num
mov al,cl
aam
mov chr3,ah ;chr1.chr2 * [chr3].chr4 = ac.r1.r2
mov chr4,al ;chr1.chr2 * chr3.[chr4] = ac.r1.r2
putc '='
;Realizamos operaci?n
mov al,chr4 ;unidad del segundo numero
mov bl,chr2 ;unidad del primer numero
mul bl ;multiplicar
mov ah,0 ;limpiamos ah0
aam ;separamos de hex a dec
mov ac1,ah ;decenas del primera multiplicacion
mov r4,al ;unidades del primera multiplicacion
mov al,chr4 ;unidades del segundo numero
mov bl,chr1 ;decentas del primer numero
mul bl ;multiplicar
mov r3,al ;movemos el resultado de la operacion a r3
mov bl,ac1 ;movemos el acarreo a bl
add r3,bl ;sumamos resultado mas acarreo
mov ah,00h ;limpiamos ah por residuos
mov al,r3 ;movemos el resultado de la suma a al
aam ;separamos de hex a dec
mov r3,al ;guardamos unidades en r3
mov ac1,ah ;guardamos decenas en ac1
mov al,chr3 ;al = chr3
mov bl,chr2 ;bl = chr2
mul bl ;AL = chr3*chr2 (BL*AL)
mov Ah,0h ;
AAM ;ASCII Adjusment
mov ac,AH ;ac = AH (Acarreo)
mov r2,AL ;r2 = AL (Unidad del resultado)
mov al,chr3 ;AL = chr3
mov bl,chr1 ;BL = chr1
mul bl ;AL = chr1*chr3 (BL*AL)
mov r1,al ;r1 = AL (Decena del resultado)
mov bl,ac ;BL = Acarreo anterior
add r1,bl ;r1 = r1+ac (r1 + Acarreo)
mov ah,00h ;
mov al,r1 ;AL = r1 (Asignaci?n para el ajust)
AAM ;ASCII Adjustment
mov r1,al ;r1 = AL
mov ac,ah ;ac = AH (Acarreo para la Centena del resultado)
;suma final
;R4 resulta ser las unidades de mul y no se toma en cuenta ya que se pasa entero
mov ax,0000h ;limpiamos ax
mov al,r3 ;movemos el segundo resultado de la primera mult a al
mov bl,r2 ;movemos primer resultado de la segunda mult a bl
add al,bl ;sumamos
mov ah,00h ;limpiamos ah
aam ;separamos hex a dec
mov r3,al ;r3 guarda las decenas del resultado final
mov r2,ah ;r2 se utiliza como nuevo acarreo
mov ax,0000h ;''''
mov al,ac1 ;movemos el acarreo de la primera mult a al
mov bl,r1 ;movemos segundo resultado de la segunda mult a bl
add al,r2 ;sumamos el nuevo acarreo de la suma anterior a al
add al,bl ;sumamos al a bl
mov ah,00h ;limpiamos el registro ah
aam ;separamos de hex a dec
mov r1,al ;r1 guarda las centenas
mov r2,ah ;ah se sigue utilizando como acarreo
mov al,r2 ;movemos el acarreo a al
mov bl,ac ;movemos ac a bl
add al,bl ;sumamos al a bl
;aam ;separamos hex a dec
mov ac,al ;mov al a ac como nuestro acarreo final
;Mostramos resultado
mov ax,0000h
;Mostramos ac (millar)
mov ah,02h
mov dl,ac
add dl,30h
int 21h
;mov bl,ac
;add bl,30h
;lea ax,bl
;call print_num
;Mostramos r1 (centena)
mov ah,02H
mov dl,r1
add dl,30h
int 21h
;mov bl,r1
;add bl,30h
;lea ax,bl
;call print_num
;Mostramos r3 (decena)
mov ah,02H
mov dl,r3
add dl,30h
int 21h
;mov bl,r3
;add bl,30h
;lea ax,bl
;call print_num
;unidad
mov ah,02H
mov dl,r4
add dl,30h
int 21h
;mov bl,r4
;add bl,30h
;call print_num
.exit
mayor1:
gotoxy 7,1
mov dh,8
BackSpace:
cmp dh,0
jz borrado
mov ah, 02h ; DOS Display character call
mov dl, 08h ; Another backspace character to move cursor back again
int 21h ; Display it
mov dl, 20h ; A space to clear old character
int 21h ; Display it
mov dl, 08h ; Another backspace character to move cursor back again
int 21h ; Display it
dec dh
loop Backspace
borrado:
printn 'Ingrese correctamente'
gotoxy 21,1
mov dh,22
BackSpace1:
cmp dh,0
jz borrado1
mov ah, 02h
mov dl, 08h
int 21h
mov dl, 20h
int 21h
mov dl, 08h
int 21h
dec dh
loop Backspace1
borrado1:
jmp inicio
mayor2:
gotoxy 7,3
mov dh,8
BackSpace2:
cmp dh,0
jz borrado2
mov ah, 02h ; DOS Display character call
mov dl, 08h ; Another backspace character to move cursor back again
int 21h ; Display it
mov dl, 20h ; A space to clear old character
int 21h ; Display it
mov dl, 08h ; Another backspace character to move cursor back again
int 21h ; Display it
dec dh
loop Backspace2
borrado2:
printn 'Ingrese correctamente'
gotoxy 21,3
mov dh,22
BackSpace3:
cmp dh,0
jz borrado3
mov ah, 02h ; DOS Display character call
mov dl, 08h ; Another backspace character to move cursor back again
int 21h ; Display it
mov dl, 20h ; A space to clear old character
int 21h ; Display it
mov dl, 08h ; Another backspace character to move cursor back again
int 21h ; Display it
dec dh
loop Backspace3
borrado3:
jmp cont
define_scan_num
define_print_num
define_print_num_uns
end
martes, 2 de abril de 2019
Programa multiplicacion mejorado con emu8086.inc
Suscribirse a:
Comentarios de la entrada (Atom)
Programa que pone 3 colores y 3 letras
include 'emu8086.inc' CUADRO MACRO XI,YI,XF,YF,COLOR MOV AX, 0600H ; MOV BH, COLOR ; COLOR DE FONDO Y LETRA MOV BL, 00H MOV CH...
-
Hola mundo en emu8086 .MODEL SMALL .STACK .DATA CADENA1 DB 'HOLA MUNDO.$' .CODE PROGRAMA: MOV AX,@DATA MOV DS,AX MOV...
-
Al momento de ingresar un caracter a lenguaje ensamblador a nuestros registros, este no tma el caracter como tal, no lo toma como la letra o...
-
Lo que haremos ahora dentro de nuestro proyecto Alumnos de Django será modificar y hacer que se vea mejor nuestra aplicación de datos_per mo...
No hay comentarios.:
Publicar un comentario