Leo*_*ard 2 assembly x86-64 att
movsd (%rdx,%rsi,8), %xmm0 ## xmm0 = mem[0],zero
Run Code Online (Sandbox Code Playgroud)
这条线有什么作用?特别是(%rdx,%rsi,8)?
(x86-64架构计算机)我从C代码生成了一个汇编文件,该文件执行矩阵乘法,涉及3个循环。我找到了一堆手册,但没有任何真正可靠的信息,即使是看起来“官方”的手册。
我的 Mac OS X 是用 GAS 语法生成的,因此mov其变体的指令按以下顺序排列:
mov source dest
(%rdx,%rsi,8)但没有人解释当类似的东西突然加入队伍时会发生什么
。
请帮助我了解更多相关信息。谢谢。
下面的链接,幻灯片 7是我能找到的最相关的信息(但它可能采用英特尔语法,源和目标翻转) https://www.bowdoin.edu/~sbarker/teaching/courses/spring16/its/lectures /lec15.pdf
这就是所谓的AT&T(或 GAS)语法。它是更流行的英特尔语法的替代方案。在 AT&T 语法中,地址操作数语法为:
segment:displacement(base register, index register, scale factor)
Run Code Online (Sandbox Code Playgroud)
其中大部分部分都是可选的。在您的示例中%rdx, 是基址寄存器,%rsi是索引寄存器,8是比例因子。
它的作用是xmm0从地址 加载寄存器的低 64 位部分rdx + rsi * 8。在英特尔语法中它将是:
movsd xmm0, [rdx+rsi*8]
Run Code Online (Sandbox Code Playgroud)
这更直观一些(至少对我来说)。
| 归档时间: |
|
| 查看次数: |
1552 次 |
| 最近记录: |