相关疑难解决方法(0)

在x86中,与16字节边界的对齐意味着什么

英特尔的官方优化指南中有一章介绍了从MMX命令转换到SSE的情况,他们说明了这些命令:

使用可能未与16字节边界对齐的存储器操作数的计算指令必须用未对齐的128位加载(MOVDQU)替换,然后使用相同的计算操作来代替寄存器操作数.

(第5.8章从64位转换为128位SIMD整数,第5-43页)

我无法理解他们的意思是"可能没有与16字节边界对齐",你能澄清一下并给出一些例子吗?

optimization x86

6
推荐指数
1
解决办法
1万
查看次数

为什么和在何处 align 16 用于指令的 SSE 对齐?

我正在阅读 Apress 的现代 x86 汇编语言书籍。对于编程 64 位 SSE 示例,作者将align 16放在代码中的特定点上。例如

    .code
ImageUint8ToFloat_ proc frame
_CreateFrame U2F_,0,64               ; helper macros to create prolog
_SaveXmmRegs xmm10,xmm11,xmm12,xmm13 ; helper macros to create prolog

_EndProlog  ; helper macros to create prolog

...

shrd r8d,
pxor xmm5,xmm5

align 16  ; Why this is here ?
@@:
movdqa xmm0,xmmword ptr [rdx]
movdqa xmm10,xmmword ptr [rdx+16]

movdqa xmm2,xmm0
punpcklbw xmm0,xmm5
punpckhbw xmm2,xmm5
movdqa xmm1,xmm0
movdqa xmm3,xmm2

...
Run Code Online (Sandbox Code Playgroud)

作者解释说有必要放置align 16,因为我们使用的是 SSE,以便指令本身对齐。没关系。我的问题是为什么作者选择将align 16放在该特定位置。作为程序员,我应该如何决定 …

64-bit assembly sse

2
推荐指数
1
解决办法
615
查看次数

标签 统计

64-bit ×1

assembly ×1

optimization ×1

sse ×1

x86 ×1