複製鏈接
請複製以下鏈接發送給好友

ASM

(C++內嵌彙編)

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

目錄

ASM關鍵字

雖然asm並不是C的標準關鍵字(C11標準未加入正文,僅在Annex J中標記為“公共擴展”),但是大多數C實現都將其視為一個關鍵字。 [1] 
asm是C++標準關鍵字,但是標準沒有規定其詳細用法。相應的用法為實現定義。 [2] 

ASM詳述

下面介紹Visual C++中的asm關鍵字用法。
__asm關鍵字啓動內聯彙編並且能寫在任何C++合法語句之處。它不能單獨出現,必須接彙編指令、一組被大括號包含的指令或一對空括號。術語“__asm 塊”在這裏是任意一個指令或一組指令無論是否在括號內。 [3] 
Visual Studio 2015起始頁 Visual Studio 2015起始頁
以下代碼片段是在括號內的一個簡單的__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塊,嵌套對變量作用域也沒有效果。 [3] 
參考資料