Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly PEP8如果不是数字,则请求新输入_Assembly_Pep8 Assembly - Fatal编程技术网

Assembly PEP8如果不是数字,则请求新输入

Assembly PEP8如果不是数字,则请求新输入,assembly,pep8-assembly,Assembly,Pep8 Assembly,我有一段代码,可以将年份输入(转换为chari)并输出为十进制。我的问题是,如果错误地输入了一个字母或空格,程序会继续输出错误消息,但不会重新请求新的输入。例如,如果输入ABCD,将显示4次错误消息并退出 输入年份必须介于1900年和2049年(含)之间 要重现错误,请根据示例尝试使用19a0或abcd 我哪里错了 STRO welcome,d entyear:STRO inptyear,d readnomb:NOP1 initread:LDA

我有一段代码,可以将年份输入(转换为chari)并输出为十进制。我的问题是,如果错误地输入了一个字母或空格,程序会继续输出错误消息,但不会重新请求新的输入。例如,如果输入ABCD,将显示4次错误消息并退出

输入年份必须介于1900年和2049年(含)之间

要重现错误,请根据示例尝试使用19a0或abcd

我哪里错了

STRO    welcome,d 

entyear:STRO inptyear,d 
readnomb:NOP1                

initread:LDA     -1,i        
         STA     pos,d       
         LDA     0,i
         STA     integer,d         

readchar:LDA     0,i         
         CHARI   ascii,d     
         LDBYTEA ascii,d     
         CPA     0x000A,i  
         BREQ    exitentr    
         CPA     0x002F,i 
         BRLE    errlect     
         CPA     0x003A,i  
         BRGE    errlect     
         SUBA    48,i     
         STA     valint,d    
         LDX     pos,d       
         ADDX    1,i      
         STX     pos,d       
         BR      convint     

errlect: STRO    msgerr,d
         LDX     0,i
         STX     ascii,d   
         BR      readnomb   

multdix: LDA     integer,d   
         ASLA                 
         STA     inttemp,d   
         ASLA                
         ASLA                
         ADDA    inttemp,d   
         STA     integer,d   
         LDX     pos,d       
         SUBX    1,i         
         STX     pos,d       

convint: LDX     pos,d       
         CPX     0,i         
         BRGT    multdix     
         LDA     integer,d   
         ADDA    valint,d    
         STA     integer,d   
         BR      readchar    

exitentr:LDX     pos,d       
         CPX     0,i         
         BRLT    end         

dispint:LDA     integer,d
         CPA     datemin,i
         BRLT    errlect 
         CPA     datemax,i
         BRGT    errlect
         DECO    integer,d   
         STRO    msgspace,d
         BR      entyear
end:     STOP                


welcome:  .ASCII  "Enter a year to convert to decimal\n"
         .BYTE   0
inptyear: .ASCII  "Year ?: "
         .BYTE   0           
msgerr:  .ASCII  "\nWrong caracter detected, please enter a new year: "
         .BYTE   0           
msgspace:.WORD   0x0A0A      
         .BYTE   0                  

inttemp: .WORD   0
valint:  .WORD   0
pos:     .WORD   0
datemin: .EQUATE 1900
datemax: .EQUATE 2049
integer: .WORD   0
ascii:   .BYTE   0
         .END

如果在数字后按enter键,则这些: CPA 0x000A,i
BREQ EXIENTR
可能使程序终止。 实际上,在每一个无效键之后,读取都是从头开始的。 当然,除非cherecter读取被缓冲,否则终端将收集字符直到换行,然后将整个缓冲区提供给程序,以便使用CHARI读取字符

我有点猜测没有这样的缓冲