代码之家  ›  专栏  ›  技术社区  ›  masec

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

  •  1
  • masec  · 技术社区  · 8 年前

    我有一个标签名为 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
    

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   prl    8 年前

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

    使用以下内容定义LABELX:

    .local LABELX
    .comm LABELX, 16, 16
    

    第二个16是对齐要求。它可以省略,因为16是默认值(“小于或等于符号大小的两个最大幂,最多16”)。在这种情况下,我认为明确对齐需求是一种良好的做法,因为您依赖它。