'_NOSSE2' : illegal jump into __try scope

来源:百度知道 编辑:UC知道 时间:2024/06/28 21:20:18
__try {
_asm {
mov eax, 0 // eax=0 => CPUID returns vendor name
CPUID // perform CPUID function

mov esi, pStr
mov [esi], ebx // first 4 chars
mov [esi+4], edx // next for chars
mov [esi+8], ecx // last 4 chars

mov eax, 1 // EAX=1 => CPUID returns feature bits
CPUID // perform CPUID (puts feature info to EDX)

test edx, 04000000h // test bit 26 for SSE2
jz _NOSSE2 // if test failed jump
mov [info.bSSE2], 1 // set to true

_NOSSE2: test edx, 02000000h // test bit 25 for SSE
jz _NOSSE // if test failed jump
mov [info.bSSE], 1 // set to true

_NOSSE: test edx, 00800000h // test bit 23 for MMX
jz _EXIT1 // if test failed jump
m

__try{......}
__excetp(EXCEPTION_EXECUTE_HANDLER)
{......}

异常处理TRY块内部不允许出现 JZ JE JMP之类的跳转命令,解决办法嘛,只能把跳转前后分别TRY一下,确定不会异常了,再运行最终的包含有跳转指令的这段代码。

另一个办法插入高级语言代码,来代替JZ这类跳转,比如:
text eax,0
je lj_j1
上面这俩行放入TRY肯定报错,可改成高级语言
int li_eax=0;
mov li_eax,eax
if (li_eax==0)
{
......
}
这样吧JE跳转转换成高级语言,就可以通过了,上面例子是C的,你自己使用什么语言就转换成对应的高级语言就行了