首页 > 解决方案 > 抛出异常:访问冲突读取位置

问题描述

我正在使用一本旧书中的示例代码,但该代码是作为内联汇编编写的!我创建了一个新的控制台应用程序项目。添加了 MASM 依赖项,文件类型为 Microsoft Macro Assembler。

无论是针对 32 还是 64,我都会收到此错误!

=>MOVAPS XMM0, [esi]
Exception thrown at 0x00D4101C in Project3.exe: 0xC0000005: Access violation reading location 0xFFFFFFFF
Exception thrown at 0x00000000004F101C in Project3.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

asmcode.asm

.model flat,c
.const
 .data
A     dd 0.1,0.2,0.3,0.4 
B     dd 1,2,3,4


 .code
main PROC
        MOV esi, A
        MOV edi, B
        MOVAPS XMM0, [esi]
        MOVUPS XMM1, [edi]
        ADDPS XMM0, XMM1
        MOVAPS XMM1, XMM0
        MOVAPS[esi], XMM0
        MOVUPS[edi], XMM1
        
main endp
 end 

知道为什么它不起作用吗?当我尝试获取 A 和 B 的地址而不是寄存器 esi 和 edi 的地址时,它可以工作

所以这行得通

MOVAPS XMM0, [A]
MOVUPS XMM1, [B]

仅供参考,代码与内联汇编中的寄存器一起使用

标签: visual-studioassemblymasmsse

解决方案


推荐阅读