Assembly 使用Mips程序集从txt文件读取和打印内容

Assembly 使用Mips程序集从txt文件读取和打印内容,assembly,printing,mips,Assembly,Printing,Mips,我正在尝试读取并打印.txt文件中的内容。 稍后,我还想从mips读取转储的文件。 我看到了代码,看起来还可以,但是没有输出任何内容 .data myFile: .asciiz "teste.txt" # filename for input buffer: .space 1024 .text # Open file for reading li $v0, 13 # system call for open file la $a0, myFile

我正在尝试读取并打印.txt文件中的内容。
稍后,我还想从mips读取转储的文件。
我看到了代码,看起来还可以,但是没有输出任何内容

.data  
myFile: .asciiz "teste.txt"      # filename for input
buffer: .space 1024
.text

# Open file for reading

li   $v0, 13          # system call for open file
la   $a0, myFile      # input file name
li   $a1, 0           # flag for reading
li   $a2, 0           # mode is ignored
syscall               # open a file 
move $s0, $v0         # save the file descriptor  


# reading from file just opened

li   $v0, 14        # system call for reading from file
move $a0, $s0       # file descriptor 
la   $a1, buffer    # address of buffer from which to read
li   $a2,  11       # hardcoded buffer length
syscall             # read from file


# Printing File Content
li  $v0, 4          # system Call for PRINT STRING
la  $a0, buffer     # buffer contains the values
syscall             # print int

li $v0, 10      # Finish the Program
syscall

问题是关于我的文件的路径。
我以为路径将从源代码开始,但它是从
.jar
文件开始的

我所要做的就是用double
\\

.data
myFile: .asciiz "c:\\Users\\johnDoe\\Documents\\Assembly\\test.txt" # filename for input

在调试器中单步执行代码。检查系统调用返回值(在调试器中)是否有错误。或者更好,跟踪系统调用。IDK,如果MARS或SPIM有,但Linux有(
strace
)。当然,Linux使用的系统调用与MARS或SPIM不同。无论如何,如果您在不同点包含来自调试器的寄存器值,这将是一个更好的选择。谢谢您的帮助。但我不知道如何在这里删除代码,将F3+F7、F7、F7等分。。。还有,有没有办法确保文件被正确读取?因为即使我将文件名更改为无效文件名,也不会显示错误/警告…@PeterCordes现在我使用
blq$v0,-1,error
检查
$v0
是否返回负值,这意味着打开文件时出错。。。有没有办法打印错误消息?大多数调试器都会向您显示寄存器内容和内存。检查文档。查看syscall文档,了解哪些错误返回值意味着什么。(在Linux中,syscalls返回-errno,例如,使用错误的文件名打开将返回
-enoint
,这在x86-64 Linux上是
-2
。请参阅asm generic/errno base.h。但是Mars或SPIM系统调用可能使用不同的常量,即使它们使用相同的
-error\u code
约定。)