首页 理论教育 寄存器移位寻址在嵌入式系统中的应用

寄存器移位寻址在嵌入式系统中的应用

时间:2023-11-23 理论教育 版权反馈
【摘要】:寄存器移位寻址是ARM 指令集特有的寻址方式。对通用寄存器中的内容进行算术左移操作,按操作数所指定的数量向左移位,右端(低位)用“0”来补充。由于左移空出的有效位用“0”填充,因而它与LSL同义。其中,操作数可以是通用寄存器中的数据,也可以是立即数。只有当移位的类型为RRX 时,不需指定移位位数。寄存器移位寻址举例如下:寄存器R1 的内容分别逻辑右移3 位、R4 位,再与寄存器R2 的内容相加,结果放入R3 中。

寄存器移位寻址在嵌入式系统中的应用

寄存器移位寻址是ARM 指令集特有的寻址方式。 当第二个操作数是寄存器移位方式时,第二个寄存器操作数在与第一个操作数结合之前,要进行相应的移位操作。

ARM 可以采用六种移位操作类型,分别如下:

①LSL:逻辑左移(Logical Shift Left)。 对通用寄存器中的内容进行逻辑左移操作,按操作数所指定的数量向左移位,右端(低位)用“0”来补充。 其中,操作数可以是通用寄存器中的数据,也可以是立即数(0 ~31)。

②LSR:逻辑右移(Logical Shift Right)。 对通用寄存器中的内容进行逻辑右移操作,按操作数所指定的数量向右移位,左端(高位)用“0”来补充。 其中,操作数可以是通用寄存器中的数据,也可以是立即数(0 ~31)。

③ASL:算术左移(Arithmetic Shift Left)。 对通用寄存器中的内容进行算术左移操作,按操作数所指定的数量向左移位,右端(低位)用“0”来补充。 其中,操作数可以是通用寄存器中的数据,也可以是立即数(0 ~31)。 由于左移空出的有效位用“0”填充,因而它与LSL同义。

④ASR:算术右移。 对通用寄存器中的内容进行算术右移操作,按操作数所指定的数量向右移位,左端(高位)用第31 位的值来补充。 其中,操作数可以是通用寄存器中的数据,也可以是立即数(0 ~31)。 算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。 如果源操作数是正数,空出的最高有效位用“0”填充,如果是负数用“1”填充。(www.xing528.com)

⑤ROR:循环右移。 对通用寄存器中的内容进行循环右移操作,按操作数所指定的数量向右移位,左端用右端移出的位来补充。 其中,操作数可以是通用寄存器中的数据,也可以是立即数(0 ~31)。

⑥RRX:带扩展的循环右移。 对通用寄存器中的内容进行带扩展的循环右移操作,按操作数所指定的数量向右移1 位,左端用进位标志位C 来补充。 其中,操作数可以是通用寄存器中的数据,也可以是立即数(0 ~31)。 只有当移位的类型为RRX 时,不需指定移位位数。

寄存器移位寻址举例如下:

寄存器R1 的内容分别逻辑右移3 位、R4 位(也即R1 ÷8、R1 ÷2R4),再与寄存器R2 的内容相加,结果放入R3 中。

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

我要反馈