MIPS汇编文件编写

时间:2019-12-17 22:28:47

标签: mips smips

我正在尝试写入MIPS程序集中的文件,看来我无法使其正常工作。代码很简单,但是无论我键入什么内容,$v0寄存器都会返回-1。我已经尝试了其他人的代码,但仍然最终得到了相同的结果。

代码:

filename: .asciiz "file.txt"
buffer: .asciiz "hello textual world"

.text
open_file:
    li $v0, 13      # open file
    la $a0, filename    # file name
    li $a1, 1       # write flag
    li $a2, 0       # ignore mode
    syscall
    jal print
write_to_file:  
    move $a0, $v0       # descriptor
    li $v0, 15      # write to file
    la $a1, buffer      # buffer
    li $a2, 20      # max chars to write
    syscall
    jal print
close_file: 
    li $v0, 16      # close
#   move $a0, $v0       # descriptor
    syscall
    jal print

    li $v0, 10      # exit program
    syscall

print:
    move $a0, $v0
    li $v0, 1
    syscall         # print v0
    li $v0, 11
    li $a0, '\n'
    syscall         # print '\n'
    jr $ra

输出:

-1
-1
16

-- program is finished running --

火星目录的Screenshot。注意:我知道该目录包含“ FILES.txt”而不是“ file.txt”。但是,我正在尝试创建一个新文件。

编辑:

一段时间后,我运行了程序并解决了问题。由于某种原因,我今天运行它时,第一个系统调用没有返回-1,但是问题是在{jal print“中,$v0更改了它的值,这意味着它后面的行, write_to_file标签的第一行将错误的描述符加载到$a0。另一个潜在的问题是我要打印20个字符而不是19个字符。

长话短说,我已经将文件描述符保存在$s0中,并写入了19个字符,现在程序可以正常工作了。

0 个答案:

没有答案