为什么我的psubd xmm,内存出现分段错误?

时间:2018-04-05 21:51:50

标签: assembly x86-64 gas

我在LABELX中有一个名为bss的标签,我在其中保留了64位地址。它在我的代码中引入如下:

.section    .bss
.lcomm LABELX, 16  ### I reserved 128 bit to have the same length as XMMs

在我的代码中的某个时刻,我有一个减法如下:

psubd   LABELX, %xmm11

值如下:

Value in XMM11 : F7A2D830 ### the higher bits are all zeros.
Value at LABELX: 7FFFF7A2D740

我希望LABELX中存储的最低32位值从XMM11中减去,结果存储在XMM11的最低32位。为什么我会出现分段错误?

1 个答案:

答案 0 :(得分:1)

分段错误是因为LABELX未与16字节地址对齐。

使用以下内容定义LABELX:

.local LABELX
.comm LABELX, 16, 16

第二个16是对齐要求。它可以省略,因为16是默认值(“2的最大功率小于或等于符号的大小,最大为16”)。在这种情况下,我认为最好将对齐要求明确,因为您依赖它。