我一直是高層次的編碼器,以及架構是相當新的給我,所以我決定在這裏閱讀關於大會教程:對齊堆棧是什麼意思?
http://en.wikibooks.org/wiki/X86_Assembly/Print_Version
遠了教程,如何轉換的說明你好,世界!程序
#include <stdio.h>
int main(void) {
printf("Hello, world!\n");
return 0;
}
成等價的彙編代碼被給和產生以下情況:
.text
LC0:
.ascii "Hello, world!\12\0"
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
call __alloca
call ___main
movl $LC0, (%esp)
call _printf
movl $0, %eax
leave
ret
對於線中的一條,
andl $-16, %esp
的解釋是:
該代碼「和」ESP與0xFFFFFFF0, 將堆棧與下一個 最低的16字節邊界對齊。對Mingw的源代碼 的檢查揭示,這可能是針對出現在「_main」 例程中的SIMD 指令,其僅在對齊的 地址上操作。由於我們的例程不包含 包含SIMD指令,此行 是不必要的。
我不明白這一點。有人能給我一個解釋,說明將堆棧與下一個16字節邊界對齊的意義,以及爲什麼它是必需的? andl
如何實現這一目標?
http://en.wikipedia.org/wiki/Data_structure_alignment – chrisaycock 2010-11-13 23:33:57
在沒有啓用優化器的情況下查看機器代碼沒什麼意義。 – 2010-11-14 01:23:31