Assembly 输入验证(Pep8汇编程序)

Assembly 输入验证(Pep8汇编程序),assembly,Assembly,我正在尝试为我的另一个程序编写输入验证。如果输入小于-32768或大于32767,程序必须打印错误消息并要求重复输入,直到它得到一个在范围内的数字(我必须使用循环)。我知道下面的代码有一些逻辑错误。我试图修复它,但它只会导致其他逻辑错误。这很奇怪,因为超出范围的数字与范围内的数字重叠。例如,-32770添加到累加器时为32766(在范围内)。这就是我到目前为止所做的: BR isless input: .BLOCK 2 hello_ms: .ASCII "Enter a n

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

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

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

编辑


DECI指令设置NZV标志。

既然您写了那么多,没有理由不能自己完成。所有需要的片段和逻辑都存在。现在只需要检查代码是否符合规范。我仍然感到困惑,因为:“-32770,当添加到累加器中时,是32766(在范围内)。”我在睡眠不足的情况下运行,这个任务将在一小时后完成。我非常感谢您的帮助。整数中有16位,一位用来表示数字是否为负数,可以表示的数字范围是-32768+32767所以当你把一加到32767,你得到一个负数,当你把-32768减去一,你得到一个正数。我知道了,但我仍然不能写一个工作代码。-32770比-32768小。如果结果是32766,我打赌累加器以-3开始…在这种情况下,deci指令必须提供一些标志来告诉您输入数字是否适合16位,如进位标志。否则,任何数字都会在该范围内。查看指令集,我可以看到它修改了NZV标志。看一看。嗯,13分钟后就到期了。。我想我会丢分的=(在Jens的指导下,没有理由使用16位或32位边界,您可以进行15位数学、12位或8位或任何将值拆分到两个位置/寄存器的操作。这使得溢出更容易检测,而不需要处理器特定的标志。如果是标志,您应该找到的可能是v标志如果有一个(有符号溢出)进位是无符号溢出你的问题与有符号溢出有关。实际上,v标志通常是有符号溢出,我不知道这个处理器是否一致,你必须检查每条指令对标志的作用。