Assembly 编写伪MIPS汇编程序并编写二进制编码

Assembly 编写伪MIPS汇编程序并编写二进制编码,assembly,mips,Assembly,Mips,我正在编写一个高级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,$

我正在编写一个高级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 
unsigned int delim = 0xF0F0F0F0;

fwrite(&delim, sizeof delim, 1, output);
我的代码应该将它们转换成32位二进制指令,然后将它们写入一个文件,由faux CPU读取

我有一个问题,文件开头的32位分隔符应该是0xF0。我知道你不能读取二进制文件,但看看我的示例文件,在用fwrite编写后,定界符由/360/360/360/360表示。为什么会出现这种情况?当我编写自己的文件时,我将如何复制这种行为,如如何使用fwrite创建其他二进制文件?

分隔符的fwrite3如下所示:

.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 
unsigned int delim = 0xF0F0F0F0;

fwrite(&delim, sizeof delim, 1, output);
这会将delim大小的一个对象写入标准C流输出

您可以使用od1或xxd1读取二进制文件:

$ 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.

Ubuntu上的hexer软件包中的hexer1程序非常类似于交互式xxd1,您可能会发现它在某一天很有用。

这很有用,但fwrite将指向数组的指针作为第一个参数,而不是intvalue@flapjackery:然后使用&delim而不是delim