我的汇编程序似乎没有输出32位代码

时间:2017-07-03 01:44:23

标签: assembly nasm

这是我遇到的行为的一个例子。

组装以下程序时:

[BITS 32]

mov eax, 0x1234

使用:

nasm -f bin in.asm -o out.bin

我得到以下二进制输出:

B8 34 12 00 00

B8是'进入eax'的操作码,它应该采用32位值并将其放入那里(即应该只是B8 34 12)。但是相反,它会额外添加00 00,就像它是64位值一样。

我不知道这是否是NASM特有的问题,因为我还没有尝试过其他的汇编程序。

1 个答案:

答案 0 :(得分:2)

你很困惑。你有4个字节。 4个字节是32位。不是64位。那将是8个字节。

一对十六进制数字是一个字节,这就是反汇编输出将事物分组成十六进制数字对的原因。

作为一个反例,考虑一下

int x = 1;
//would print 2 as first statement will increment x and then x will be stored
int x = ++x;
System.out.println(x);

可以组装(然后转储到十六进制)以生成

[BITS 64]

mov rax, 0xCAFEBABEDEADBEEF