该程序是一个基本的小计算器,可以添加、减去或否定答案中的任何数字。add、subtract 和 quit 选项工作正常,但每当我使用 NI 时,都无法在其后输入任何内容。我假设 elseif2 出了点问题,但是在玩弄它之后,我无法理解它。我是错误地设置了整个问题还是可以按原样修复?
问问题
679 次
1 回答
1
问题是由于 pep8 寄存器和大多数操作都是 16 位但LDBYTE
只修改了低 8 位这一事实引起的。这意味着,如果将前 8 位A
设置为非零,则在将下一个输入加载到低位后,所有字母比较都不会匹配。否定一个正值将触发此操作,因为它根据通常的二进制补码算法将最高有效位设置为 1。
解决方案是确保清除最高位,例如通过A
在 之前清零LDBYTE
或在之后使用屏蔽它AND
。
如果您使用 pep8 模拟器的跟踪功能,您自己可能已经看到了这个问题:
0072 LDBYTEA 0003,d D10003 FF51 00CE FBCF 1 0 0 0 5100
FF51
有一个累加器,将 I 输入的 ascii 代码保存在Q
低 8 位中,但FF
在前一个否定的前 8 位中。
另请注意,CHARI
如果尚未使用,还会在用户输入末尾返回换行符,因此我建议您也为此添加一个检查。
于 2014-11-01T01:55:54.493 回答