假设我有一个二进制数字。 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?
答案 0 :(得分:2)
cl
部分寄存器(实际上是寄存器rcx
的最低8位)包含将rdx
左移的值。它有八位长,但是移位的数量实际上是其中的任何数量:
movb $10, %cl
salq %cl, %rdx ; rdx is shifted 10 bits left.
答案 1 :(得分:1)
CL是班次计数。在C中,它是rdx <<= cl
或rdx = rdx << cl
。 http://felixcloutier.com/x86/SAL:SAR:SHL:SHR.html。
或更准确地说,rdx <<= (cl&63)
,因为x86掩盖了移位计数。
您将RDX乘以2^cl
。
8是CL的位宽,表示它可以表示从0..255开始的值。