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