0
我有这个代码将年份输入(转换为chari)并将其输出为十进制。我的问题是,如果错误地输入了一个字母或空格,程序将输出错误信息,但不会重新输入新的输入。例如,如果输入ABCD,它会给你4次错误信息并退出。PEP8要求一个新的输入,如果不是数字
输入年份必须在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