0

我有一个在 Pep/8 Assembly 中测试过的代码,它接受一个字符 ><= 的输入并进行比较。完成比较并完成适当的数学运算后,我希望程序提示用户输入另一个输入。

我不知道为什么,但我的程序正在对输入进行滚动,因为如果它发现一个“无效”输入,它就会直接进入退出程序的条件。我假设此时这是一个回车问题。有什么办法可以在再次提示之前清除“猜测”的内容?

     CHARI     guess,d     ;character input
     LDBYTEA   guess,d     ; load character into reg a
     CPA       '>',i
     BRNE      L

任何帮助都会有所帮助,谢谢。

4

1 回答 1

0

您可能会遇到一些问题。

如果您的第一个数字大于 255,您可能会遇到 LDBYTEA 问题,因为它只替换了寄存器的最后 8 位。使用快速测试程序很容易看到这一点。

 LDA      0x0123,i
 LDBYTEA  0x01,i
 STOP
 .END

(以累加器结束,值为 0x0101)

CPA 将检查寄存器的所有 16 位,如果前 8 位未设置为 0,这将导致它不匹配 > < 或 =。您可以通过在加载字节之前加载 0 或通过执行来解决此问题与 0x00FF (255) 的 AND 清除前 8 位。


当用户按下回车键时,这算作您必须处理的字符。忽略它的最佳选择是检查输入字符是否为“\n”(0x0A),如果是,则分支回字符输入。

guess:   .BYTE   0
main:    CHARI   guess,d
         LDBYTEA guess,d
         CPA     '\n',i
         BREQ    main
         STOP
         .END

如果必须清除guess 的内容,可以通过将诸如0 的值加载到寄存器中,然后将其保存在guess 中来实现。

 LDA     0,i
 STA     guess,d

如果您的累加器中有不想覆盖的东西,您可以使用变址寄存器。(LDX 和 STX)

当然,您可以进行另一个字符输入,这将覆盖guess 的内容。


如果您仍然遇到问题,请使用“开始调试源”选项逐步完成。(看起来像一个绿色箭头,底部有一只小甲虫)

于 2016-12-11T13:13:26.213 回答