[問題] pascal call convention in c

看板C_and_CPP作者 (返無)時間13年前 (2012/11/19 09:36), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/3 (看更多)
請參考 blog 程式碼, http://descent-incoming.blogspot.tw/2012/11/pascal-call-convention-in-c.html c call convention, pascal call convention: 這很容易理解, 最主要我想討論三個問題: * 為什麼 pascal call convention 效率好? * 為什麼 pascal call convention 由被呼叫者清堆疊? c call convention 為什麼不 能由被呼叫者清堆疊? * 為什麼 pascal call convention 不能支援不定個數參數? Q3: 為什麼 pascal call convention 不能支援不定個數參數? 從 a.dis L21 可得到 foo4 的參數 a 是 3, 並不是 1, 是因為編譯器產生的是 mov 0x4(%esp),%eax 所以不能得到第1個參數 a 嗎?編譯器只要產生 mov 0xc(%esp),%eax 不就可以得到 a 了, 為什麼不是這樣呢? Q1, Q2: 我看不出來 pascal call convention 效率好, 也看不出來為什麼 c call convention 不能由被呼叫者清堆疊?編譯器可以產生 push $1, push $2, 應該可以得知 ret $8, 和 由右到左傳入或是由左到右傳入有什麼差異? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.125.239.46

11/19 10:23, , 1F
這篇文章應該還要標明在 x86/x86_64 情況下吧?
11/19 10:23, 1F

11/19 10:45, , 2F
已經補上, 感謝提醒
11/19 10:45, 2F
※ 編輯: descent 來自: 59.125.239.46 (11/19 13:35)
文章代碼(AID): #1GgOq4_Q (C_and_CPP)
文章代碼(AID): #1GgOq4_Q (C_and_CPP)