gpt4 book ai didi

assembly - 如何使用lea指令实现shr指令?

转载 作者:行者123 更新时间:2023-12-02 19:21:47 25 4
gpt4 key购买 nike

如果我编写类似 lea eax, [2 * eax] 的代码; eax * 2 与 shl eax, 1 相同; eax * 2

我的问题是:

  1. 如何实现shr​​指令?就像 lea eax, [2 ... eax]
  2. 如果可能的话,有什么技巧吗?

最佳答案

抱歉,您无法用左移来模拟右移。 (x86 寻址模式中的比例因子在机器代码中编码为从 0 到 3 的 2 位移位计数。)

另请注意,LEA 不会设置 FLAGS,而 SHL 会设置。

据我所知,没有任何技巧,甚至没有效率低下的技巧。对于没有右移的玩具 ISA,这个问题以前曾出现过;您通常需要诸如查找表之类的东西或一种将位从一个寄存器转移到另一个寄存器的方法,例如 add eax,eax/adc edx,edx 从寄存器中移动一位EAX 顶部到 EDX 底部。从 EDX=0 开始并在循环中重复正确的迭代次数(32-n 或其他)将得到与右移 n 相同的结果。

SHR/SAR 是非常必要的原始操作,不能轻易地用其他任何东西来模拟。 (除了右旋转 + 通过生成 AND 掩码将高位归零。)

右移是除以 2 的幂。除法很难;与左移/乘法不同,您无法轻松地用其他东西构建它。例如add eax,eax 左移 1,因为进位另外从低位向高位传播。

关于assembly - 如何使用lea指令实现shr指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62971195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com