购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.10 移位操作指令

本节介绍右移和左移操作指令,下面对这些指令进行详细介绍。

4.10.1 右移指令

1.ASRS<Rd>,<Rm>

该指令执行算术右移操作。将保存在寄存器Rd中的数据向右移动Rm所指定的次数,移位的结果保存在寄存器Rd中,即Rd=Rd>>Rm。在右移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。算术右移操作如图4.56(a)所示。

图4.56 算术和逻辑右移操作

该汇编助记符指令的机器码格式如图4.57所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。

图4.57 ASRS<Rd>,<Rm>指令的机器码格式

指令ASRS R0,R1,其机器码为(4108) 16 。该指令将保存在寄存器R0中的数据向右移动R1所指定的次数,移位的结果保存在寄存器R0中。在右移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。

2.ASRS<Rd>,<Rm>,#imm

该指令执行算术右移操作。将保存在寄存器Rm中的数据向右移动立即数imm所指定的次数,移位的结果保存在寄存器Rd中。在右移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志,该汇编助记符指令的机器码格式如图4.58所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。

图4.58 ASRS<Rd>,<Rm>,#imm指令的机器码格式

注: (1)汇编指令中立即数imm的范围为1~32。

(2)当imm<32时,imm5=imm;当imm=32时,imm5=0。

指令ASRS R0,R1,#0x01,其机器码为(1048) 16 。该指令将保存在寄存器R1中的数据向右移动1次,移位的结果保存在寄存器R0中。在右移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。

3.LSRS<Rd>,<Rm>

该指令执行逻辑右移操作。将保存在寄存器Rd中的数据向右移动Rm所指定的次数,移位的结果保存在寄存器Rd中。在右移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。逻辑右移操作如图4.56(b)所示。该汇编助记符指令的机器码格式如图4.59所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。

图4.59 LSRS<Rd>,<Rm>指令的机器码格式

指令LSRS R0,R1,其机器码为(40C8) 16 。该指令将保存在寄存器R0中的数据向右移动R1所指定的次数,移位的结果保存在寄存器R0中。在右移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。

4.LSRS<Rd>,<Rm>,#imm

该指令执行逻辑右移操作。将保存在寄存器Rm中的数据向右移动立即数#imm所指定的次数,移位的结果保存在寄存器Rd中。在右移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。该汇编助记符指令的机器码格式如图4.60所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。

图4.60 LSRS<Rd>,<Rm>,#imm指令的机器码格式

注: (1)汇编指令中立即数imm的范围为1~32。

(2)当imm<32时,imm5=imm;当imm=32时,imm5=0。

指令LSRS R0,R1,#0x01,其机器码为(0848) 16 。该指令将保存在寄存器R1中的数据向右移动1次,移位的结果保存在寄存器R0中。在右移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。

5.RORS<Rd>,<Rm>

该指令执行循环右移操作。将保存在寄存器Rd中的数据向右循环移动Rm所指定的次数,移位的结果保存在寄存器Rd中。在循环右移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。循环右移操作如图4.61所示。该汇编助记符指令的机器码格式如图4.62所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。

图4.61 循环右移操作

图4.62 RORS<Rd>,<Rm>指令的机器码格式

指令RORS R0,R1,其机器码为(41C8) 16 。该指令将保存在寄存器R0中的数据向右循环移动R1所指定的次数,移位的结果保存在寄存器R0中。在循环右移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。

4.10.2 左移指令

1.LSLS<Rd>,<Rm>

该指令执行逻辑左移操作。将保存在寄存器Rd中的数据向左移动Rm所指定的次数,移位的结果保存在寄存器Rd中。在左移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。逻辑左移操作如图4.63所示。该汇编助记符指令的机器码格式如图4.64所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。

图4.63 逻辑左移操作

图4.64 LSLS<Rd>,<Rm>指令的机器码格式

指令LSLS R0,R1,其机器码为(4088) 16 。该指令将保存在寄存器R0中的数据向左移动R1所指定的次数,移位的结果保存在寄存器R0中。在左移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。

2.LSLS<Rd>,<Rm>,#imm

该指令执行逻辑左移操作。将保存在寄存器Rd中的数据向左移动立即数imm所指定的次数,移位的结果保存在寄存器Rd中,在左移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。该汇编助记符指令的机器码格式如图4.65所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。

图4.65 LSLS<Rd>,<Rm>,#imm指令的机器码格式

注: imm5与imm之间的关系参见LSRS指令。

指令LSLS R0,R1,#0x01,其机器码为(0048) 16 。该指令将保存在寄存器R1中的数据向左移动1次,移位的结果保存在寄存器R0中。在左移过程中,最后移出去的位保存在寄存器APSR的C标志中,也更新N和Z标志。

思考与练习4.11:说明以下指令实现的功能。

(1)ASRS R7,R5,#9____________________________________

(2)LSLS R1,R2,#3____________________________________

(3)LSRS R4,R5,#6____________________________________

(4)RORS R4,R4,R6_____________________________________ PPJQFzzaIZn6CQiwS1vDr1wmE6CNyV/Y+G1wJSkcQqSu/7FFRJz+T0Xf5KhexSLX

点击中间区域
呼出菜单
上一章
目录
下一章
×