ASM[VC內嵌彙編]

ASM是C++中的一個關鍵字,用於在C++源碼中內嵌彙編語言。ASM能寫在任何C++合法語句中,目前asm還不是C的標準關鍵字,C11標準未加入正文,僅在Annex J中標記為“公共擴展”。

關鍵字

雖然asm並不是C的標準關鍵字(C11標準未加入正文,僅在Annex J中標記為“公共擴展”),但是大多數C實現都將其視為一個關鍵字。

asm是C++標準關鍵字,但是標準沒有規定其詳細用法。相應的用法為實現定義。

詳述

下面介紹Visual C++中的asm關鍵字用法。

Visual Studio 2015起始頁 Visual Studio 2015起始頁

__asm關鍵字啟動內聯彙編並且能寫在任何C++合法語句之處。它不能單獨出現,必須接彙編指令、一組被大括弧包含的指令或一對空括弧。術語“__asm 塊”在這裡是任意一個指令或一組指令無論是否在括弧內。

以下代碼片段是在括弧內的一個簡單的__asm塊。

_asm { mov al, 2  mov dx, 0xD007 out al, dx }

另一種方法是,你可以在每個彙編指令前放置__asm

__asm mov al, 2

__asm mov dx, 0xD007

__asm out al, dx

因為__asm關鍵字是一個語句分隔設定,你也可以將彙編指令放在同一行:

__asm mov al, 2 __asm mov dx, 0xD007 __asm out al, dx

以上三個的例子產生相同的代碼,但是第一種風格(把__asm塊用括弧括起來)有一些優勢。括弧可以清晰的將C或C++代碼和彙編代碼分開,並且避免了不必要的重複__asm關鍵字。括弧也能避免模糊性。如果你想在__asm塊的同一行放置一個C或C++語句,你必須將塊用括弧括起來。沒有括弧,編譯器不能區分彙編代碼在哪裡停止以及C或C++代碼在哪裡開始。最後,因為在括弧的文字有和原始MASM一樣的格式,你能輕鬆的從一個已有的MASM源檔案里剪下和黏貼文字到檔案來。

不同於C和C++的括弧,在Visual Studio中,包含__asm塊的括弧對變數的作用域並沒有效果。你也能嵌套__asm塊,嵌套對變數作用域也沒有效果。

相關搜尋

熱門詞條

聯絡我們