在 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=1O_CREAT=0x40O_TRUNC=0x200,所以正确的值为 0x241.

当然,这仅适用于给定环境使用 unix 值的情况。 SPIM 可以,但是 MARS 例如被记录为仅实现三个标志值:0 用于只读,1 用于创建的只写,以及 9 用于创建和追加的只写。它忽略模式。

你忘了说你用的是什么。