Press

Header Ads

CÓDIGO DE DIVIDIR RESTAR ENSAMBLADOR 8086

EJEMPLO DE CÓDIGO DIVIDIR RESTAR MODO TEXTO


Este código no esta en modo gráfico, está en modo texto, este te permite dividir números hasta de dos dígito, en caso de no tener división exacta, te muestra el cociente y el residuo. Tambien este código te permite restar numeros hasta de dos dígitos, para entender mejor de que se trata el código les dejo un video a continuación.



MACRO CURSOR F,C,texto 
     
    PUSH AX
    PUSH DX
    
    MOV AH,02H
    MOV DH,F
    MOV DL,C
    INT 10H  
    
    mov dx,offset texto
    mov ah,09h
    int 21h 
    
    POP DX
    POP AX
    
ENDM 


MACRO COLOR W,X,Y,Z,C
      
      PUSH AX
      PUSH BX
      PUSH CX
      PUSH DX
        
      MOV AX,0600H
      MOV BH,C   ;color de fondo y letra despues de borrar
      
      MOV CH,W  ;inicio de borrar(W,X)
      MOV CL,X
      
      MOV DH,Y  ;fin de borrar(Y,Z)
      MOV DL,Z 
      INT 10H 
      
      POP DX
      POP CX
      POP BX
      POP AX   
        
ENDM 

MACRO BORRAR W,X,Y,Z,C
      
    
      MOV AX,0600H
      MOV BH,C     ;color de fondo y letra despues de borrar
      
      MOV CH,W  ;inicio de borrar(W,X)
      MOV CL,X
      
      MOV DH,Y  ;fin de borrar(Y,Z)
      MOV DL,Z 
      INT 10H
            
             
      MOV AH,02H   ;posicionar el cursor
      MOV DH,W
      MOV DL,X 
      
      MOV BH,00H  ;Pagina 0
      INT 10H 
       
            
ENDM 

DATOS SEGMENT
  
  TEXTOM DB "  ---------------------------------------------- $"
  TEXTOO DB "|                                              |$"
  TEXTO1 DB "|     UNIVERSIDAD NACIONAL PEDRO RUIZ GALLO    |$"
  TEXTO2 DB "| ESCUELA PROFESIONAL: INGENIERIA ELECTRONICA  |$"
  TEXTO3 DB "| CURSO               : SISTEMAS DIGITALES I    |$"
  TEXTO4 DB "| ALUMNO              :  JOSELITO CALDERON PEREZ  |$"  
  TEXTON DB "  ---------------------------------------------- $"
  TEXTO5 DB "Presione s para salir o c para continuar:$"
                    
  TEXTO6 DB "INGRESE PRIMER NUMERO:$"
  TEXTO7 DB "INGRESE SEGUNDO NUMERO:$"
   
  TEXTO8 DB "  MENU $"
  TEXTOA DB "1) DIVIDIR $"  
  TEXTOB DB "2) RESTAR $"
  TEXTOC DB "3) SALIR $"
      
  TEXTO9 DB "El cociente es:$"
  TEXTOX DB "El residuo es :$"
              
 TEXTO10 DB "La resta es:$"
 
 TEXTO11 DB "INGRESE OPCION:$"
 
 TEXTO12 DB " FIN DEL PROGRAMA$" 
 
 residuo dB ?
 cocien dB ? 
 NUM1 DB ?
 NUM2 DB ? 
 VAR  DB ?
            
 
ENDS 


PROGRAMA SEGMENT
   
    ASSUME CS:CODIGO, DS:DATOS
      
INICIO: 
     
      MOV AX,DATOS 
      MOV DS,AX  
      BORRAR 0,0,19h,54h,9CH
      COLOR 13,3,22,50,7CH 
      CURSOR 13,2,TEXTOM
      CURSOR 14,3,TEXTO1   ; MENU1
      CURSOR 15,3,TEXTOO
      CURSOR 16,3,TEXTOO
      CURSOR 17,3,TEXTO2
      CURSOR 18,3,TEXTOO
      CURSOR 19,3,TEXTO3
      CURSOR 20,3,TEXTOO
      CURSOR 21,3,TEXTO4
      CURSOR 22,2,TEXTON
      CURSOR 5,25,TEXTO5  
      
      
CONTSN:MOV AH,01H
       INT 21H 
 
       CMP AL,43H
       JE INGRESO
       CMP AL,53H
       JE FIN
       CMP AL,44H
       JAE FIN     ;si es mayo igual salta a fin
       CMP AL,42H
       JBE FIN   ;menor igual salta a fin
       
