在mips汇编程序中写一个棋盘的bmp文件

时间:2015-01-07 01:14:40

标签: assembly mips fopen fwrite bmp

嗨我需要在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

1 个答案:

答案 0 :(得分:0)

你的问题就在这一行:

li  $a1, 0x8301    # flags WRITE|CREATE|TRUNCATE|BINARY

不确定从哪里获取值,但标准unix中没有BINARY,其他的是O_WRONLY=1O_CREAT=0x40O_TRUNC=0x200,所以正确值为0x241

仅当给定环境使用unix值时才适用。 SPIM确实如此,但MARS例如记录为仅实现三个标志值:0表示只读,1表示只写,带有create,{{1}使用create和append进行只写。它忽略了模式。

你忘了说你在用什么。