如何在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将不包含字符串本身;它只是用来传递存储字符串的内存地址。在本例中,它是
缓冲区的地址。