我正在尝试破解一些涉及8位二进制数上多次左旋转的汇编代码。
供参考,代码为:
lab: rol dl,1
rol dl,1
dec ecx
jnz lab
dec
和jnz
不是问题,但可以显示2 rol
被执行多次。
我想要做的是找出这段代码的数学等价物,例如公式。我当然不是在寻找一个完整的公式来告诉我整个代码,但我想知道是否有一个公式给出了单个左旋转的等价(以小数表示)。
我尝试用几个不同的数字来解决这个问题,但是看不到两个结果之间的联系。例如:如果起始编号为115,则表示为220,但如果起始编号为99,则表示为216。
答案 0 :(得分:8)
鉴于您的样本结果,我假设我们将8位数量视为无符号。
7个低位向左移位,将该部分乘以2;并且高位被交换到开头。
因此,(x % 128) * 2 + (x / 128)
,使用通常的整数div / mod运算符。
答案 1 :(得分:-3)
将包含数字X的字节向左移位一位(位置)等于将数字X乘以2:
x<< 1< ==> x = x * 2