使其跳躍至內嵌組譯碼中的標籤
Microsoft 專有的
是否有一般的 c 或 C++ 標籤,標籤在__asm區塊已在其定義的 (不只是在區塊) 的函式的範圍。 這兩個組件的指示和goto陳述式可以跳到標籤的內部或外部__asm區塊。
標籤中所定義__asm區塊是不區分大小寫。 兩者都goto陳述式和組件指示可以參考這些標籤,而不考慮為大小寫。 C 和 C++ 的標籤會區分大小寫只使用時goto陳述式。 組件指示可以跳到 c 或 C++ 的標籤,而不考慮為大小寫。
下列程式碼會顯示所有排列方式:
void func( void )
{
goto C_Dest; /* Legal: correct case */
goto c_dest; /* Error: incorrect case */
goto A_Dest; /* Legal: correct case */
goto a_dest; /* Legal: incorrect case */
__asm
{
jmp C_Dest ; Legal: correct case
jmp c_dest ; Legal: incorrect case
jmp A_Dest ; Legal: correct case
jmp a_dest ; Legal: incorrect case
a_dest: ; __asm label
}
C_Dest: /* C label */
return;
}
int main()
{
}
不要將 c 程式庫函式名稱當作標籤在__asm區塊。 舉個例說,您可能想要使用exit的標籤,如下所示:
; BAD TECHNIQUE: using library function name as label
jne exit
.
.
.
exit:
; More __asm code follows
因為結束 是名稱為 c 程式庫函式,這段程式碼可能會導致跳到 結束函數取代想要的位置。
為在 MASM 程式中,將錢幣符號 ($) 做為目前的位置計數器。 它是指標籤指示目前組合。 在__asm區塊,其主要用途是為了長條件的跳躍點:
jne $+5 ; next instruction is 5 bytes long
jmp farlabel
; $+5
.
.
.
farlabel:
結束 Microsoft 特定