左旋转的数学等价物是什么?

Sal*_*ara 4 algorithm assembly rotation

我试图破解一些涉及8位二进制数上多次左旋转的汇编代码.

供参考,代码是:

lab:    rol    dl,1
        rol    dl,1
        dec    ecx
        jnz    lab
Run Code Online (Sandbox Code Playgroud)

decjnz是不是一个问题,而是有没有表明,2个rols的多次执行.

我想要做的是找出这个代码的数学等价物,例如公式.我当然不是在寻找一个完整的公式来告诉我整个代码,但我想知道是否有一个公式给出了单个左旋转的等价(以denary为单位).

我试过用几个不同的数字来解决这个问题,但是看不到两个结果之间的联系.例如:如果起始编号为115,则表示为220,但如果起始编号为99,则表示为216.

Kar*_*tel 8

鉴于您的样本结果,我假设我们将8位数量视为无符号.

7个低位向左移位,将该部分乘以2; 并且高位被交换到开头.

因此,(x % 128) * 2 + (x / 128)使用通常的整数div/mod运算符.

  • @kvphxga:我不打算简化代码或提高效率,而是试图理解它在做什么.该公式帮助我做到这一点. (2认同)
  • 等价(并且更可能是原始来源),`(x << 1)| (x >> 7)`假定8位操作数. (2认同)