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...
-
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...
-
Hola mundo en emu8086 .MODEL SMALL .STACK .DATA CADENA1 DB 'HOLA MUNDO.$' .CODE PROGRAMA: MOV AX,@DATA MOV DS,AX MOV...
-
Ahora veremos un programa de cierta manera sencillo, dentro de emu8086. Sintaxis: ORG 100H ;SUMA NUMEROS DE 1 SOLO DIGITO M...
No hay comentarios.:
Publicar un comentario