Pep / 8 Assembly - 找到正确的分支

时间:2014-10-31 22:47:11

标签: assembly pep8-assembly

该程序是一个基本的小计算器,可以添加,减去或否定任何数字。添加,减去和退出选项工作正常,但每当我使用N时,我无法输入任何内容。我假设在elseif2中出现了问题但在玩完之后,我无法绕过它。我是否错误地设置了整个问题,或者它是否可以修复?

Link to Pep/8 code

1 个答案:

答案 0 :(得分:1)

问题是由pep8寄存器和大多数操作都是16位但LDBYTE仅修改低8位这一事实引起的。这意味着,如果A的前8位设置为非零值,则在将下一个输入加载到低位后,所有字母比较都不会匹配。否定正值将触发此因为它按照通常的二进制补码算法将最高有效位设置为1。

解决方案是确保清除顶部位,例如在A之前将LDBYTE置零,或者之后使用AND将其屏蔽掉。

如果你使用了pep8模拟器的跟踪功能,你自己可以看到这个问题:

0072  LDBYTEA  0003,d    D10003   FF51   00CE    FBCF    1 0 0 0   5100

FF51有累加器,保持我输入的Q的ascii代码为低8位,但FF位于前一个否定的前8位。 / p>

另请注意,CHARI还会在用户输入结束时返回换行符,以防它未被使用,因此我建议您也为此添加一个检查。