2015-01-07 2 views
-2

привет, мне нужно написать программу в mips-ассемблере, где я должен создать шахматную доску, которая тоже будет сохранена и записана в файл BMP, скомпилировать эту программу, у нее есть проблема с написанием файла, потому что он перескакивает прямо на мое сообщение об ошибке, может кто-то, пожалуйста, помогите мне с этой проблемой. Вот код:Запись файла BMP в шахматной доске в mips-ассемблере

.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

Используйте отладчик/симулятор, чтобы пройти через код и посмотреть, где он идет не так. – Jester

+0

Я сказал, где он идет не так, он не ветвится, если больше или равен нулю, но идет straigt в file_open_error сообщение, и я не знаю, почему ?? любая помощь? –

+0

Неясно, какую ошибку вы имели в виду. Кроме того, если это ошибка открытия файла, уменьшите свой код, чтобы открыть файл. См. [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). – Jester

ответ

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 и 9 для записи только с созданием и добавлением. Он игнорирует режим.

Вы забыли сказать, что используете.

+0

им использовать Марс им жаль, поэтому я предполагаю, что хочу использовать 9 с режимом игнорирования да? –