年入力を(chariに)変換し、10進数として出力するこのコードがあります。私の問題は、誤って文字または空白が入力された場合、プログラムはエラーメッセージを出力し続けますが、新しい入力を再要求しません。たとえば、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