我对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
答案 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的值。
转换回来遵循相反的步骤。
是的,我实际上并没有在这里提供代码,只是简要介绍了从哪里开始。
此赋值的真正含义是十六进制到十进制和十进制到十六进制的转换。如果没有这个,你可以直接用适当的操作码读取十进制数。