2012-09-29 51 views
5

Considere esto x64 montaje NASM-sintaxis:¿Por qué se genera este código de máquina para "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] 

Después de montar con nasm (y la vinculación con ld GNU), objdump -d informa lo siguiente:

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) 

el código generado para inc qword [rbp] tiene sentido ya que la campo de modificación está establecido. Sin embargo, no puedo averiguar de dónde viene el 24 al ensamblar inc qword [rsp]. He estado buscando en coder64 #xFF y nada me sugiere que se generen los 24. Obviamente me falta algo en un nivel superior.

Respuesta

7

No hay [RSP] ModR/M byte. Entonces usa el [sib] ModR/M. El hermano significa que hay un sib byte, y 0x24 es el byte de sib para RSP.

+0

Perfecto, ¡gracias! – jli

Cuestiones relacionadas