2012-09-29 6 views
5

このx64のNASM-構文アセンブリを検討:NASMとアセンブル(とGNU LDとリンク)後"inc qword [rsp]"に対してこのマシンコードが生成されるのはなぜですか?

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

を、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) 

inc qword [rbp]ために生成されたコードがので理にかなっていますmodフィールドが設定されます。しかし、inc qword [rsp]を組み立てるときに24がどこから来るのか分かりません。私はcoder64 #xFFを見てきましたが、そこに24が生成されるべきことが示唆されるものはありません。私は明らかに高いレベルで何かが欠けている。

答えて

7

[RSP] ModR/Mバイトはありません。したがって、[sib] ModR/Mを使用します。 sibは、sib byteを意味し、0x24はRSPのsibバイトです。

+0

完璧、ありがとうございます! – jli

関連する問題