CONTSN1:MOV AH,07H
        INT 21H 
 
       CMP AL,31H
       JE  DIVISION1
       CMP AL,32H
       JE  RESTA
       CMP AL,33H
       JE FIN
       CMP AL,34H
       JAE CONTSN1     ;si es mayo igual salta a fin
       CMP AL,30H
       JBE CONTSN1     ;menor igual salta a fin

     

       
INGRESO:BORRAR 0,0,19h,54h,27H
        CURSOR 14,47,TEXTO8     ;MENU 2  
        CURSOR 16,45,TEXTOA
        CURSOR 18,45,TEXTOB
        CURSOR 20,45,TEXTOC
        CURSOR 4,2,TEXTO11         
        JMP CONTSN1   
        
DIVISION1:MOV BL,00H
          MOV VAR,BL
DIVISION:BORRAR 0,0,19h,54h,27H
         CURSOR 12,29,TEXTO6
      
         
         MOV AH,01H
         INT 21H 
         
         SUB AL,30H
         MOV BH,AL  ; primer numero en hexa
         
         MOV AH,01H
         INT 21H 
         
         SUB AL,30H  ;
         MOV BL,AL
         
         PUSH BX
         MOV BX,00H
         
         CURSOR 14,29,TEXTO7 
         
         MOV AH,01H
         INT 21H
          
         SUB AL,30H
         MOV CH,AL  ; segundo numero en hexa 
           
         MOV AH,01H
         INT 21H 
         
         SUB AL,30H
         MOV CL,AL    ;
         
         POP BX
           
         CMP CX,BX
         JA DIVISION
         
         
         MOV AL,0AH ;MULTIPLICAR POR 10 AL SEGMENTO CH Y SE GUARDA EN EL SEGMENTO AL
         MUL BH 
         ADD BL,AL
         MOV NUM1,BL ; NUMERO EN DECIMAL    
         
         MOV AL,0AH ;MULTIPLICAR POR 10 AL SEGMENTO CH Y SE GUARDA EN EL SEGMENTO AL
         MUL CH 
         ADD CL,AL
         MOV NUM2,CL ; NUMERO EN DECIMAL
         
         MOV AL,VAR
         CMP AL,32H
         JE SEGUIR
         
         MOV AL,NUM1
         MOV CL,NUM2
         MOV DX,00H
         
         div CL
         mov residuo,AH
         MOV cocien,AL
         
         CMP AH,0AH
         JAE ACARREO
         MOV BX,00H  
         COLOR 16,28,19,45,4FH
         CURSOR 16,29,TEXTOX 
         
         MOV DL,residuo
         ADD DL,30H
         MOV AH,02h  ;muestras el numero guardado en memoria,"dl"
         INT 21h  
         
         MOV BX,00H 
                
COCIENTE:CURSOR 18,29,TEXTO9 
         
         MOV DL,cocien 
         ADD DL,30H
         MOV AH,02h  ;muestras el numero guardado en memoria,"dl"
         INT 21h 
    
         MOV AH,07H
         INT 21H    
         JMP INGRESO

ACARREO: MOV AL,AH
         MOV AH,00H
         AAM 
         
         ADD AH,30H
         ADD AL,30H 
         
         PUSH AX
         MOV BX,00H
         
         COLOR 16,28,19,45,4FH
         CURSOR 16,29,TEXTOX
         
         POP AX
         PUSH AX
         MOV DL,AH
         MOV AH,02H
         INT 21H
         
         POP AX
         MOV DL,AL
         MOV AH,02H
         INT 21H
         JMP COCIENTE
         

RESTA:MOV VAR,32H
      JMP DIVISION
      
SEGUIR:MOV BH,NUM1 
       MOV CH,NUM2 
       SUB BH,CH 
       MOV AX,00H
       MOV AL,BH
       AAM 
       PUSH AX  
       
      MOV BX,00H                 
      COLOR 17,28,19,43,4FH 
      CURSOR 18,29,TEXTO10
       
      POP AX
      PUSH AX 
      ADD AH,30H
      MOV DL,AH
      MOV AH,02H
      INT 21H
    
      POP AX 
      ADD AL,30H
      MOV DL,AL
      MOV AH,02H
      INT 21H 
      
      MOV AH,07H
      INT 21H 
      JMP INGRESO
      
FIN: BORRAR 0,0,19H,54h,6FH
     CURSOR 12,29,TEXTO12   ;CURSOR EN EL CENTRO
     MOV AH,07H 
     INT 21H    
     MOV AH,4CH
     INT 21H
     
ENDS
   
   END INICIO 

Publicar un comentario

0 Comentarios