2009-11-23 123 views
1

如何在內聯彙編語言中聲明跳轉表? 我想做下面的代碼,但msvc沒有采取dd行。MSVC x86內聯彙編程序切換語句

我也試過_asm _emit offset label1但只吐出了1個字節

_asm _emit (offset label1) >> 8不編譯任,所以我不能在同一時間做一個字節。

_asm { 
    jmp skiptable 

jmptable: 
    dd offset label1 
    dd offset label2 

skiptable: 
    jmp [table + 4*eax] 

label1: 
    .... 

label2: 
    .... 
} 

回答

1

不幸的是,_asm是實際裝配的裸機子集。你不能使用數據指令,正如你注意到的那樣_emit只做一個字節。

從微軟的文檔:

Although an __asm block can reference C or C++ data types and objects, it 
cannot define data objects with MASM directives or operators. Specifically, 
you cannot use the definition directives DB, DW, DD, DQ, DT, and DF, or the 
operators DUP or THIS. 

除非你可以建立在C跳轉表我敢肯定,你不能內聯彙編用跳轉表。