我正在通過比較一個c程序和它的程序集等價來學習程序集。程序集「mov」指令
這是代碼。
.file "ex3.c"
.section .rodata
.LC0:
.string "I am %d years old.\n"
.LC1:
.string "I am %d inches tall.\n"
.text
.globl main
.type main, @function
main:
pushl %ebp //establish stack frame//
movl %esp, %ebp //move esp into ebp, all contents saved down stack//
andl $-16, %esp //16 from esp for local var space//
subl $32, %esp//stack frame reserving - 32 bytes//
movl $10, 24(%esp)
movl $72, 28(%esp)
movl 24(%esp), %eax
movl %eax, 4(%esp)
movl $.LC0, (%esp)
call printf
movl 28(%esp), %eax
movl %eax, 4(%esp)
movl $.LC1, (%esp)
call printf
movl $0, %eax
leave
ret
.size main, .-main
.ident "GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2"
.section .note.GNU-stack,"",@progbits
對於此行:
movl $10, 24(%esp)
如果我沒有理解它正確跟它移動值爲10到ESP寄存器。但是24是幹什麼的?我不認爲它移入ESP,因爲要移動的「$」(我認爲)
「將10的值移入esp寄存器」 - 不。 esp周圍的括號表示間接。 24是位移,又名偏移量。 –
在Intel語法中,它會更容易理解:'mov dword ptr [esp + 24],10' –