0

我正在尝试为我的其他程序编写输入验证。如果输入小于 -32,768 或大于 32,767,程序必须打印一条错误消息并要求重复输入,直到它得到一个范围内的数字(我必须使用循环)。我知道下面的代码有一些逻辑错误。我试图修复它,但它只会导致其他逻辑错误。这很奇怪,因为超出范围的数字与范围内的数字重叠。例如,-32,770,当添加到累加器时,是 32,766(在范围内)。这是我到目前为止所拥有的:

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
4

1 回答 1

0

你能得到大于 16 位的十进制/数字输入吗?例如,您可以输入一个 32 位数字吗?如果是这样,您可以轻松检查高 16 位是否被清除。

编辑

DECI 指令设置 NZV 标志。

于 2012-04-23T06:27:54.287 回答