2016-09-06 45 views
0

閱讀有關彙編的內容,部分是關於彙編中調用例程的約定(特別是Linux)。如何在彙編中傳遞超過8個浮點值的printf

據說第一8浮點參數通過xmm0通過 - xmm15和其他參數在寄存器rdirsirdxrcxr8r9,和其它剩餘參數應被推動以相反的順序堆疊。

如果我有超過8個浮點參數和超過6個其他參數,按什麼順序推動它們堆棧會怎麼樣?第一個浮點值不適合8 fp。寄存器或其他參數不適合6個寄存器?

回答

2

ABI doc的哪些部分不清楚(https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI)?

你在問,如果int和fp args混合在一起,並且用盡了兩種arg傳遞寄存器會發生什麼?

IIRC,他們只是按照相反的順序進入堆棧,最後一個參數位於最高地址處,而第一個非寄存器arg位於返回地址之上。這就像在32位代碼中一樣,args始終在棧中傳遞。

另請參閱http://wiki.osdev.org/System_V_ABI標記wiki。

+0

是否爲授權草案,是否可以用作參考?在標題頁上,有幾個名字是我寫的,我從來沒有聽說過。 –

+0

@BulatM。是的,該頁面鏈接到標準文檔的官方最新版本。例如「* x86-64 psABI修訂版252可以從[這裏]下載(https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-r252.pdf)*」。不幸的是,文檔並不總是完全記錄編譯器依賴的所有內容,但它所說的所有內容都是準確的。我知道的唯一例外是[零/符號擴展窄整數參數爲32位](http://stackoverflow.com/questions/36706721/is-a-sign-or-zero-extension-required-when-adding -a-32位偏移到一個指針換/ 36760539#36760539)。 –

+0

ABI文檔的副本曾經發布在http://www.x86-64.org/documentation.html上,但x86-64.org已經死了幾個星期了。 –