前言
吐槽一下下,汇编指令真的好多呀,学了这么多可是记住的却没几个,所以写下这篇文章加深对汇编移位指令的理解和记忆
文章目录
前言
1、逻辑移位指令
逻辑左移 SHL
逻辑右移 SHR
2、算术移位指令


算数左移 SAL

算术右移 SAR

3、循环移位指令


循环左移 ROL

循环右移 ROR

4、注意点
1、逻辑移位指令
逻辑移位指令适用于带符号数运算
逻辑左移 SHL
指令格式:SHL OPR,CNT
💖PR:是指被移位的操作数 💖 CNT:是指移位次数
比如将二进制数 1100 1111 左移 1 位,该数就变为 1001 1110,cf=1:
代码
MOV AL,0CFh
SHL AL,1逻辑右移 SHR
指令格式:SHR OPR,CNT
下图所示为二进制数 1100 1111 逻辑右移一位,得到 01100111,最低位移入进位标志位,cf=1:
代码
MOV AL,0CFH
SHR AL,12、算术移位指令
算术移位指令适用于无符号数运算
算数左移 SAL
指令格式:SAL OPR,CNT
🌺 算数左移和逻辑左移完全一样哒,这里就不多说了
算术右移 SAR
指令格式:SAR OPR,CNT
例如,二进制数 1100 1111,符号位为 1。算术右移一位后,得到 1110 0111:
代码
MOV AL,0CFH
SAR AL,13、循环移位指令
循环左移 ROL
指令格式:ROL OPR,CNT
比如将二进制数 1100 1111 循环左移 4 位,该数就变为1111 1100,cf=0:
代码
MOV CL,4
MOV AL,0CFH ;AL = 11001111b
ROL AL,4 ;左移1位:10011111b, cf=1
;左移2位: 00111111b, cf=1
;左移3位:01111110b, cf=0
;左移4位:11111100b, cf=0循环右移 ROR
指令格式:ROR OPR,CNT
比如将二进制数 1100 1111 循环右移 4 位,该数就变为 11111100,cf=1:
代码
MOV CL,4
MOV AL,0CFH ;AL = 11001111b
ROR AL,4 ;右移1位:11100111b, cf=1
;右移2位: 11110011b, cf=1
;右移3位:11111001b, cf=1
;右移4位:11111100b, cf=14、注意点
移位次数由CNT决定,它的取值为1或者CL
(1)CNT=1时,只移动一位
MOV BL,8Fh ; BL = 10001111b
SHL BL,1 ;移位后 BL = 00011110b(2)CNT > 1时,则在使用移位指令前,应首先将移位次数送给CL寄存器
MOV BL,8Fh ; BL = 10001111b
MOV CL,2
SHL BL,CL ;移位后 BL = 00111100b
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/115863.html