我正在寻找一种将字符数组转换为字符串的方法。目前,我有以下字符数组:
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 :(得分: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