Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在MIPS中打印字符串数组?_Arrays_Assembly_Printing_Mips - Fatal编程技术网

Arrays 如何在MIPS中打印字符串数组?

Arrays 如何在MIPS中打印字符串数组?,arrays,assembly,printing,mips,Arrays,Assembly,Printing,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 >=

我有一个字符串数组,我想把它们打印出来。以下是我目前拥有的:

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只用于打印字符串。我不确定接下来要做什么…

尝试使用.ascii指令,这样它就不会在字符串的末尾添加空字符。

这不是字符串数组,而是一个长字符串。您没有在任何地方记录单独单词的起始地址

另一个包含地址的数组可以在其上循环

.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。

这不是字符串数组,而是一个长字符串。你还没有在任何地方记录单独单词的起始地址。但这实际上有什么帮助?它仍然是一个巨大的字符串,没有指向单独单词的指针。这个MIPS模拟器中的字符串打印系统调用不是采用以0结尾的字符串,而不是指针+长度吗?在这种情况下,即使有指向它们的指针,将所有单词打包在一起而不使用分隔符也是不可用的。