2013-06-19 62 views
1

我試圖用C++編寫OS的基礎代碼。爲了管理中斷,我必須編寫一些asm行,使用在asm中聲明的外部C++代碼與external name_of_the_function。我將這些函數中的一個放在類中,但我不知道如何從程序集中訪問類方法(external Class::method不起作用)。我發現這樣做的唯一方法是創建一個調用類方法的函數,但可以直接訪問程序集中的方法嗎? (假設這些方法是靜態的)從彙編中訪問類方法

+0

你可能想查看* name mangling *:https://en.wikipedia.org/wiki/Name_mangling – templatetypedef

+0

看看Agner Fog的[調用約定](http://www.agner.org) /optimize/calling_conventions.pdf)指南。 –

回答

1
  1. 查看您的C++對象文件以找到要調用的函數的損壞符號名稱。
  2. 在裝配文件中聲明您的彙編程序需要使用強化函數名稱externalglobal或任何語法。
  3. 與C函數一樣調用它(如果它是實例方法,您可能需要找到一個this指針)。
+0

3.(記住把'this'作爲函數的第一個參數) – Massa

+2

@Massa - 我想我的答案已經說過了。也許你看到一個緩存版本?除此之外,如果它是OP所說的靜態(類)方法,那麼就沒有隱含的'this',是嗎? –

+0

非常感謝,它解決了我的問題! – palra