[英]How do you print an array of strings in MIPS?
我有一个字符串数组,我想将它们打印出来。 这是我目前拥有的:
data: .asciiz "foo", "bar", "hello", "elephant"...(16 of these strings)
size: .word 16
move $s0, $zero # i = 0
la $s1, data # load array
la $s2, size #load size
print_array:
bge $s0, $s2, exit # i >= size -> exit
la $a0, 0($s1) #load the string into a0
li $v0, 4 #print string
syscall
addi $s0, $s0, 1 # i++
addi $s1, $s1, 4
j print_array
exit:
jr $ra
我知道这行不通,因为li $ v0,4仅用于打印字符串。 我不确定从这里下一步该怎么做...
那不是一个字符串数组,而是一个长字符串。 您尚未在任何地方记录单独单词的起始地址。
另一个保存地址的数组将使其可以循环访问。
.section .rodata
data1: .asciz "foo"
data2: .asciz "bar"
data3: .asciz "hello"
data4: .asciz "elephant"
# ...(16 of these strings)
array_of_strings:
.word data1, data2, data3, data4, ...
.word 0 // NULL-terminate the list if you want, instead of using the end-address
array_of_strings_end:
# Or calculate the size at assemble time (/4 to scale by the word size, so it's an element count not a byte count)
# storing the size in memory is pointless, though; make it an assemble-time constant with .equ
.equ size, (array_of_strings_end - array_of_strings)/4
另请注意,它是.asciz
而不是.asciiz
。
尝试使用.ascii
指令,以免在字符串末尾添加空字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.