-1

该程序是一个基本的小计算器,可以添加、减去或否定答案中的任何数字。add、subtract 和 quit 选项工作正常,但每当我使用 NI 时,都无法在其后输入任何内容。我假设 elseif2 出了点问题,但是在玩弄它之后,我无法理解它。我是错误地设置了整个问题还是可以按原样修复?

链接到 Pep/8 代码

4

1 回答 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 回答