概述
_asm是C++中的一個關鍵字,用於在C++源碼中內嵌彙編語言。
詳述
__asm關鍵字啟動內聯彙編並且能寫在任何c/c++合法語句之處.它不能單獨出現.它必須接彙編指令、一組被大括弧包含的指令或一對空括弧.術語“__asm塊”在這裡是任意一個指令或一組指令無論是否在括弧內。以下代碼片段是在括弧內的一個簡單的__asm塊。
_asm { moval,2 movdx,0xD007 outal,dx }
另一種方法是,你可以在每個彙編指令前放置__asm
__asmmoval,2
__asmmovdx,0xD007
__asmoutal,dx
因為__asm關鍵字是一個語句分隔設定,你也可以將彙編指令放在同一行:
__asmmoval,2__asmmovdx,0xD007__asmoutal,dx
以上三個的例子產生相同的代碼,但是第一種風格(把__asm塊用括弧括起來)有一些優勢。括弧可以清晰的將C或C++代碼和彙編代碼分開,並且避免了不必要的重複__asm關鍵字。括弧也能避免模糊性。如果你想在__asm塊的同一行放置一個C或C++語句,你必須將塊用括弧括起來。沒有括弧,編譯器不能區分彙編代碼在哪裡停止以及C或C++代碼在哪裡開始。最後,因為在括弧的文字有和原始MASM一樣的格式,你能輕鬆的從一個已有的MASM源檔案里剪下和黏貼文字到檔案來。
不同於C和C++的括弧,包含__asm塊的括弧對變數的作用域並沒有效果。你也能嵌套__asm塊,嵌套對變數作用域也沒有效果。