我目前正在写一个汇编语言子程序“hexasc”,它将0到15范围内的数字转换成可打印的ASCII编码字符(“0”到“9”,或“A”到“F”,取决于数字)。
我曾尝试使用基本的汇编语言指令(如“li”和“move”)编写子例程,但我在获得所需的输出时遇到了麻烦。以下是我迄今为止编写的代码:hexasc: li $v0, 48 add $v0, $a0 jr $ra
我将非常感谢任何关于如何正确实现这个子例程的帮助或指导。我特别难以在不使用任何寄存器(如s 0-s7、gp、sp、fp和ra)的情况下将输入数字转换为相应的ASCII字符。
这是我现在所拥有的
'#十六进制. asm
.text
main:li $a0,0 #更改此选项以测试不同的值
jal hexasc # call hexasc
nop # delay slot filler (just in case)
move $a0,$v0 # copy return value to argument register
li $v0,11 # syscall with v0 = 11 will print out
syscall # one byte from a0 to the Run I/O window
stop:j stop #一次运行后停止nop #延迟时隙填充器(以防万一)
hexasc:#您可以在此处编写自己的hexasc代码'
1条答案
按热度按时间bakd9h0s1#
让我们想一想。
所以我们看到一个简单的模式:如果我们的4位数大于0x39,则将0x37加到该数字上,否则,将0x30加到该数字上(您可能需要执行
andi $a0,$a0,0x0F
,以截断最低4位以外的所有内容)。编辑:我没有很好地解释为什么我们在大于9的数字上加0x37。