ARM指令集-移位指令
ARM微处理器内嵌的桶型移位器(Barrel Shifter),支持数据的各种移位操作,移位操作在 ARM指令集中不作为单独的指令使用,它只能作为指令格式中是一个字段,在汇编语言中表示为指令中的选项。例如,数据处理指令的第二个操作数为寄存器时,就可以加入移位操作选项对它进行各种移位操作。移位操作包括如下6种类型, ASL和 LSL是等价的,可以自由互换:
— LSL逻辑左移
— ASL算术左移
— LSR逻辑右移
— ASR算术右移
— ROR循环右移
— RRX带扩展的循环右移
1.LSL(或ASL)操作
LSL(或ASL)操作的格式为:
通用寄存器, LSL (或 ASL )操作数
LSL(或ASL)可完成对通用寄存器中的内容进行逻辑(或算术)的左移操作,按操作数
所指定的数量向左移位,低位用零来填充。其中,操作数可以是通用寄存器,也可以是立即数( 0~ 31 )。
操作示例:
MOV R0, R1, LSL#2;将 R1中的内容左移两位后传送到 R0中。
2.LSR操作
LSR操作的格式为:
通用寄存器, LSR操作数
LSR可完成对通用寄存器中的内容进行右移的操作,按操作数所指定的数量向右移位,左端用零来填充。其中,操作数可以是通用寄存器,也可以是立即数( 0~ 31 )。
操作示例:
MOV R0, R1, LSR#2;将 R1中的内容右移两位后传送到 R0中,左端用零来填充。
3.ASR操作
ASR操作的格式为:
通用寄存器, ASR操作数
ASR可完成对通用寄存器中的内容进行右移的操作,按操作数所指定的数量向右移位,左端用第31位的值来填充。其中,操作数可以是通用寄存器,也可以是立即数( 0~ 31 )。
操作示例:
MOV R0, R1, ASR#2;将 R1中的内容右移两位后传送到 R0中,左端用第 31位的值来填充。
4.ROR操作
ROR操作的格式为:
通用寄存器, ROR操作数
ROR可完成对通用寄存器中的内容进行循环右移的操作,按操作数所指定的数量向右循环移位,左端用右端移出的位来填充。其中,操作数可以是通用寄存器,也可以是立即数( 0~ 31 )。显然,当进行 32位的循环右移操作时,通用寄存器中的值不改变。
操作示例:
MOV R0, R1, ROR#2;将 R1中的内容循环右移两位后传送到 R0中。
5.RRX操作
RRX操作的格式为:
通用寄存器, RRX操作数
RRX可完成对通用寄存器中的内容进行带扩展的循环右移的操作,按操作数所指定的数量向右循环移位,左端用进位标志位 C来填充。其中,操作数可以是通用寄存器,也可以是立即数( 0~ 31 )。
操作示例:
MOV R0, R1, RRX#2;将 R1中的内容进行带扩展的循环右移两位后传送到 R0中。
引用网址:http://www.b2b99.com/hyzs/dz/4611.htm
ARM指令集--移位指令
最新推荐文章于 2024-08-22 09:29:59 发布