理论教育 移位和循环移位指令详解

移位和循环移位指令详解

时间:2023-06-27 理论教育 版权反馈
【摘要】:数据移位指令是对数值的每一位进行左移或右移,从而实现数值变换。数据移位指令主要包括字节、字和双字的左、右移位指令。当EN端口执行条件存在时,将IN端口指定的双字数据循环右移N位后,输出到OUT端口指定的双字单元。从而使移动位数在0~15;对于双字循环移位指令,如果移位数目大于或等于32,执行循环之前在移动位数上执行模数32操作。

移位和循环移位指令详解

数据移位指令是对数值的每一位进行左移或右移,从而实现数值变换。数据移位指令主要包括字节、字和双字的左、右移位指令。

1.SRB、SLB、SRW、SLW、SRD和SLD指令

(1)指令格式。

STL :SRB OUT,N SLB OUT,N SRW OUT,N

LAD:

STL: SLW OUT,N SRD OUT,N SLD OUT,N

LAD:

(2)指令功能。

SRB:字节右移移位指令。当EN端口执行条件存在时,将 IN端口指定的字节数据右移N位后,输出到OUT端口指定的字节单元

SLB:字节左移移位指令。当 EN端口执行条件存在时,将 IN端口指定的字节数据左移N位后,输出到OUT端口指定的字节单元。

SRW:字右移移位指令。当EN端口执行条件存在时,将IN端口指定的字数据右移N位后,输出到OUT端口指定的字单元。

SLW:字左移移位指令。当EN端口执行条件存在时,将IN端口指定的字数据左移N位后,输出到OUT端口指定的字单元。

SRD:双字右移移位指令。当EN端口执行条件存在时,将IN端口指定的双字数据右移N位后,输出到OUT端口指定的双字单元。

SLD:双字左移移位指令。当 EN端口执行条件存在时,将 IN端口指定的双字数据左移N位后,输出到OUT端口指定的双字单元。

(3)指令应用。

传送指令应用如图4-44所示。

图4-44 传送指令应用

(4)指令说明。

① 以上6条指令均为无符号操作。

② 移位指令对每个移出位补0。字节移位指令:如果移位数目(N)大于或等于8,则数值最多被移位8次;字移位指令:如果移位数目(N)大于或等于16,则数值最多被移位16次;双字移位指令:如果移位数目(N)大于或等于32,则数值最多被移位32次。(www.daowen.com)

2.RRB、RLB、RRW、RLW、RRD和RLD指令

(1)指令格式。

STL: RRB OUT,N RLB OUT,N RRW OUT,N

LAD:

STL: RLW OUT,N RRD OUT,N RLD OUT,N

LAD:

(2)指令功能。

RRB:字节循环右移移位指令。当EN端口执行条件存在时,将IN端口指定的字节数据循环右移N位后,输出到OUT端口指定的字节单元。

RLB:字节循环左移移位指令。当EN端口执行条件存在时,将IN端口指定的字节数据循环左移N位后,输出到OUT端口指定的字节单元。

RRW:字循环右移位指令。当EN端口执行条件存在时,将IN端口指定的字数据循环右移N位后,输出到OUT端口指定的字单元。

RLW:字循环左移位指令。当EN端口执行条件存在时,将IN端口指定的字数据循环左移N位后,输出到OUT端口指定的字单元。

RRD:双字循环右移移位指令。当EN端口执行条件存在时,将IN端口指定的双字数据循环右移N位后,输出到OUT端口指定的双字单元。

RLD:双字循环左移移位指令。当EN端口执行条件存在时,将IN端口指定的双字数据循环左移N位后,输出到OUT端口指定的双字单元。

(3)指令应用(见图4-44)

(4)指令说明。

① 以上6条指令均为无符号操作。

② 对于字节循环移位指令,如果移位数目(N)大于或等于8,执行循环之前先对位数(N)进行模数8操作,从而使位数在0~7;对于字循环移位指令,如果移动位数(N)大于或等于16,在循环执行之前的移动位数(N)上执行模数16操作。从而使移动位数在0~15;

对于双字循环移位指令,如果移位数目(N)大于或等于32,执行循环之前在移动位数(N)上执行模数32操作。从而使位数在0~31。

③ 如果取模后移动位数为 0,则不执行循环操作。如果执行循环操作,循环的最后一位数值被复制至溢出位(SM1.1)。

④ 特殊内存位:SM1.0当需要循环的数值是零时,设置为零位;而SM1.1为溢出标志位,即循环出的最后一个位。

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

我要反馈