给定 N,使用 Shift-Left (shl) 得到 2^N?

Use Shift-Left (shl) to get 2^N, given N?

正在尝试使用左移指令进行乘法运算。

SHL(左移)指令对目标操作数进行逻辑左移,用0填充最低位。

我不明白如何为 N 使用寄存器或内存,因为当我尝试这样做时,我被告知“无效指令操作数”

  1. 用户在 RequestNumber 过程中输入了一个数字 N(returns EAX)。
  2. 我正在尝试的计算是:结果 = 1 * 2^N

我的代码:

mov ebx, 1   
call RequestNumber      ; returns eax   
shl ebx, eax   
mov result, ebx

我正在处理的作业要求使用 Shift 来获得结果 = 2^N 据我所知,您只能将 imm8 数字与此寄存器 CL 一起使用(尝试使用较低的 ECX 得到相同的结果)。

问题: 如果我必须从用户那里获取 N,我该如何正确使用 Shift 指令?

偏移量必须在cl。因此,要从用户那里获取轮班输入,请将其放在 cl 中。回想一下,clecx 的低 8 位,所以如果将移位量放在 ecx 中,然后再移位 cl,它会按预期工作:

mov ebx, 1   
call RequestNumber      ; returns eax
mov ecx, eax
shl ebx, cl
mov result, ebx