Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 为什么x86 movsd会导致三重故障异常?_Assembly_X86 - Fatal编程技术网

Assembly 为什么x86 movsd会导致三重故障异常?

Assembly 为什么x86 movsd会导致三重故障异常?,assembly,x86,Assembly,X86,以下x86指令导致三重故障异常(cpu重置)。知道为什么吗 0042F94B F20F100520E44300 movsd xmm0,qword [dword 0x43e420] 在该指令之前插入了以下代码,以验证0x43e420处的内存是否可访问(它是可访问的): X86处于保护模式。GDT设置正确,除cs为0x8外,段寄存器均为0x10。两个GDT条目都是扁平的,并且会占用整个32位内存空间。未设置eflags上的对齐检查(AC) 0x43e420处的内存为: 0x43e420: 00

以下x86指令导致三重故障异常(cpu重置)。知道为什么吗

0042F94B  F20F100520E44300  movsd xmm0,qword [dword 0x43e420]
在该指令之前插入了以下代码,以验证0x43e420处的内存是否可访问(它是可访问的):

X86处于保护模式。GDT设置正确,除cs为0x8外,段寄存器均为0x10。两个GDT条目都是扁平的,并且会占用整个32位内存空间。未设置eflags上的对齐检查(AC)

0x43e420处的内存为:

0x43e420: 00 00 00 00 00 00 00 40
执行该指令后,Bochs emulator将输出以下消息:

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)

这是操作系统引导代码的一部分;不是任何操作系统下的应用程序。

鉴于地址是对齐的,并且您处于引导代码中,对于初始异常最有可能的解释是,在引导时,SSE尚未启用。为什么该异常会导致三重故障是一个更微妙的问题,但可能您还没有设置向量来处理它。

根据提供的信息,我怀疑您的处理器没有启用SSE指令。如果不启用,它们的使用将触发异常(我认为是向量19)。此外,如果这个向量没有正确初始化,那么我肯定会看到它导致三重故障

有关启用处理器SSE指令的更多信息,请参阅64-ia-32-architectures软件开发手册第3卷第13章


希望这能有所帮助。

这个说明看起来很时髦。另外,
movsd
是一个dword大小的字符串移动。您可能是指
movq
?有两条操作码指令具有相同的名称。这里使用的movsd是SSE2指令集的一部分。嗯,那不太方便,是吗?哦,好吧,每天学点新东西。那么,对于这个问题,这可能是一个对齐问题吗?我不知道如何。0x43e420最多可对齐32个字节。另外,对齐检查被关闭了。是的,我现在看到你已经检查过了-对不起。这正是问题所在。我在这里找到了启用SSE的代码:
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)