0

我对 PEP/8 真的很陌生,并且在为我的课程设置练习实验室时遇到了一些困难。目标是要求用户在 HHHH+FFFF 或 HHHH-FFFF 形式下输入 2 个十六进制数进行加法或减法(不接受其他输入)

根据我的老师的说法,我需要让我的代码从用户输入中逐个字符地读取,然后根据第 5 位的符号执行计算。我该怎么做呢?

另外,我似乎找不到直接添加或减去十六进制的方法,我是否必须将 HHHH 和 FFFF 转换为十进制,然后对十进制数执行计算,然后再转换回十六进制以输出?

最后,在我的基本欢迎信息中,它应该打印出“请输入您的计算:”但终端总是打印“请输入您的计算:A”......为什么会出现一个 A?

对于最后一部分,我的代码是:

              Br     main 
hello_ms: .ASCII "Please input your calculation: "

main:  stro hello_ms, d 

stop
.end
4

1 回答 1

2

这是您最后一部分的答案 - 汇编语言中的字符串似乎需要手动NUL终止:

hello_ms:   .ASCII "Please input your calculation:\x00" 

我以前没有为这个汇编程序编写过代码,所以我边看边学,但我有足够的其他语言经验,知道你需要做以下事情:

要将 ASCII 字符代码转换为十六进制,您需要比较字符值是否介于'0'和之间,如果是,则从中'9'减去。'0'如果它介于'A'和之间'F',则需要从中减去'A' - 10。这应该让您最终将一个从 0 到 15 的数字输入您的累加器。

要添加/减去多个数字,您需要将每个十六进制数字读取 8 位的值“移位”到另一个寄存器中,然后每个数字再次执行上述步骤(总共 4 次)请注意,您可能需要读取这些值根据您阅读输入的顺序,从后向前或 24/16/8 轮班。


转换回来遵循相反的步骤。

是的,我实际上并没有将代码放在这里,而只是概述了从哪里开始。

这个赋值的真正内容是十六进制到十进制和十进制到十六进制的转换。没有这个,你可以直接用适当的操作码读取十进制。

于 2017-06-01T19:08:45.387 回答