假设我有一个二进制数字。1010,十进制数是10。
我知道左移1比特本质上是将数字乘以2。
教科书上的一句话把我搞糊涂了。
salq %cl, %rdx%rdx是一个数字,%salq是一个左移。让我感到困惑的是%cl。
我读到CL是8位,这是不是意味着我要乘以2^8?
发布于 2018-10-11 03:30:12
cl部分寄存器(实际上是寄存器rcx的最低8位)包含rdx将被左移的值。它有8位长,但移动量实际上是其中的值:
movb $10, %cl
salq %cl, %rdx ; rdx is shifted 10 bits left.发布于 2018-10-11 03:30:08
CL是移位数。在C中,它是rdx <<= cl或rdx = rdx << cl。http://felixcloutier.com/x86/SAL:SAR:SHL:SHR.html。
或者更准确地说,是rdx <<= (cl&63),因为x86掩码计算移位。
你用2^cl乘以RDX。
8是CL的位宽,这意味着它可以表示从0到255的值。
https://stackoverflow.com/questions/52747469
复制相似问题