首页 理论教育 移位与循环指令详解

移位与循环指令详解

更新时间:2025-01-08 工作计划 版权反馈
【摘要】:移位和循环移位指令就是完成这种操作。由移位指令移空的位会用0或符号位的信号状态补上。可以使用跳转指令来检测CC1位。整数右移指令用于将输入IN的0~15位逐位向右移动。如果N大于16,指令将按照N等于16的情况执行。在输出OUT位置扫描移位指令的结果。整数右移指令说明见表4-16。长整数右移指令除了数据位数其余与整数右移指令相同。循环移位指令只有循环左移双字和循环右移双字两条指令。

存储器中的一个二进制数向左移n位相当于乘以2的n次幂;向右移n位相当于除以2的n次幂。移位和循环移位指令就是完成这种操作。使用移位指令可逐位向左或向右移动输入端IN的内容。

由移位指令移空的位会用0或符号位的信号状态补上。最后移动的位的信号状态会被载入状态字的CC1位中。状态字的CC0位和OV位会被复位为0。可以使用跳转指令来检测CC1位。

1.移位指令

移位指令包括整数右移(SHR_I)、长整数右移(SHR_DI)、字左移和右移(SHL_W和SHR_W)、双字左移和右移(SHL_DW和SHR_DW)6条指令。

整数右移指令用于将输入IN的0~15位逐位向右移动。16~31位不受影响。输入N用于指定移位的位数。如果N大于16,指令将按照N等于16的情况执行。自左移入的、用于填补空出位的位置将被赋予位15的逻辑状态(整数的符号位)。即当该整数为正时,这些位将被赋值“0”,而当该整数为负时,则被赋值为“1”。在输出OUT位置扫描移位指令的结果。如果N不等于0,指令会将CC0位和OV位设为“0”。整数右移指令说明见表4-16。

表4-16 整数右移指令说明

978-7-111-44821-1-Chapter04-54.jpg

ENO与EN具有相同的信号状态。(www.xing528.com)

长整数右移指令除了数据位数其余与整数右移指令相同。

SHL_W(字左移)指令通过使能(EN)输入位置上的逻辑“1”来激活。SHL_W指令用于将输入IN的0~15位逐位向左移动。16~31位不受影响。输入N用于指定移位的位数。若N大于16,此命令会在输出OUT位置上写入“0”,并将状态字中的CC0位和OV位设置为“0”,指令将自右移入N个0,用以补上空出的位。可在输出OUT位置扫描移位指令的结果。如果N不等于0,则SHL_W会将CC0位和OV位设为“0”。

字和双字没有符号位,所以在移出的位都填“0”。

其他几条指令的执行过程与此相同。

2.循环移位指令

循环移位和不循环移位的区别在于,循环移位把操作数的最高位和最低位连接起来,参与数据的移动。比如循环右移时,最低位移出的数据位移动到最高位,其余的各个位依次右移1位。循环左移则与此相反。循环移位通过状态字的CC1位进行,而CC0位被复位为0。

循环移位指令只有循环左移双字(ROL_DW)和循环右移双字(ROR_DW)两条指令。输入N用于指定循环移位的位数。如果N大于32,则双字IN将被循环移位((N-1)对32求模,所得的余数)+1位。如果N不等于0,则指令会将CC0位和OV位设为“0”。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