PROGRAMA DE SUMA Y COMPARACION HASTA DE DOS DIGITOS
Este código esta hecho en modo texto, con este programa podrás sumar números hasta de dos digitos, hasta los números con acarreo que al sumarse forman un numero de tres digitos, tal es la suma de numero 99 más 99, pues este programa lo suma sin dificultad, y también te permite comparar, ingresar dos números, dependiendo a eso, el programa te dirá si es mayor, menor o igual. A continuación te dejo el vídeo para que vean mejor de que se trata.
MACRO CURSOR F,C,texto
MOV AH,02H
MOV DH,F
MOV DL,C
INT 10H
mov dx,offset texto
mov ah,09h
int 21h
ENDM
MACRO BORRAR
MOV AX,0600H;Limpiar pantalla... AL = 00H limpia todos los renglones
MOV BH,07H ;color de fondo yletra
MOV CX,0000H ;esquina sup.izquierda de la pantalla(0,0)
MOV DX,184FH ;esquina inf. derecha de la pantalla(24,79)
INT 10H
MOV AH,02H
MOV DX,00H ;posiscion del cursor(0,0) despues de limpiar pantalla
MOV BH,00H ;Pagina 0
INT 10H
ENDM
DATOS SEGMENT
TEXTO1 DB "UNIVERSIDAD NACIONAL PEDRO RUIZ GALLO $ "
TEXTO2 DB "ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA$"
TEXTO3 DB "CURSO: SISTEMAS DIGITALES I$"
TEXTO4 DB "DOCENTE: ING. CARLOS OBLITAS VERA$"
TEXTO5 DB "ALUMNOS:$"
TEXTO6 DB "A1$"
TEXTO7 DB "A2$"
TEXTO8 DB "A3$"
TEXTO9 DB "A4$"
TEXTO10 DB "A4$"
TEXTO11 DB "A5$"
TEXTO12 DB "Lambayeque,junio del 2015$"
TEXTO13 DB "MENU $"
TEXTOX DB "1.UN DIGITO $"
TEXTOY DB "2.DOS DIGITOS $"
TEXTOZ DB "3.SALIR $"
TEXTO20 DB "INGRESE OPCION:$"
TEXTO19 DB "OPCIONES $"
TEXTOA DB " 1.SUMAR $"
TEXTOB DB " 2.COMPARAR $"
TEXTOC DB " 3.INGRESAR OTROS NUMEROS $"
TEXTOD DB " 4.REGRESAR AL MENU $"
TEXTOE DB " 5.SALIR $"
TEXTO14 DB "Ingrese primer numero: $"
TEXTO15 DB "Ingrese segundo numero: $"
TEXTO16 DB "Desea continuar SI/NO? $"
TEXTO17 DB "Fin del programa $"
TEXTO18 DB "La suma es:$"
TEXTO21 DB "=$"
TEXTO22 DB "<$"
TEXTO23 DB ">$"
TEXTO24 DB "El resultado es:$"
A DB ?
B DB ?
VAR1 DB ?
VAR2 DB ?
X DB ?
VAR3 DW ?
Y DB ?
VAR4 DW ?
NUM DW ?
NUM1 DB ?
ENDS
PROGRAMA SEGMENT
ASSUME CS:CODIGO, DS:DATOS
INICIO:
MOV AX,DATOS
MOV DS,AX
CURSOR 1,23,TEXTO1
CURSOR 3,19,TEXTO2
CURSOR 7,8,TEXTO3
CURSOR 9,8,TEXTO4
CURSOR 11,8,TEXTO5
CURSOR 13,17,TEXTO6
CURSOR 14,17,TEXTO7
CURSOR 15,17,TEXTO8
CURSOR 16,17,TEXTO9
CURSOR 17,17,TEXTO10
CURSOR 18,17,TEXTO11
CURSOR 23,50,TEXTO12
CURSOR 24,50,TEXTO16
CONTSN:MOV AH,01H
INT 21H
MOV BH,AL
MOV AH,01H
INT 21H
MOV BL,AL
CMP BX,5349H
JE INGRESO
CMP BX,4E4Fh
JE FIN
CMP BX,7369H
JE INGRESO
CMP BX,6E6FH
JE FIN
CONTSN1:MOV AH,01H
INT 21H
MOV BH,AL
MOV AH,01H
INT 21H
MOV BL,AL
CMP BX,5349H
JE OPCION
CMP BX,4E4Fh
JE FIN
CMP BX,7369H
JE OPCION
CMP BX,6E6FH
JE FIN
CONTSN2:MOV AH,01H
INT 21H
MOV BH,AL
MOV AH,01H
INT 21H
MOV BL,AL
CMP BX,5349H
JE OPCION2
CMP BX,4E4Fh
JE FIN
CMP BX,7369H
JE OPCION2
CMP BX,6E6FH
JE FIN
OPCION2:MOV BX,00H
BORRAR
CURSOR 7,33,TEXTO19
CURSOR 10,30,TEXTOA
CURSOR 11,30,TEXTOB
CURSOR 12,30,TEXTOC
CURSOR 13,30,TEXTOD
CURSOR 14,30,TEXTOE
CURSOR 17,30,TEXTO20
MOV AH,01H
INT 21H
CMP AL,31H
JE SUMA2
CMP AL,32H
JE COMP2
CMP AL,33H
JE DIGIT2
CMP AL,34H
JE INGRESO
CMP AL,35H
JE FIN
CMP AL,35H ;si el numero ingresado es mayor que 5 va opcion2
JG OPCION2
CMP AL,30H
JE OPCION2
INGRESO:
MOV BX,00H
BORRAR
CURSOR 7,33,TEXTO13 ;MENU general
CURSOR 10,30,TEXTOX
CURSOR 12,30,TEXTOY
CURSOR 14,30,TEXTOZ
CURSOR 17,30,TEXTO20
MOV AH,01H
INT 21H
CMP AL,31H
JE DIGIT1
CMP AL,32H
JE DIGIT2
CMP AL,33H
JE FIN
CMP AL,33H ;si el numero ingresado es mayor que 3 va a ingreso
JG INGRESO
CMP AL,30H
JE INGRESO
DIGIT1:MOV BX,00H
BORRAR
CURSOR 10,25,TEXTO14
MOV AH,01H
INT 21H
MOV A,AL ; EL PRIMER NUMERO INGRESADO EN CODIGO ASCII ESTA EN "A"
MOV CH,AL
SUB CH,30H
MOV VAR1,CH ;el primer numero se resta 30 para que este en hexa
;y se guarda en var1
CURSOR 12,25,TEXTO15
MOV AH,01H
INT 21H
MOV B,AL ; EL SEGUNDO NUMERO INGRESADO EN CODIGO ASCII ESTA EN "B"
MOV CL,AL
SUB CL,30H
MOV VAR2,CL ;el segundo numero se resta 30 para que este en hexa
;y se guarda en var2
ADD CL,CH ;el numero esta guardado en "cl"
MOV CH,00H
MOV NUM1,CL
OPCION:MOV BX,00H
BORRAR
CURSOR 7,33,TEXTO19
CURSOR 10,30,TEXTOA
CURSOR 11,30,TEXTOB
CURSOR 12,30,TEXTOC
CURSOR 13,30,TEXTOD
CURSOR 14,30,TEXTOE
CURSOR 17,30,TEXTO20
MOV AH,01H
INT 21H
CMP AL,31H
JE SUMA
CMP AL,32H
JE COMP1
CMP AL,33H
JE DIGIT1
CMP AL,34H
JE INGRESO
CMP AL,35H
JE FIN
CMP AL,35H ;si el numero ingresado es mayor a 5 va opcion
JG OPCION
CMP AL,30H
JE OPCION
SUMA:BORRAR
CURSOR 12,26,TEXTO18
MOV CL,NUM1
CMP CL,0AH
JB MENOR ; Brinca si el numero es mas bajo que 10H
MOV DL,31H ; Si no entonces es mayor que 9 y mandamos el ascii
MOV AH,02H ; 31H a pantalla con la funcion AH=02H
INT 21H
SUB CL,0AH ;Restarle 10 para obtener las unidades y
ADD CL,30H ;sumarle un 30H para obtener el ascii
MOV DL,CL ;cargarlo en DL porque asi lo pide la funcion AH=02
MOV AH,02H ;y mandarlo a pantalla con la interrupcion 21H
INT 21H
MOV AH,07H ;espera ingreso de teclado para seguir sin ECO
INT 21H
CURSOR 14,26,TEXTO16
JMP CONTSN1
MENOR:BORRAR
CURSOR 12,26,TEXTO18
MOV CL,NUM1
ADD CL,30H
MOV DL,CL
MOV AH,02H
INT 21H
MOV AH,07H ;espera ingreso de teclado para seguir sin mostrarlo en pantalla
INT 21H
CURSOR 14,26,TEXTO16
JMP CONTSN1
COMP1:BORRAR
MOV CH,VAR1
MOV CL,VAR2
CMP CH,CL ;brinca si son iguales
JE IGUAL
CMP CH,CL ;brinca si el numero es mas bajo que cl
JB MAYOR1
CMP CL,CH ;brinca si el numero es mas bajo que ch
JB MAYOR2
IGUAL:CURSOR 12,26,TEXTO24
MOV DL,A
MOV AH,02H
INT 21H
MOV AH,09H
MOV DX,OFFSET TEXTO21
INT 21H
MOV DL,B
MOV AH,02H
INT 21H
MOV AH,07H
INT 21H
CURSOR 14,26,TEXTO16
JMP CONTSN1
MAYOR1:CURSOR 12,26,TEXTO24
MOV DL,A
MOV AH,02H
INT 21H
MOV AH,09H
MOV DX,OFFSET TEXTO22
INT 21H
MOV DL,B
MOV AH,02H
INT 21H
MOV AH,07H
INT 21H
CURSOR 14,26,TEXTO16
JMP CONTSN1
MAYOR2:CURSOR 12,26,TEXTO24
MOV DL,A
MOV AH,02H
INT 21H
MOV AH,09H
MOV DX,OFFSET TEXTO23
INT 21H
MOV DL,B
MOV AH,02H
INT 21H
MOV AH,07H
INT 21H
CURSOR 14,26,TEXTO16
JMP CONTSN1
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"DOS DIGITOS"xxxxxxxxxxxxxxxxxxxxxxxxxxx
DIGIT2:
BORRAR
CURSOR 10,25,TEXTO14
MOV AX,00
MOV BX,00
MOV CX,00
MOV DX,00
MOV AH,01H
INT 21H ; PRIMER DIGITO en BL
MOV A,AL ; A ESTA EN ASCII
SUB AL,30H
MOV BH,AL
MOV AH,01H
INT 21H ; SEGUNDO DIGITO EN CL
MOV X,AL ; EN ASCII
SUB AL,30H
MOV BL,AL
MOV VAR3,BX ; VAR3 ESTA EN HEXA
PUSH BX
MOV BX,00H
CURSOR 12,25,TEXTO15
POP BX
MOV AH,01H
INT 21H ; PRIMER DIGITO EN DL
MOV B,AL
SUB AL,30H
MOV CH,AL
MOV AH,01H
INT 21H ; SEGUNDO DIGITO EN AL
MOV Y,AL
SUB AL,30H
MOV CL,AL
MOV VAR4,CX
;xxxxxxxxxxxxxxxxxxxxxx
PUSH AX
PUSH BX
PUSH CX
PUSH DX
JMP OPCION2
SUMA2: BORRAR
CURSOR 12,26,TEXTO24
POP DX
POP CX
POP BX
POP AX
PUSH AX ;por ejemplo 99 Y 99 = 198
PUSH BX ;bx=bh_bl= 09_09 ,valores en hexa
PUSH CX ;cx=ch_cl= 09_09
PUSH DX
ADD BH,CH
CMP BH,09H
JL MENOR1 ;si es menor salta a etiqueta
ADD BL,CL
CMP BL,0AH
JL MENOR1
MOV DL,31H ;SINO, IMPRIME 1 EN PANTALLA
MOV AH,02H
INT 21H
MOV BX,VAR3
MOV CX,VAR4
ADD CH,BH ; 9 + 9 = 18(ACARRERO),se imprime en pantalla 1 por esta razon
ADD CL,BL ; solo me intersa el 8
; 9 + 9 = 18(ACARRERO)
SUB CH,0AH ;18-10= 8 y se guarda en ch
CMP CL,0AH ; si tiene acarreo las unidades, salta a menor2
JGE MENOR2
;sino sigue el programa
ADD CH,30H
ADD CL,30H
mov dl,ch
mov ah,02h ;IMPRIMO EN PANTALLA
int 21h
mov dl,cl
mov ah,02h ;IMPRIMO EN PANTALLA
int 21h
mov ah,07h
int 21h
PUSH BX
MOV BX,00H
CURSOR 14,26,TEXTO16
POP BX
JMP CONTSN2
MENOR2: ADD CH,01H ;SUMO 1 A 8 = 9
ADD CH,30H ;CODIGO ASCII=39
MOV DL,CH
MOV AH,02H ;IMPRIMO EN PANTALLA EL 9
INT 21H
SUB CL,0AH ;18 - 10 = 8
ADD CL,30H ;CODIGO ASCII=38
MOV DL,CL
MOV AH,02H ; IMPRIMO EN PANTALLA EL 8
INT 21H
mov ah,09h
int 21h
PUSH BX
MOV BX,00H
CURSOR 14,26,TEXTO16
POP BX
JMP CONTSN2
MENOR1:
MOV BX,VAR3 ;por ejemplo 49 Y 49 = 98
MOV CX,VAR4
ADD CH,BH ;4 + 4 = 8 ;8 EN CH
ADD CL,BL ;9 + 9 = 18 ; 18 EN CL(CON ACARREO)
CMP CL,0AH ; SI TIENE ACARRE LAS UNIDADES SALTA A MENOR3
JGE MENOR3
;SI UBIERA INGRESADO 45 Y 43 = 88 ---> 4 + 4 = 8 EN CH
; 5 + 3 = 8 EN CL(SIN ACARREO)
ADD CH,30H ; 38 CODIGO ASCII
ADD CL,30H ; 38 CODIGO ASCII
mov dl,ch
mov ah,02h ;IMPRIMO EN PANTALLA 8
int 21h
mov dl,cl
mov ah,02h ;IMPRIMO EN PANTALLA 8
int 21h
mov ah,07h
int 21h
PUSH BX
MOV BX,00H
CURSOR 14,26,TEXTO16
POP BX
JMP CONTSN2
MENOR3: ADD CH,01H ;SUMO 1 A 8 = 9
ADD CH,30H ;CODIGO ASCII=39
MOV DL,CH
MOV AH,02H ;IMPRIMO EN PANTALLA EL 9
INT 21H
SUB CL,0AH ;18 - 10 = 8
ADD CL,30H ;CODIGO ASCII=38
MOV DL,CL
MOV AH,02H ; IMPRIMO EN PANTALLA EL 8
INT 21H
mov ah,07h
int 21h
PUSH BX
MOV BX,00H
CURSOR 14,26,TEXTO16
POP BX
JMP CONTSN2
COMP2:BORRAR
MOV BX,VAR3
MOV CX,VAR4
CMP BX,CX ;brinca si son iguales
JE IGUAL1
CMP BX,CX ;brinca si el numero es mas bajo que cx
JB MAYOR3
CMP CX,BX ;brinca si el numero es mas bajo que bx
JB MAYOR4
IGUAL1:MOV BX,00H
CURSOR 12,26,TEXTO24
MOV DL,A
MOV AH,02H
INT 21H
MOV DL,X
MOV AH,02H
INT 21H
MOV AH,09H
MOV DX,OFFSET TEXTO21
INT 21H
MOV DL,B
MOV AH,02H
INT 21H
MOV DL,Y
MOV AH,02H
INT 21H
MOV AH,07H
INT 21H
CURSOR 14,26,TEXTO16
JMP CONTSN2
MAYOR3:MOV BX,00H
CURSOR 12,26,TEXTO24
MOV DL,A
MOV AH,02H
INT 21H
MOV DL,X
MOV AH,02H
INT 21H
MOV AH,09H
MOV DX,OFFSET TEXTO22
INT 21H
MOV DL,B
MOV AH,02H
INT 21H
MOV DL,Y
MOV AH,02H
INT 21H
MOV AH,07H
INT 21H
CURSOR 14,26,TEXTO16
JMP CONTSN2
MAYOR4:MOV BX,00H
CURSOR 12,26,TEXTO24
MOV DL,A
MOV AH,02H
INT 21H
MOV DL,X
MOV AH,02H
INT 21H
MOV AH,09H
MOV DX,OFFSET TEXTO23
INT 21H
MOV DL,B
MOV AH,02H
INT 21H
MOV DL,Y
MOV AH,02H
INT 21H
MOV AH,07H
INT 21H
CURSOR 14,26,TEXTO16
JMP CONTSN2
FIN: BORRAR
CURSOR 12,29,TEXTO17
MOV AH,07H
INT 21H
MOV AH,4CH
INT 21H
ENDS
END INICIO
1 Comentarios
Sobre la etiqueta "MENOR1:", completar mov ah,09h (le falta la ",09")
ResponderEliminarDejame tus dudas o saludame!