汇编移位指令SHR,SAR,SAL/SHL,ROR,ROL,RCR,RCL

目录

逻辑右移SHR

算数右移SAR(重点)

算数/逻辑左移SAL/SHL(完成的操作都一样)

循环右移ROR

循环左移ROL

带进位循环右移RCR

带进位循环左移RCL

总结

例题


移位指令为双操作数指令,用于将目的的操作数中的二进制数移位。

目的操作数只能是寄存器或内存

源操作数为移位的次数,只能是CL寄存器或者立即数1

移动完,CL的值不变

逻辑右移SHR

shift right

 

无符号数除以2

MOV AL,10
SHR AL,1
;0000 1010(10)
;移动后
;0000 0101;(5) CF=0  SHR是对于无符号数,开头直接补0即可

算数右移SAR(重点)

完成了带符号数除以2

shift  arithmetic right

MOV AL,80H;(-128)
SAR AL,1
;1000 0000
;移动后
;1100 0000 (-64) ;补的是符号位,最低位移入CF,CF=0

算数/逻辑左移SAL/SHL(完成的操作都一样)

SAL和SHL指令是一条机器指令的两种汇编指令表示

完成的是×2的操作不论是有符号还是无符号数

MOV AL,08H
SHL AL,1
;0000 1000
;左移后
;0001 0000;  末尾补0,最高位移入CF,CF=0
MOV AL,0FFH(-1)
SHL AL,1
;1111 1111
;移动后
;1111 1110(-2)末尾补零,最高位移入CF=1

循环右移ROR

Rotate Right 

循环左移ROL

Rotate  left

带进位循环右移RCR

rotate carry right

 这时候CF很重要,先把原来CF的值移入最高位,在把最低位的值移出给CF

  

带进位循环左移RCL

rotate carry left

总结

 移出的位都去CF

 移位次数>1,次数必须放CL

SHL AL,4;错误

;正确
MOV CL,4
SHL AL,CL

例题

MOV CL,04

SHL  DX,CL 

MOV BL,AH

SHL AX,CL

SHR BL,CL

OR DL,BL 

该程序段的功能是(DX和AX组合形成的32位数左移4位);若DX为1234H,AX为5678H,则程序运行后AX=(6780H

执行下面程序后,AX=(60

MOV AL,6

MOV AH,0

SAL AX,1

MOV BX,AX

SAL AL,1

SAL AL,1

ADD AX,BX

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>