Press

Header Ads

COMPARACIÓN SUMA EN ENSAMBALDOR 8086

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

Publicar un comentario

1 Comentarios

Dejame tus dudas o saludame!