5

考虑这个 x64 NASM 语法程序集:

inc qword [rax]
inc qword [rcx]
inc qword [rdx]
inc qword [rbx]
inc qword [rsp]
inc qword [rbp]
inc qword [rsi]
inc qword [rdi]

使用 nasm 组装(并与 gnu ld 链接)后,objdump -d报告以下内容:

4000b0:       48 ff 00                incq   (%rax)
4000b3:       48 ff 01                incq   (%rcx)
4000b6:       48 ff 02                incq   (%rdx)
4000b9:       48 ff 03                incq   (%rbx)
4000bc:       48 ff 04 24             incq   (%rsp)
4000c0:       48 ff 45 00             incq   0x0(%rbp)
4000c4:       48 ff 06                incq   (%rsi)
4000c7:       48 ff 07                incq   (%rdi)

由于设置了 mod 字段,因此生成的代码inc qword [rbp]是有意义的。但是,我无法弄清楚24组装时的来源inc qword [rsp]。我一直在查看coder64 #xFF并没有向我暗示应该生成 24。我显然错过了更高层次的东西。

4

1 回答 1

7

没有 [RSP] ModR/M 字节。所以它使用 [sib] ModR/M。sib 表示有一个sib 字节,而 0x24 是 RSP 的 sib 字节。

于 2012-09-29T19:55:39.043 回答