如何在mips中读取多个字符的字符串

如何在mips中读取多个字符的字符串,mips,computer-science,Mips,Computer Science,我发现这个代码: .data buffer: .space 20 ... _readString: li $v0, 8 # Syscall 8: Read string la $a0, buffer # load byte space into address addi $a1, $zero, 20 # allot the byte space for string sy

我发现这个代码:

.data
   buffer: .space 20

...
_readString:
        li $v0, 8           # Syscall 8: Read string
        la $a0, buffer          # load byte space into address
        addi $a1, $zero, 20         # allot the byte space for string
        syscall
        jr   $ra
但我不明白。
la
addi
行在做什么?20的缓冲区空间是否意味着20个字符

我在我班的MIPS教程中发现了类似的代码:

li $v0, 8 - syscall code for reading a string
la $a0, buffer - load buffer address into register
li $a1, 20 - max. bytes for syscall to read
move $t0, $a0 - move string to $t0 to do something with it
syscall

但是为什么$a0(假定存储字符串的位置)的移动发生在系统调用之前?为什么这样做有意义?

“为什么$a0(字符串将被存储的假定位置)的移动发生在系统调用之前?”系统调用如何知道字符存储在哪里?系统调用8本身不分配内存;它依赖于调用者向它提供一些可以存储字符的内存地址。它不是只存储在$a0中吗?我不知道你的意思。一个字符串不能放入寄存器,除非每个字符串都是4个或更少的字符。那么这是如何工作的呢?它是否不断地将数据从a0移动到t0?而且永远不会有<代码>$a0将不包含字符串本身;它只是用来传递存储字符串的内存地址。在本例中,它是
缓冲区的地址。