Сборка emu8086: два шестнадцатеричных и двоичных числа добавить суб мул

Я получаю hex как первое число. Я получаю двоичное как второе число. программа не работает, когда я пытаюсь ввести значение за ее пределами. Причина в том, что когда я вношу двоичный код, он преобразуется в шестнадцатеричный формат. Когда я вводю здесь H для суммирования, я перехожу к @ END_1 и пишу код для преобразования двоичного кода в шестнадцатеричный. После этого, если пользователь входит в H, он должен выполнить операцию Hex. Но я не мог обеспечить этот контроль. Из-за этого программа продолжает работать вниз, пока я не введу букву.

Мой код,

 .MODEL SMALL
 .STACK 100H

 .DATA
   PROMPT_1  DB  0DH,0AH,'ilk hex veya binary sayi giriniz ( 0000 - FFFF ) : $'
   PROMPT_2  DB  0DH,0AH,'ikinci hex veya binary sayi giriniz ( 0000 - FFFF ) : $' 
   msgCh     DB  0DH,0AH,'Seciniz + Ekleme,- Cikarma,* Carpma, X Cikis: $'   
   PROMPT_3  DB  0DH,0AH,'Toplama Sonucu : $' 
   PROMPT_4  DB  0DH,0AH, 'Cikarma Sonucu : $'
   PROMPT_5  DB  0DH,0AH, 'Carpma Sonucu : $'
   ILLEGAL   DB  0DH,0AH,'Yanli Karakter. Tekrar Deneyin.$'

   COUNT     DB  ?
   VALUE     DW  ?
   HEXSUB    DB  ? 
   HEXADD    DB  ?
   HEXMUL    DB  ?

 .CODE
   MAIN PROC
     MOV AX, @DATA              
     MOV DS, AX

     JMP @START_OPERANT

      @START_OPERANT:
       LEA DX, msgCh             
       MOV AH, 9         
       INT 21H  


       MOV AH, 1                 
       INT 21H 

       CMP AL,"+"  
       JE @START_2

       CMP AL,"-"
       JE  @START_2A  

       CMP AL,"*"
       JE  @START_2B  

     @START_1:                  
       LEA DX, ILLEGAL          
       MOV AH, 9
       INT 21H

     @START_2:                  
       LEA DX, PROMPT_1         
       MOV AH, 9
       INT 21H

       XOR BX, BX               
       MOV COUNT, 30H           

     @START_3:                  
       MOV AH, 1                
       INT 21H                  

       CMP AL, 0DH              
       JNE @SKIP_1              

       CMP COUNT, 30H           
       JBE @START_1             
       JMP @END_1               

       @SKIP_1:

       CMP AL,'H'
       JE  @END_1                 

       CMP AL, "A"              
       JB @DECIMAL_1            

       CMP AL, "F"              
       JA @START_1              
       ADD AL, 09H              
       JMP @OK_1                

       @DECIMAL_1:              
         CMP AL, 30H            
         JB @START_1            

         CMP AL, 39H            
         JA @START_1            

       @OK_1:                   

       INC COUNT                

       AND AL, 0FH              

       MOV CL, 4                
       SHL AL, CL               

       MOV CX, 4                

       @LOOP_1:                 
         SHL AL, 1              
         RCL BX, 1              

       LOOP @LOOP_1             

       CMP COUNT, 35H           
       JE @END_1                
       JMP @START_3             

       @END_1:                  

       MOV VALUE, BX            

       LEA DX, PROMPT_2         
       MOV AH, 9
       INT 21H

       MOV CX, 9                 
       MOV AH, 1                 

       @LOOP_2:                  
         INT 21H                 

         CMP AL, 0DH             
         JNE @SKIP_2             

         CMP CX, 9               
         JE @START_2             
         JMP @END_2        

         @SKIP_2:                
           AND AL, 0FH
           MOV HEXADD,BH           
           SHL BH, 1   
           OR BH, AL             
       LOOP @LOOP_2                

       @END_2:
       MOV CL,HEXADD
       MOV SI,CX                   

     LEA DX, PROMPT_3           
     MOV AH, 9
     INT 21H   

     ADD VALUE,SI
     MOV BX,VALUE
     JNC @SKIP                  
     MOV AH, 2                  
     MOV DL, 31H                
     INT 21H                    

     @SKIP:                     

     MOV COUNT, 30H             

     @LOOP_3:                   
       XOR DL, DL               
       MOV CX, 4                

       @LOOP_4:                 
         SHL BX, 1              
         RCL DL, 1              

       LOOP @LOOP_4             

       MOV AH, 2                

       CMP DL, 9                
       JBE @NUMERIC_DIGIT       
       SUB DL, 9                
       OR DL, 40H               
       JMP @DISPLAY             

       @NUMERIC_DIGIT:          
         OR DL, 30H             

       @DISPLAY:                
         INT 21H                

       INC COUNT                
       CMP COUNT, 34H           
       JNE @LOOP_3              

     @START_1A:                 
       LEA DX, ILLEGAL          
       MOV AH, 9
       INT 21H

     @START_2A:                 
       LEA DX, PROMPT_1         
       MOV AH, 9
       INT 21H

       XOR BX, BX               
       MOV COUNT, 30H           

     @START_3A:                 
       MOV AH, 1                
       INT 21H                  

       CMP AL, 0DH              
       JNE @SKIP_1A             

       CMP COUNT, 30H           
       JBE @START_1A            
       JMP @END_1A              

       @SKIP_1A: 
       CMP AL,'H'
       JE @END_1A               

       CMP AL, "A"              
       JB @DECIMAL_1A           

       CMP AL, "F"              
       JA @START_1A             
       ADD AL, 09H              
       JMP @OK_1A 

       @DECIMAL_1A:             
         CMP AL, 30H            
         JB @START_1A           

         CMP AL, 39H            
         JA @START_1A           

       @OK_1A:                  

       INC COUNT                

       AND AL, 0FH              

       MOV CL, 4                
       SHL AL, CL               

       MOV CX, 4                

       @LOOP_1A:                
         SHL AL, 1              
         RCL BX, 1              

       LOOP @LOOP_1A

       CMP COUNT, 35H           
       JE @END_1A               
       JMP @START_3A            

       @END_1A:                 

       MOV VALUE, BX            

       LEA DX, PROMPT_2         
       MOV AH, 9
       INT 21H

       MOV CX, 9                 
       MOV AH, 1                 

       @LOOP_2A:                  
         INT 21H                 

         CMP AL, 0DH             
         JNE @SKIP_2A             

         CMP CX, 9               
         JE @START_2A             
         JMP @EXIT_LOOP_2A        

         @SKIP_2A:                
           AND AL, 0FH
           MOV HEXSUB,BH           
           SHL BH, 1   
           OR BH, AL             
       LOOP @LOOP_2A              

       @EXIT_LOOP_2A:
       MOV CL,HEXSUB
       MOV SI,CX                 

     LEA DX, PROMPT_4             
     MOV AH, 9
     INT 21H


     SUB VALUE,SI
     MOV BX,VALUE   

      mov     dh, 2
