使用%cl左移

时间:2018-10-10 19:26:51

标签: assembly x86

假设我有一个二进制数字。 1010,即十进制的10。

我知道向左移动1位实际上就是将数字乘以2。

一本教科书中的一行让我感到困惑。

%rdx

%salq是一个数字,%cl是一个左移。我感到困惑的是stopNavigationTriggerDropDown(event: any){ event.stopImmediatePropagation(); event.stopPropagation(); event.preventDefault(); //code that triggers manual dropdown event }

我已经知道CL是8位,这是否意味着我要乘以2 ^ 8?

2 个答案:

答案 0 :(得分:2)

cl部分寄存器(实际上是寄存器rcx的最低8位)包含将rdx左移的值。它有八位长,但是移位的数量实际上是其中的任何数量:

movb $10, %cl
salq %cl, %rdx ; rdx is shifted 10 bits left.

答案 1 :(得分:1)

CL是班次计数。在C中,它是rdx <<= clrdx = rdx << clhttp://felixcloutier.com/x86/SAL:SAR:SHL:SHR.html

或更准确地说,rdx <<= (cl&63),因为x86掩盖了移位计数。


您将RDX乘以2^cl

8是CL的位宽,表示它可以表示从0..255开始的值。