4-argument Lea 不带碱基

Posted

技术标签:

【中文标题】4-argument Lea 不带碱基【英文标题】:4-argument Lea with the base left out 【发布时间】:2021-07-27 08:23:13 【问题描述】:

看在我的份上,我无法弄清楚这一点。 我会假设指令 lea 0x0(,%rcx,4),%esi

表示“将 %esi 设置为 %rcx 乘以 4 的结果”。 但事实并非如此。那么这是什么意思呢?首先很奇怪 偏移量是 0x0 并且没有使用 mul 代替...

编辑: 我认为某些东西被隐含地用作基础。但我不知道是什么。

【问题讨论】:

0 用作基础。它是 0+[0+rcx*4] 。是什么让你不这么认为。您从 ESI 获得什么价值?指令执行前RCX的值是多少? “将 %esi 设置为 %rcx 乘以 4 的结果”——这正是这条指令的作用。会不会是还没填的搬迁? 看我的回答:)。 【参考方案1】:

这是我的错。我忽略了目的地被标记为 32 位的事实。 这意味着如果乘法的结果高于此,它将被截断。

因此,如果您有一些长值,例如 2400923063, 2400923063*4=0x23c6cb6dc,但最后半字节将被截断,您将得到 0x3c6cb6dc 作为结果 (1013757660)。

【讨论】:

是的,最终结果只是简单的左移 2。使用 lea 而不是 shl 的原因是非破坏性地将结果放入另一个寄存器而不是修改 ECX . (在您的问题中,您说“奇怪的是没有使用 mul”,但是对于 2 的幂,这将是疯狂的,除非您正在优化代码大小而不是速度,那么是的 imul $4, %ecx, %esi 可能会更多比mov + shl.Using LEA on values that aren't addresses / pointers? / Efficient Assembly multiplication更紧凑

以上是关于4-argument Lea 不带碱基的主要内容,如果未能解决你的问题,请参考以下文章

配对碱基链

FCC 中级算法题 碱基配对

DNA分子中G碱基的含量越高,分子的稳定性相对越强对吗

基因序列碱基数测算

1.7.07:配对碱基链

AC日记——配对碱基链 openjudge 1.7 07