【问题标题】:Converting numbers to hexadecimal ASCII characters in MIPS assembly在 MIPS 汇编中将数字转换为十六进制 ASCII 字符
【发布时间】: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


【解决方案1】:

让我们考虑一下。

Number    Ascii (hex)
0            30
1            31
2            32
3            33
4            34
5            35
6            36
7            37
8            38
9            39
A            41
B            42
C            43
D            44
E            45
F            46

所以我们看到一个简单的模式:如果我们的 4 位数大于 0x39,则将 0x37 添加到该数字。否则,添加 0x30。 (您可能需要执行 andi $a0,$a0,0x0F 以切断最低 4 位以外的所有内容。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    相关资源
    最近更新 更多