$a1=flag 和 $a2=mode 寄存器在 MIPS 中的含义
Meaning of $a1=flag and $a2=mode registers in MIPS
我不明白寄存器 $a1 和 $a2 在做什么。在这本书 http://spimsimulator.sourceforge.net/HP_AppA.pdf 中没有描述 $a1 或 $a2 中的 1 或 0 应该是什么意思。只有:
$a0 = 文件名(字符串),$a1 =
标志,$a2 = 模式。
哪些标志和什么模式?没有解释。
例如在这段代码中:
#write on file
#open
li $v0, 13 # system call for open file
la $a0, fout # load address of output file
li $a1, 1 # Open for reading
li $a2, 0
syscall # open a file (file descriptor returned in $v0)
move $s6, $v0 # save the file descriptor
#write
li $v0, 15 # system call for write to file
move $a0, $s6 # file descriptor
la $a1, buffer # address of buffer which to write
li $a2, 30 # buffer length
syscall # write to file
#close
li $v0, 16 # system call for close file
move $a0, $s6 # file descriptor to close
syscall # close file
我不知道这是否在 SPIM 的任何地方记录(源代码除外),但对于 MARS,以下内容应该是正确的:
flags: 0 = read-only
1 = write-only with create
9 = write-only with create and append
mode: Ignored.
编辑: 我检查了 SPIM's source code, and it appears to just pass $a1
and $a2
on as flags
and mode
to open
。
我不明白寄存器 $a1 和 $a2 在做什么。在这本书 http://spimsimulator.sourceforge.net/HP_AppA.pdf 中没有描述 $a1 或 $a2 中的 1 或 0 应该是什么意思。只有: $a0 = 文件名(字符串),$a1 = 标志,$a2 = 模式。 哪些标志和什么模式?没有解释。 例如在这段代码中:
#write on file
#open
li $v0, 13 # system call for open file
la $a0, fout # load address of output file
li $a1, 1 # Open for reading
li $a2, 0
syscall # open a file (file descriptor returned in $v0)
move $s6, $v0 # save the file descriptor
#write
li $v0, 15 # system call for write to file
move $a0, $s6 # file descriptor
la $a1, buffer # address of buffer which to write
li $a2, 30 # buffer length
syscall # write to file
#close
li $v0, 16 # system call for close file
move $a0, $s6 # file descriptor to close
syscall # close file
我不知道这是否在 SPIM 的任何地方记录(源代码除外),但对于 MARS,以下内容应该是正确的:
flags: 0 = read-only
1 = write-only with create
9 = write-only with create and append
mode: Ignored.
编辑: 我检查了 SPIM's source code, and it appears to just pass $a1
and $a2
on as flags
and mode
to open
。