给定 N,使用 Shift-Left (shl) 得到 2^N?
Use Shift-Left (shl) to get 2^N, given N?
正在尝试使用左移指令进行乘法运算。
SHL
(左移)指令对目标操作数进行逻辑左移,用0填充最低位。
我不明白如何为 N 使用寄存器或内存,因为当我尝试这样做时,我被告知“无效指令操作数”
- 用户在 RequestNumber 过程中输入了一个数字 N(returns
EAX
)。
- 我正在尝试的计算是:结果 = 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
中。回想一下,cl
是 ecx
的低 8 位,所以如果将移位量放在 ecx
中,然后再移位 cl
,它会按预期工作:
mov ebx, 1
call RequestNumber ; returns eax
mov ecx, eax
shl ebx, cl
mov result, ebx
正在尝试使用左移指令进行乘法运算。
SHL
(左移)指令对目标操作数进行逻辑左移,用0填充最低位。
我不明白如何为 N 使用寄存器或内存,因为当我尝试这样做时,我被告知“无效指令操作数”
- 用户在 RequestNumber 过程中输入了一个数字 N(returns
EAX
)。 - 我正在尝试的计算是:结果 = 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
中。回想一下,cl
是 ecx
的低 8 位,所以如果将移位量放在 ecx
中,然后再移位 cl
,它会按预期工作:
mov ebx, 1
call RequestNumber ; returns eax
mov ecx, eax
shl ebx, cl
mov result, ebx