2011-12-31 47 views
1

我正在編寫高級MIPS彙編程序。我在試圖讓fwrite正確輸出時遇到麻煩。一個例子彙編文件看起來是這樣的:編寫僞MIPS彙編程序和fwrite進行二進制編碼

.text 
    addi $t0,$0,7 
    addi $t1,$0,1 
L1: 
    beq $t0,$0,DONE 
    mult $t1,$t0 
    mflo $t1 
    addi $t0,$t0,-1 
    j L1 
DONE: 
    add $a0,$0,$t1 
    addi $v0,$0,1 
    syscall 
    addi $v0,$0,10 
    syscall 

我的代碼應該將這些轉換爲32位的二進制指令和fwrite他們到一個文件由人造CPU讀取。

我有一個問題,在文件開頭的32位分隔符應該是0xf0f0f0f0。我知道你不能「讀」一個二進制文件,但是看看我有的示例文件,在用fwrite寫入分隔符後,分隔符代表/ 360/360/360/360。爲什麼當我編寫自己的文件時(如何使用fwrite來實現此目的以創建其他二進制文件),我將如何複製該行爲?

回答

0

fwrite(3)爲您的分隔符應該是這樣的:

unsigned int delim = 0xF0F0F0F0; 

fwrite(&delim, sizeof delim, 1, output); 

這寫delim的大小的一個對象標準C流output

您可以使用od(1)xxd(1)「讀」二進制文件:

$ od -bc /etc/passwd 
0000000 162 157 157 164 072 170 072 060 072 060 072 162 157 157 164 072 
      r o o t : x : 0 : 0 : r o o t : 
$ xxd /etc/passwd 
0000000: 726f 6f74 3a78 3a30 3a30 3a72 6f6f 743a root:x:0:0:root: 
0000010: 2f72 6f6f 743a 2f62 696e 2f62 6173 680a /root:/bin/bash. 

(該hexer(1)程序(在hexer軟件包在Ubuntu)是很多像一個互動xxd(1),您可能會發現一些有用的一天。)

+0

這很有用,但是fwrite需要一個指向數組的指針作爲第一個參數,而不是一個int值 – mathjacks 2011-12-31 18:10:58

+0

@flapjackery:然後使用&delim代替delim – BlackBear 2011-12-31 20:12:37

+0

男人,我覺得很傻。 :) – sarnold 2011-12-31 23:37:33