装配将任何基础转换为任何基础

时间:2014-06-08 00:18:48

标签: assembly numbers base

我正在做一个输入数字和基数的程序,并将这个数字转换为任何基数。在这个初始的fase中,我从用户那里得到了数字和基数,问题是..如何验证数字是否来自该基数?

NUMBER_INPUT PROC
   jmp @again   
   @ERROR:                        

   LEA DX, ILLEGAL               
   MOV AH, 9
   INT 21H

   @AGAIN:                  
   print num
   MOV CX, 8                   
   XOR BX, BX               
   MOV AH, 1                 

   @INPUT:                      
     INT 21H                    

     CMP AL, 0DH               
     JE @END                    

     CMP AL, 30H               
     JL @ERROR               

     ; CMP AL, 31H              
     ; JG @ERROR                  

     AND AL, 0FH           
     SHL BX, 1                 
     OR  BL, AL                 
     LOOP @INPUT             
   @END:              
   RET                          
NUMBER_INPUT ENDP


BASE_INPUT PROC
   JMP @AGAIN                   

   @ERROR:               

   LEA DX, ILLEGAL               
   MOV AH, 9
   INT 21H

   @AGAIN:                  
   print base
   MOV CX, 2                     
   XOR DX, DX               
   MOV AH, 1              

   @INPUT:                   
     INT 21H                 

     CMP AL, 0DH              
     JE @END               

     CMP AL, 30H              
     JL @ERROR                          

     AND AL, 0FH                 
     SHL DX, 1             
     OR  DL, AL               
     LOOP @INPUT               

   @END:                   
   RET                        
BASE_INPUT ENDP

1 个答案:

答案 0 :(得分:0)

唯一的方法 - 如果没有约定来表示作为数字表示的一部分的数字基数,使数字基数明确,则检测任何数字的数值是否大于或等于预期的数字基数。但即使指定了数字基数,您仍然需要检查所有数字的合法性,只是为了避免产生垃圾输出。数字" A"代表价值" 10"基数10可能不会出现。" 8"没有数字基数8和更低的位置。并且可能没有" G" (我们将数值16定义为)对于十六进制是非法的。您可能希望将转换器限制为基数36,因为您使用了有意义的符号来表示数字,因为基数36可以使用0-9,A-Z。