以下x86指令导致三重故障异常(CPU复位)。知道为什么吗?
0042F94B F20F100520E44300 movsd xmm0,qword [dword 0x43e420]
Run Code Online (Sandbox Code Playgroud)
在该指令之前插入了以下代码,以验证是否可以访问位于0x43e420的内存:
0042F945 8B0520E44300 mov eax,[dword 0x43e420]
Run Code Online (Sandbox Code Playgroud)
X86处于保护模式。GDT设置正确,除cs为0x8外,段寄存器均为0x10。这两个GDT条目都是平坦的,并且用完了整个32位存储空间。未设置eflags的对齐检查(AC)。
0x43e420处的内存为:
0x43e420: 00 00 00 00 00 00 00 40
Run Code Online (Sandbox Code Playgroud)
执行该指令后,Bochs仿真器将输出以下消息:
interrupt(): gate.type(9) != {5,6,7,14,15}
interrupt(): gate descriptor is not valid sys seg (vector=0x0d)
interrupt(): gate descriptor is not valid sys seg (vector=0x08)
Run Code Online (Sandbox Code Playgroud)
这是操作系统启动代码的一部分;不是任何操作系统下的应用程序。
根据提供的信息,我怀疑您的处理器尚未启用SSE指令。如果未启用,则它们的使用将触发异常(我认为矢量19)。此外,如果未正确初始化此向量,则可以肯定会导致三重故障。
有关启用处理器SSE指令的更多信息,请参阅《 64-ia-32-体系结构软件开发手册》第3卷第13章。
希望这可以帮助。