2016-06-18 18 views
1

我正在編寫一個asm程序,我知道一點,但沒有專家。我正在使用火星模擬器。我不明白的部分是如何創建一個文件,並使其具有特定的擴展名,如file.vig?我想要的是創建一個文件,給我想要的名字,寫入它。迄今爲止,這一切都沒有奏效。我有其餘的程序工作,但不是在火星運行時創建和修改這個文件。Assembly MIPS - 創建一個文件,具體擴展名爲

資源指向字符串

filename是一個字符串,如:file.vig

li $v0, 13  # system call for open file 
la $a0, FileName # output file name 
li $a1, 577  # Open for writing (flags are 0: read, 1: write) 
li $a2, 0x1ff  # was recommended for file permissions 
syscall    # open a file (file descriptor returned in $v0) 
move $s6, $v0  # save the file descriptor 

#寫入文件剛打開

li $v0, 15  # system call for write to file 
move $a0, $s6  # file descriptor 
la $a1, res  # address of buffer from which to write 
li $a2, 15  # hardcoded buffer length 
syscall 
move $a0, $s6 
li $v0, 16   # close 
syscall 
li $v0, 10 
syscall 

回答

1

你沒有檢查返回來自您的open系統調用的值。它正在返回-1因爲你正在加載$a1與577和不是 1 [它不是很像libc,並對此值挑剔]。

這是你的計劃,略作調整,以演示這一點,重試與正確的選項打開[請原諒無償風格清理]:

.data 
FileName: .asciiz "file.vig" 
bad_msg: .asciiz "open syscall failed\n" 
ok_msg:  .asciiz "open was okay\n" 
res:  .byte 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 

    .text 
    .globl main 
main: 
    li  $a1,577     # Open for writing (flags are 0: read, 1: write) 
    li  $a2,0x1ff    # was recommended for file permissions 

main_retry: 
    li  $v0,13     # system call for open file 
    la  $a0,FileName   # output file name 

    syscall       # open a file (descriptor returned in $v0) 
    move $s6,$v0     # save the file descriptor 
    bltz $s6,main_fail   # did open fail? fly if yes 

    la  $a0,ok_msg 
    li  $v0,4 
    syscall 

    # Write to file just opened 
    li  $v0,15     # system call for write to file 
    move $a0,$s6     # file descriptor 
    la  $a1,res     # address of buffer from which to write 
    li  $a2,15     # hardcoded buffer length 
    syscall 

    move $a0,$s6 
    li  $v0,16     # close 
    syscall 

main_exit: 
    li  $v0,10 
    syscall 

main_fail: 
    la  $a0,bad_msg 
    li  $v0,4 
    syscall 

    li  $a1,1     # correct write mode (O_WRONLY) 
    li  $a2,0     # file permissions are ignored by mars 
    j  main_retry 
相關問題