Assembly 使用Mips程序集从txt文件读取和打印内容
我正在尝试读取并打印.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
稍后,我还想从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
约定。)