我在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位。为什么我会出现分段错误?
答案 0 :(得分:1)
分段错误是因为LABELX未与16字节地址对齐。
使用以下内容定义LABELX:
.local LABELX
.comm LABELX, 16, 16
第二个16是对齐要求。它可以省略,因为16是默认值(“2的最大功率小于或等于符号的大小,最大为16”)。在这种情况下,我认为最好将对齐要求明确,因为您依赖它。