Assembly PEP8如果不是数字,则请求新输入
我有一段代码,可以将年份输入(转换为chari)并输出为十进制。我的问题是,如果错误地输入了一个字母或空格,程序会继续输出错误消息,但不会重新请求新的输入。例如,如果输入ABCD,将显示4次错误消息并退出 输入年份必须介于1900年和2049年(含)之间 要重现错误,请根据示例尝试使用19a0或abcd 我哪里错了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
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读取字符 我有点猜测没有这样的缓冲