如何以内联汇编语言声明跳转表? 我想做下面的代码,但msvc没有采用dd行。
我也试过_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:
....
}
答案 0 :(得分: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构建跳转表,否则我很确定你不能在内联汇编中使用跳转表。