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

时间:2019-03-03 10:59:18

标签: arrays string mips

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

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”存储在寄存器中。能做到吗?

1 个答案:

答案 0 :(得分:0)

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

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

有字符串时,可以使用syscall 4进行打印。

顺便说一句,hexVal不是一个char数组,而是一个单词数组,并且您的代码已损坏。

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 '\0' at the end of hexStr
    # then print hexStr a string with syscall 4
    addi $v0, zero, 4 
    li $a0, hexStr
    syscall