Assembly 使用%cl左移

Assembly 使用%cl左移,assembly,x86,Assembly,X86,假设我有一个二进制数。1010,十进制为10 我知道左移1位本质上就是将数字乘以2 教科书上有一行让我困惑 salq %cl, %rdx %rdx是一个数字,%salq是一个左移。我感到困惑的是%cl 我读到CL是8位,这是否意味着我要乘以2^8?CL是移位计数。在C语言中,它是rdx,cl部分寄存器(实际上是寄存器rcx的最低8位)包含rdx将向左移位的值。它有8位长,但移位的量是实际存在的量: movb $10, %cl salq %cl, %rdx ; rdx is shifted 10

假设我有一个二进制数。1010,十进制为10

我知道左移1位本质上就是将数字乘以2

教科书上有一行让我困惑

salq %cl, %rdx
%rdx
是一个数字,
%salq
是一个左移。我感到困惑的是
%cl


我读到CL是8位,这是否意味着我要乘以2^8?

CL是移位计数。在C语言中,它是
rdx,
cl
部分寄存器(实际上是寄存器
rcx
的最低8位)包含
rdx
将向左移位的值。它有8位长,但移位的量是实际存在的量:

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

它不是一个“伪”寄存器。它100%是一个实寄存器,但它是RCX低字节的别名。也许你要找的术语是“部分注册”,如。更新了我的答案。