问题描述
尝试使用 Shift-Left 指令进行乘法运算。
SHL
(左移)指令对目标操作数执行逻辑左移,用 0 填充最低位。
我不明白如何为 N 使用寄存器或内存,因为当我尝试这样做时,我被告知“指令操作数无效”
我的代码:
mov ebx,1
call RequestNumber ; returns eax
shl ebx,eax
mov result,ebx
我正在处理的作业要求使用 Shift 来获取结果 = 2^N
据我所知,您只能在此寄存器 CL
中使用 imm8 数字(尝试使用较低的 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