我正在尝试为我的其他程序编写输入验证。如果输入小于-32,768或大于32,767,则程序必须打印错误消息并要求重复输入,直到它得到一个在该范围内的数字(我必须使用循环)。我知道下面的代码有一些逻辑错误。我试图解决它,但它只是导致其他逻辑错误。这很奇怪,因为范围外的数字与范围内的数字重叠。例如,-32,770,当添加到累加器时,是32,766(在范围内的IS)。这就是我到目前为止所做的:
BR isless
input: .BLOCK 2
hello_ms: .ASCII "Enter a number: \x00"
error_ms: .ASCII "Wrong input, must be in the range -32,768 through 32,767. Enter a number: \x00"
thanx: .ASCII "Thank you!\x00"
;
isless: STRO hello_ms, d
DECI input, d
LDA input, d
CPA 32767, d ;-32769
BRLE whileL
BR isgrter
whileL: STRO error_ms, d
DECI input, d
LDA input, d
CPA 32767, i
BRLE whileL
BR isgrter
isgrter: LDA input, d
CPA -32768, i
BRGE whileG
BR endwh
whileG: STRO error_ms, d
DECI input, d
LDA input, d
CPA -32768, i
BRGE whileG
BR endwh
endwh: STRO thanx, d
STOP
.END
答案 0 :(得分:0)
你能得到大于16位的十进制/数字输入吗?你可以输入一个32位的数字吗?如果是这样,您可以轻松检查是否清除了更高的16位。
修改强>:
DECI指令设置NZV标志。