嗨我需要在mips汇编程序中编写一个程序,我要创建一个太多保存并写入bmp文件的棋盘,编译这个程序它有写入文件的问题,因为它直接跳到我的错误信息有人可以帮我解决这个问题。这是代码:
.data
file_open_error: .asciiz "Open file error\n"
bmp_file: .asciiz "chkboard.bmp"
.text
main:
#----Write .BMP file (header+data)----
li $v0, 13 # open file
la $a0, bmp_file # file path
li $a1, 0x8301 # flags WRITE|CREATE|TRUNCATE|BINARY
li $a2, 0x1a4 # 0644 UNIX mode (rw-r--r--)
syscall
bgez $v0, write_file
li $v0, 4 # print string
la $a0, file_open_error
syscall
write_file:
li $v0, 10 # exit the program
syscall
答案 0 :(得分:0)
你的问题就在这一行:
li $a1, 0x8301 # flags WRITE|CREATE|TRUNCATE|BINARY
不确定从哪里获取值,但标准unix中没有BINARY
,其他的是O_WRONLY=1
,O_CREAT=0x40
和O_TRUNC=0x200
,所以正确值为0x241
。
仅当给定环境使用unix值时才适用。 SPIM
确实如此,但MARS
例如记录为仅实现三个标志值:0
表示只读,1
表示只写,带有create,{{1}使用create和append进行只写。它忽略了模式。
你忘了说你在用什么。