assembly - 四字 (NASM DQ) 何时需要 16 字节对齐?
问题描述
根据 Intel 64 and IA-32 Architectures Software Developer's Manual Combined Volumes (Oct 2019) 第 4.1.1 节“字、双字、四字和双四字的对齐方式”:
“字、双字和四字在内存中不需要在自然边界上对齐。字、双字和四字的自然边界分别是偶数地址、可被 4 整除的地址和可被 8 整除的地址。”
但是手册的一段后面说:
“一些对双四字进行操作的指令要求内存操作数在自然边界上对齐。如果指定了未对齐的操作数,这些指令会生成通用保护异常 (#GP)。双四字的自然边界是任何可整除的地址到 16 点。”
我只是将我的数据部分安排在 64 字节边界上对齐,并将所有 dq var 组织在一起以设置在单个缓存行上。以下是前八个 dq:
section .data align=64
Return_Pointer_Array: dq 0, 0, 0
data_master_ptr: dq 0
n_ptr: dq 0
n_ctr: dq 0
n_length: dq 0
collect_ptr: dq 0
数据部分比这大,但我通过 Agner Fog 的 objconv 运行它,他没有显示数据对齐问题——在早期的工作中,我发现如果存在对齐问题,Fog 的 objconv 会标记它们。
我的问题是:如英特尔在上面引用的最后一段中所说,在什么情况下我必须将每个 dq 对齐到一个可被 16 整除的地址上?什么指令会导致这样的要求?
解决方案
例如MOVAPD
(内存地址必须对齐)和MOVUPD
(内存地址不必对齐)
推荐阅读
- r - 使用带有多个参数的 lapply() 生成 html 代码
- html - 有没有办法在没有 Javascript 的情况下显示表单提交的反馈?
- r - 来自 tidyverse 的 group_by 示例无法正常工作
- javascript - jQuery 日期选择器未在单击时打开
- python - 谷歌 Colab TPU 版本
- oauth-2.0 - 每次我使用 YouTube 数据 API v3 时,如何绕过输入验证码来授权我的代码
- python - PyCharm 在 Mac 上找不到 Tesseract
- reactjs - 如何在 MuiDataTable 的 customBodyRender 中使用 onClick 事件中的值?
- python - discord py我如何为具有ID的服务器成员用户赋予角色
- javascript - FlatList 更新缓慢