汇编-SHL左移
SAL(算术左移)指令的操作与SHL 指令一样
SHL(左移)指令使目的操作数逻辑左移一位,最低位用 0 填充。最高位移入进位标志位,而进位标志位中原来的数值被丢弃:
若将 1100 1111 左移 1 位,该数就变为 1001 1110:
格式:
SHL destination,count
第一个操作数是目的操作数,第二个操作数是移位次数
该指令可用的操作数类型如下所示:
SHL reg, imm8
SHL mem, imm8
SHL reg, CL
SHL mem, CL
x86 处理器允许 imm8 为 0〜255 中的任何整数。另外,CL 寄存器包含的是移位计数。上述格式同样适用于 SHR、SAL、SAR、ROR、ROL、RCR 和 RCL 指令
.386 .model flat,stdcall option casemap:none .stack 4096 ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov bl,8Fh ;BL = 10001111b shl bl,1 ;CF = 1, BL = 00011110b INVOKE ExitProcess,0 main ENDP END main
当一个数多次进行左移时,进位标志位保存的是最后移岀最高有效位(MSB)的数值。下例中,位 7 没有留在进位标志位中,因为,它被位 6(0)替换了
.386 .model flat,stdcall option casemap:none .stack 4096 ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov bl,8Fh ;BL = 10000000b shl bl,2 ;CF = 0, AL = 00000000b INVOKE ExitProcess,0 main ENDP END main
任何操作数左移 n 位,即将该数乘以 2n。现将整数 5 左移一位则得到 5 x 2¹ = 10:
.386 .model flat,stdcall option casemap:none .stack 4096 ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov ebx,5 shl ebx,1 ;EBX = 0000000A INVOKE ExitProcess,0 main ENDP END main
.386 .model flat,stdcall option casemap:none .stack 4096 ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov cl,2 mov ebx,5 shl ebx,2 ;EBX = 00000014h=20 INVOKE ExitProcess,0 main ENDP END main
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2022-12-06 MFC--BITMAP HBITMAP CBitmap
2021-12-06 opencv-buildPyramid图像金字塔
2021-12-06 opencv-pyrDown降采样和pyrUp升采样
2019-12-06 我的常用软件