l1:     mov     ch, 04h         
       mov     cl, 04h 
l2:    rol       bx, cl            
       mov     dl, bl            
       and      dl, 0fH 
       cmp     dl, 09           
       jbe       l4
       add      dl, 07           
l4:    add      dl, 30H
       mov     ah, 02         
       int       21H
       dec      ch 
       CMP      ch,0
       je       SON                           
       jnz       l2
       dec      dh
       cmp     dh, 0 
       JE SON
       mov     bx, si  
       jnz       l1
       mov     ah, 4cH         
       int       21H 

       SON: 
       mov     ah, 4cH         
       int       21H 

    @START_1B:                 
       LEA DX, ILLEGAL         
       MOV AH, 9
       INT 21H

     @START_2B:                
       LEA DX, PROMPT_1        
       MOV AH, 9
       INT 21H

       XOR BX, BX              
       MOV COUNT, 30H          

     @START_3B:                
       MOV AH, 1               
       INT 21H                 

       CMP AL, 0DH             
       JNE @SKIP_1B            

       CMP COUNT, 30H          
       JBE @START_1B           
       JMP @END_1B             

       @SKIP_1B: 

       CMP AL,'H'
       JE @END_1B            

       CMP AL, "A"             
       JB @DECIMAL_1B          

       CMP AL, "F"             
       JA @START_1B            
       ADD AL, 09H             
       JMP @OK_1B              

       @DECIMAL_1B:            
         CMP AL, 30H           
         JB @START_1B          

         CMP AL, 39H           
         JA @START_1B          

       @OK_1B:                 

       INC COUNT               

       AND AL, 0FH             

       MOV CL, 4               
       SHL AL, CL              

       MOV CX, 4               

       @LOOP_1B:               
         SHL AL, 1             
         RCL BX, 1             

       LOOP @LOOP_1B           

       CMP COUNT, 35H          
       JE @END_1B              
       JMP @START_3B           

       @END_1B:                

       MOV VALUE, BX           

       LEA DX, PROMPT_2         
       MOV AH, 9
       INT 21H

       MOV CX, 9                 
       MOV AH, 1                 

       @LOOP_2B:                  
         INT 21H                 

         CMP AL, 0DH             
         JNE @SKIP_2B             

         CMP CX, 9               
         JE @START_2B             
         JMP @END_2B        

         @SKIP_2B:                
           AND AL, 0FH
           MOV HEXMUL,BH           
           SHL BH, 1   
           OR BH, AL             
       LOOP @LOOP_2B        

       @END_2B:
       MOV CL,HEXMUL
       MOV SI,CX                

     LEA DX, PROMPT_5          
     MOV AH, 9
     INT 21H

     MOV AX,VALUE
     MUL SI 
     mov BX,AX 
     mov SI,BX
     mov DI,DX  

       mov     dh, 2
lm:     mov     ch, 04h      
       mov     cl, 04h       
ln:    rol       DI, cl
       mov      bx,DI        
       mov     dl, bl        
       and      dl, 0fH      
       cmp     dl, 09        
       jbe       lp
       add      dl, 07       
lp:    add      dl, 30H
       mov      ah, 02       
       int       21H
       dec      ch 
       CMP      ch,0
       je  AFTER             
       jnz       ln
       dec      dh
       cmp     dh, 0     
AFTER:       
       mov     dh, 2
lK:     mov     ch, 04h 
       mov     cl, 04h  
lL:    rol       SI, cl
       mov      bx,SI   
       mov     dl, bl   
       and      dl, 0fH 
       cmp     dl, 09   
       jbe       lC
       add      dl, 07  
lC:    add      dl, 30H
       mov      ah, 02  
       int       21H
       dec      ch 
       CMP      ch,0
       je       FINISHH     
       jnz       lL
       dec      dh
       cmp     dh, 0 
       JE FINISHH
       mov     SI, si  
       jnz       lK
       mov     ah, 4cH  
       int       21H 

       FINISHH: 
       mov     ah, 4cH  
       int       21H    
   MAIN ENDP
 END MAIN

0 ответов

Другие вопросы по тегам