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

My assembler doesn't seem to output 32-bit code

这是我 运行 的行为示例。

汇编以下程序时:

[BITS 32]

mov eax, 0x1234

使用:

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

我得到以下二进制输出:

B8 34 12 00 00

B8 是 'move into eax' 的操作码,它应该采用 32 位值并将其放在那里(即应该只是 B8 34 12)。而是把一个额外的 00 00 当作 64 位值。

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

你糊涂了。你有 4 个字节。 4字节是32位。不是 64 位。那将是 8 个字节。

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

考虑一下,作为反例,

[BITS 64]

mov rax, 0xCAFEBABEDEADBEEF

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

0000000 b848 beef dead babe cafe               
000000a