可能的寄存器地址错误将机器代码读取为二进制代码?

时间:2017-03-23 01:06:43

标签: binary disassembly opcode machine-code

我正在处理这个反汇编工作并且有点困惑。

  

将以下机器代码反汇编为操作和参数,   例如,ADD R1,R2,R3。解释整个程序的作用,或者平原   英文或C类型的伪代码注意:你需要弥补独特的   汇编代码的标签。

添加r:代码

  1. 0x00:07 FF
  2. 0x02:06 08
  3. 0x04:28 08
  4. 0x06:38 02
  5. 0x08:02 47
  6. 0x0A:3C 00
  7. here's the simple processor

    w - 将ALU输出写回寄存器文件 src1 - 第一个ALU操作数的地址 src2 - 第二个ALU操作数的地址 dst - 写入输出的地址

    以下是作业中使用的操作码

    • ADD 0x0 R [src1] + R [src2] - > R [dst]
    • SUB 0x1 R [src1] - R [src2] - > R [dst]
    • BLEZ 0xA如果R [src1]≤0,则转移到BAddr(最后6位是 地址)
    • HALT 0xF

    这是我得到的

    • 0000 0111 1111 1111
    • 0000 0110 0000 1000
    • 0001 1000 0000 0008
    • 0011 1000 0000 0001
    • 0000 0001 0010 0111
    • 0011 1110 0000 0000

    我在这里感到困惑 - 0000 0111 1111 1111查看指令表,看起来程序正在从同一个寄存器中减去并将结果放在同一个寄存器中。我对吗?我觉得这是错的。提前致谢!

1 个答案:

答案 0 :(得分:0)

我没有检查你的操作码,但你所描述的是将寄存器重置为零的一种方法。这是有道理的,因为你不知道该寄存器包含什么。其他时候使用XOR操作来获得相同的结果。