YASM:vmovaps 指令导致分段错误

2023-12-09

Problem: movaps给我一个分段错误。

Context:x86-64指令vmovaps设计用于与 Core i 系列处理器(我正在运行该系统)上的 AVX 寄存器一起使用。 AVX 寄存器的宽度是 SSE 寄存器的两倍(分别为 256 位和 128 位)。操作说明vmovaps应该将对齐的浮点值(32 位)向量移动到指定的位置ymm登记。

可能的原因:源数据的对齐尤为重要,因为不正确对齐的数据是分段错误的根源。然而,即使我对齐了数据,我自己也遇到了分段错误。

Example

    segment .data

align 16
xs:
    dd  0.0
    dd  1.1
    dd  2.2
    dd  3.3
    dd  4.4
    dd  5.5
    dd  6.6
    dd  7.7

align 16
ys:
    dd  8.8
    dd  7.7
    dd  6.6
    dd  5.5
    dd  4.4
    dd  3.3
    dd  2.2
    dd  1.1

    segment .text
    global main

main:
    push rbp
    mov rbp, rsp

    ; Move eight 32-bit floats from "xs" into ymm0
    vmovaps ymm0, [xs]

    ; Move eight 32-bit floats from "ys" into ymm1
    vmovaps ymm1, [ys]

    ; Add all eight to each other simulatenously, put in ymm0
    vaddps ymm0, ymm1

    xor rax, rax
    leave
    ret

编译为: yasm -f elf64 -g dwarf2 <filename>

与连接: gcc -o <bin-name> <filename>.o

当我用 GDB 运行它时,它只是报告它在第一个时收到了分段错误信号vmovaps操作说明。我检查了有关对齐的文档,我认为这一切都是正确的。就其价值而言,我在 i5 8600K 上运行并执行此操作。

我也看过这个类似的问题。然而,我无法真正将他的问题的答案应用到我的问题上(与他的内联汇编有关)。如果有人能对此发表意见,我将不胜感激!


vmovaps with ymm0操作数需要 32 字节对齐。去引用手册:

