大家好,又见面了,我是你们的朋友全栈君。
移位指令
- 移动一位时由指令直接给出;
- 移动两位及以上,则移位次数由CL指定。
- 要求操作数不能是立即数;
- 这类指令的执行大多会影响6个状态标志位。
非循环移位指令
- 逻辑左移SHL(Shift Logic Left)
- 算术左移SAL(Shift Arithmetic Left)
- 逻辑右移SHR(Shift Logic Right)
- 算术右移SAR(Shift Arithmetic Right )
4条指令的格式完全相同,可实现对8位或16位寄存器操作数或内存操作数进行指定次数的移位。
逻辑移位指令针对的是无符号数,算术移位指令针对有符号数。
算术左移和逻辑左移
-
算术左移指令:
SAL OPRD,1
SAL OPRD,CL -
逻辑左移指令:
SHL OPRD,1
SHL OPRD,CL
逻辑右移
移动一位后,若最高位与次高位相同,则OF=0;否则OF=1。
SHR指令实现无符号数右移一位÷2。
例:
算术右移
SAR指令实现带符号数右移一位÷2
循环移位指令
指令格式、对操作数的要求与非循环移位指令相同
不带CF的循环左移指令ROL
格式
ROL OPRD,1
ROL OPRD,CL
操作
ROL指令将目标操作数向左循环移动一位或由CL指定的位数,最高位移入CF,同时再移入最低位构成循环,进位标志不在循环之内。
对标志位的影响同SAL/ SHL指令
例:
不带CF的循环右移指令ROR
格式
ROR OPRD,1
ROR OPRD,CL
操作
ROR指令将目标操作数向右循环移动一位或CL指定的位数,最低位移入CF,同时再移入最高位构成循环,进位标志不在循环之内。
对标志位的影响同SHR指令
带CF的循环左移指令RCL
格式
RCL OPRD,1
RCL OPRD,CL
操作
RCL指令将目标操作数连同进位标志位CF一起向左循环移动一位或CL指定的位数,最高位移入CF,而CF原来的值移入最低位。
对标志位的影响同ROL指令
带CF的循环右移指令RCR
格式
RCR OPRD,1
RCR OPRD,CL
操作
RCR指令将目标操作数连同进位标志位CF一起向右循环移动一位或CL指定的位数,最低位移入CF,而CF原来的值移入最高位。
对标志位的影响同ROR指令
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143949.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...