在 mips 汇编程序中编写棋盘的 bmp 文件
writing a bmp file of a checkerboard in mips assembler
你好,我需要在 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
你的问题是这一行:
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
用于创建的只写,以及 9
用于创建和追加的只写。它忽略模式。
你忘了说你用的是什么。
你好,我需要在 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
你的问题是这一行:
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
用于创建的只写,以及 9
用于创建和追加的只写。它忽略模式。
你忘了说你用的是什么。