当源操作数或目标操作数是内存操作数时, 操作数必须在 16 字节(128 位版本)上对齐,32字节 (VEX.256编码版本)或 64 字节(EVEX.512 编码版本) 将生成边界或一般保护异常 (#GP)。 对于 EVEX.512 编码版本,操作数必须与大小对齐 内存操作数。

(强调已添加)。 Linux 向导致 #GP 异常的进程传递 SIGSEGV。

因此,你应该改变align 16 to align 32为你的静态数组dd元素

Or use vmovups未对齐的负载,并让硬件处理它;恰好对齐的数据的速度相同,并且在大多数 CPU 上,对于不跨缓存行边界分割的加载/存储也具有相同的速度。

有关的:如何解决 AVX 加载/存储操作的 32 字节对齐问题?用于对齐事物的 C 和 C++ 方法,包括自动(堆栈)或动态存储中的数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YASM:vmovaps 指令导致分段错误 的相关文章

随机推荐

  • 在小型天蓝色实例中使用 Parallel.Foreach

    我有一个在小型实例上运行的 WebRole 该WebRole有一个将大量文件上传到BLOB存储的方法 根据 Azure 实例规范 小型实例只有1 core 那么 在上传这些 blob 时 Parallel Foreach 会比常规 Fore
  • URL 重写 - 查询字符串

    我有一个新闻 博客 网站 当选择单个帖子时 它会返回以下格式的网址 website net sitenews php q posts view postname 12 我正在寻求重写 url 使其显示为 website net sitene
  • 表单上的令牌方法、双重提交问题

    我花了几周的时间来研究我的表单的双重提交保护 直接说 存储令牌的会话方法不起作用 会话对于刷新页面或某人回顾其历史记录来说工作得很好 但是使用会话无法阻止通过多次单击按钮来进行经典的双重提交 我认为当在几毫秒内处理多次点击时 脚本无法足够快
  • Keras - 用于文本分析的自动编码器

    因此 我正在尝试创建一个自动编码器 它将接受文本评论并找到较低维度的表示 我正在使用 keras 我希望我的损失函数能够将 AE 的输出与嵌入层的输出进行比较 不幸的是 它给了我以下错误 我很确定问题出在我的损失函数上 但我似乎无法解决这个
  • 获取/设置开放图谱帖子的受众

    是否可以获取或设置开放图谱故事帖子的受众 朋友 只有我 公众 根据开发者脸书应该有一个隐私设置字段 我的应用程序确实具有发布权限 publish actions 和读取权限 public profile email user posts 当
  • Matlab 特殊矩阵

    有没有一个MATLAB函数可以生成这个矩阵 1 2 3 4 5 6 7 n 2 3 4 5 6 7 8 n 1 3 4 5 6 7 8 9 n 2 n n 1 n 2 2 n 1 它有名字吗 Thanks 是的 该矩阵确实有一个名称 它被称
  • Angular:加载所有指令后在控制器中运行函数

    我正在尝试编写一些代码 这些代码允许我在控制器中运行一个函数 但只有在整个 dom 设置并准备就绪后 包括指令链接函数运行等 我目前正在通过 rootScope 广播在 ctrl service 和指令之间进行通信 指令未拾取控制器加载时的
  • 如何为 Google Drive 上存储的文件设置图像缩略图

    使用 Google Drive API 我可以使用以下命令更新任何可写文件的属性files update method import datetime data modifiedTime datetime datetime utcnow i
  • 如何使用React + ES6 + webpack导入导出组件?

    我正在玩React and ES6 using babel and webpack 我想在不同的文件中构建多个组件 导入到单个文件中并将它们捆绑在一起webpack 假设我有一些这样的组件 我的导航栏 jsx import React fr
  • 获取 django 预订中的客人数量

    如果每个用户参加一个活动 他们都可以进行预订 但每个活动只有一定数量的开放空间 我想在活动中显示 10 个席位中还剩下 5 个 我似乎无法找到已预订且状态为 活跃 或 待定 的客人总数 这是我的事件模型 class Events model
  • 安装rubberduck后看不到插件?

    我是 ruby duck 的新手 已经安装了最新版本 2 0 11 安装管理员后 我转到 excel 并检查我的 com addins 它现在确实显示了rubberduck 我检查了我的程序数据文件夹 是的 rubberduck 包含所有文
  • 使用findText在谷歌应用程序脚本(documentApp)中使用正则表达式分割文本

    在谷歌文档 不是电子表格 中 我有一堵文字墙 看起来像 foo bar header foo bar bat paragraph and another paragraph and yet an other paragraph and so
  • Android:删除项目(ListView)

    我想从中删除一个项目ListView 但我不知道该怎么做 这是我的代码 public void FLYNOTE refresh int i SharedPreferences Pref getSharedPreferences nnote
  • FileProvider.getUriForFile 返回 null

    我正在尝试在设备的相机中拍照 当我调用处理图像捕获的方法时 应用程序由于空指针异常而崩溃 我不知道我的 FileProvider 缺少哪些信息 因为堆栈跟踪将空指针指向我的 FileProvider getUriForFile 语句 这是我
  • 有没有更好的方法来更改 php 中的 DOMElement->tagName 属性?

    我刚刚遇到了为我的 MVC 框架构建 Textbox 控件的情况 在完成整个文档之前 我对继承自 ServerTag 又继承自 DOMElement 的所有内容调用 PreRender 我发现更改 DOMElement 派生对象的 tagN
  • 同步以确保另一个线程可以看到对不可变对象的引用

    我刚刚在学习this了解新 JMM 中最终字段的行为 5 及以上 这个概念很明确 在正确构造对象后 保证初始化的最终字段对所有线程的可见性 但在本节的最后 我读到了这一点 这让我很困惑 现在 说了所有这些 如果在一个线程构造一个不可变对象
  • Google Chrome 中未定义 Map()

    我一直在寻找答案 但只得到有关 Google 地图 API 的结果 我正在尝试使用 JavaScript 中的映射将整数映射到字符串 在 Firefox 中一切正常 但在 chrome 中我在控制台中收到一条错误消息 未捕获的引用错误 地图
  • 为什么这个 PHP 相关包含失败?

    disc puff php ls a php data include disc puff php tree a php data d php include b php c php 2 directories 4 files disc p
  • C#/C++ 之间的编组复杂结构

    我正在尝试从 C 填充结构数组并将结果传递回 C 我想也许创建一个具有结构数组的结构可能是前进的方向 因为我遇到的大多数示例都使用结构 但传递基本类型 我已经尝试过以下方法 但到目前为止还没有运气 在以下位置找到了一个示例 http lim
  • YASM:vmovaps 指令导致分段错误

    Problem movaps给我一个分段错误 Context x86 64指令vmovaps设计用于与 Core i 系列处理器 我正在运行该系统 上的 AVX 寄存器一起使用 AVX 寄存器的宽度是 SSE 寄存器的两倍 分别为 256