[問題] 新手請教有關main的前置asm code

看板ASM (組合語言)作者 (啦啦)時間16年前 (2008/04/07 12:33), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串1/1
像如下的是普通C code compile出來的asm int main(void) { 401050: 55 push %ebp 401051: 89 e5 mov %esp,%ebp 401053: 83 ec 08 sub $0x8,%esp 401056: 83 e4 f0 and $0xfffffff0,%esp 常常看到c編譯出來的asm code一開始main都大概如下的長相 前幾行跟一般函數呼叫要做的差不多 還算大概知到要先保存ebp,然後再把esp存成新的ebp 之後sub esp預留區域變數的空間 但再來的and -16,目的是什麼呢, 無法理解已經弄好的esp為什麼要清空後面4bit? 這行在呼叫函數好像沒看到? 由於手邊目前沒書,想請問一下這行是要做什麼呢? (還是說我跟本搞錯了, 因為main在第一行C code之前補的code我常不知道在做什麼的 看code總感覺在做白工,有做沒做差不多的樣子) 問題好像很笨,有點新,還請不另賜教 @@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.224.26.164

04/07 14:53, , 1F
我猜啦...那是為了讓他對齊在2的冪次方的位址上
04/07 14:53, 1F

04/11 21:35, , 2F
對齊16的倍數 有些指令有這要求
04/11 21:35, 2F

04/12 08:24, , 3F
SSE指令要直接對記憶體存取 幾乎都是要align 16
04/12 08:24, 3F
文章代碼(AID): #17-QGgAJ (ASM)
文章代碼(AID): #17-QGgAJ (ASM)