【发布时间】:2023-01-31 01:57:48
【问题描述】:
我目前正在做一项作业,我需要编写一个名为“hexasc”的汇编语言子例程,将 0 到 15 范围内的数字转换为可打印的 ASCII 编码字符(“0”到“9”,或“A” ' 到 'F',具体取决于数量)。我正在使用 MARS 模拟器。
我曾尝试使用基本的汇编语言指令(如“li”和“move”)编写子例程,但我无法获得所需的输出。这是我到目前为止编写的代码:
hexasc: li $v0, 48 add $v0, $a0 jr $ra
对于如何正确实施此子例程的任何帮助或指导,我将不胜感激。在不使用任何寄存器(如 s0-s7、gp、sp、fp 和 ra)的情况下,我特别难以将输入数字转换为相应的 ASCII 字符。
这就是我现在所拥有的:
`#hexmain.asm
.text
主要的: 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 编写你自己的代码`
【问题讨论】:
-
当然可以使用条件分支吗?只需检查该值是否大于 9,然后添加一个不同的常量即可将您带到字母。
-
你不必在汇编中思考就可以做到这一点。可以使用任何语言来处理数字和字符,因此请使用您知道的语言来计算算法,然后将该算法用于汇编。
标签: assembly mips mars-simulator