PEP / 8:对4字节十六进制执行加法

时间:2017-06-01 18:48:38

标签: assembly pep8-assembly

我对PEP / 8非常陌生,而且我的课程练习实验室有点困难。目标是要求用户输入2个十六进制数,以HHHH + FFFF或HHHH-FFFF格式添加或减去(不接受其他输入)

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

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

最后,在我的基本欢迎信息中,它应打印出来"请输入您的计算:"但终端始终打印"请输入您的计算:A" ...为什么出现A?

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

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

main:  stro hello_ms, d 

stop
.end

1 个答案:

答案 0 :(得分:2)

以下是您上一部分的答案 - 看来汇编语言中的字符串需要手动NUL终止:

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

之前我没有为这个汇编编码,所以我在阅读时学习,但我有足够的其他语言经验,知道你需要做以下事情:

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

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

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

是的,我实际上并没有在这里提供代码,只是简要介绍了从哪里开始。

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