我的汇编程序似乎不输出 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
这是我 运行 的行为示例。
汇编以下程序时:
[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