将字符数组转换为字符串?

Turn a character array into a string?

我正在寻找一种将字符数组转换为字符串的方法。目前,我有这个字符数组:

hexVal: .word 4 {contains '0', 'x', '8', '0'}

我正在寻找使用此数组将一些寄存器转换为字符串“0x80”的方法。起初,我尝试了加载字指令,将四个字节抓取并存储在寄存器中:

lw $t0, hexVal

但这并没有我希望的那么好。打印生成的寄存器 $t0 产生输出 0。我可以使用索引访问各种不同的字符并像这样打印它们:

addi $t1, $zero, 0              # use $t1 as our index, starting at 0
while:
     beq $t1, 3, exit           # if $t1 = 3, exit
     lb $t0, hexVal($t1)        # grab the byte at the index
     li $v0, 11                 # 11 = character print
     la $a0, $t0
     syscall                    # print the character at $t0
     addi $t1, $t1, 1           # increment index by 1
     j while
exit:
     # do something else

这将输出“0x80”。但是,对于我正在处理的程序,我需要能够将 ASCII 字符串“0x80”存储在寄存器中。这能实现吗?

字符数组和字符串的唯一区别是字符串以'\0'结尾。

因此您可以在 hexval 的末尾放置一个“\0”(这应该是一个大小为 5 的数组)。 如果不可能,请创建一个新数组并将字符复制到其中。

当你有一个字符串时,你可以使用系统调用 4 来打印它。

顺便说一下,hexVal 不是字符数组,而是单词数组,您的代码已损坏。

hexVal: .byte 4 {contains '0', 'x', '8', '0'}
hexstr: .byte 5

.text
    addi  $t0,zero,4 # i=4
    li $t1,hexVal
    li $t2,hexstr
copy:
    # copy hexval[i] to hexstr[i]
    lb $t3, 0($t1)
    sb $t3, 0($t2)
    # increments
    addi $t0,-1
    addi $t1,1
    addi $t2,1
    beq $t0,zero, copy
    nop
end:
    sb zero,0($t2) # add '[=10=]' at the end of hexStr
    # then print hexStr a string with syscall 4
    addi $v0, zero, 4 
    li $a0, hexStr
    syscall