2012-06-04 30 views
0
  • 在彙編中,您應該在調用C標準庫函數之前備份寄存器嗎?
  • 標準庫是否保證其所有函數都會備份調用者的寄存器並最終恢復它們?
  • 我在哪裏可以找到有關此事的官方信息?

回答

2

它是平臺特定的,通常你不需要在呼叫站點專門保存和恢復寄存器,被調用者通常會這樣做。您只需要遵循特定平臺的鏈接約定。 C庫不是無狀態的,通常不調用一些函數而不初始化庫,因爲它是在包含main()的典型c程序對象中完成的。

3

我認爲只是調用約定適用於此。 http://en.wikipedia.org/wiki/X86_calling_conventions

C標準庫不保證它是調用者的函數備份寄存器。它取決於調用約定以及編譯器如何處理它。

假設C函數對寄存器一無所知。

你會發現函數正在使用哪個調用約定,形成函數的聲明/簽名。默認應該是cdecl。

+0

我不明白你想說什麼。 –

+0

這裏有一點編輯.. – Ivarpoiss

2

這是一個特定於平臺的問題,而不僅僅是一個特定於硬件的問題。 C標準庫被設計爲可以從C程序調用,其中調用約定(通常)在編譯時處理,並且適合的寄存器和堆棧操作是爲您完成的。

請參閱平臺特定的ABI指南以確定如何調用外部鏈接的功能。

+0

如何找到我的平臺的ABI指南? (赦免無知)。 –

+0

這取決於你在使用什麼平臺? Windows 32位? 64位? Mac OS X 32位? 64位? Linux的特別味道? MS-DOS? –

+0

@LeifEricson http://google.com/ – 2012-06-04 18:23:49

相關問題