第1天-ARM汇编指令LSL/LSR/ASL/ASR

发布者:诗意世界最新更新时间:2015-09-30 来源: eefocus关键字:ARM  汇编指令  LSL  LSR  ASL  ASR 手机看文章 扫描二维码
随时随地手机看文章
移位
LSL
ASL
LSR
ASR
ROR
RRX
ARM 处理器组建了可以与数据处理指令(ADC、ADD、AND、BIC、CMN、CMP、EOR、MOV、MVN、ORR、RSB、SBC、SUB、TEQ、TST)一起使用的桶式移位器(barrel shifter)。你还可以使用桶式移位器影响在 LDR/STR 操作中的变址值。
译注:移位操作在 ARM 指令集中不作为单独的指令使用,它是指令格式中是一个字段,在汇编语言中表示为指令中的选项。如果数据处理指令的第二个操作数或者单一数据传送指令中的变址是寄存器,则可以对它进行各种移位操作。如果数据处理指令的第二个操作数是立即值,在指令中用 8 位立即值和 4 位循环移位来表示它,所以对大于 255 的立即值,汇编器尝试通过在指令中设置循环移位数量来表示它,如果不能表示则生成一个错误。在逻辑类指令中,逻辑运算指令由指令中 S 位的设置或清除来确定是否影响进位标志,而比较指令的 S 位总是设置的。在单一数据传送指令中指定移位的数量只能用立即值而不能用寄存器。
下面是给不同的移位类型的六个助记符:
LSL 逻辑左移 ASL 算术左移 LSR 逻辑右移 ASR 算术右移 ROR 循环右移 RRX 带扩展的循环右移
ASL 和 LSL 是等同的,可以自由互换。
你可以用一个立即值(从 0 到 31)指定移位数量,或用包含在 0 和 31 之间的一个值的寄存器指定移位数量。
 
逻辑或算术左移
(Logical or Arithmetic Shift Left)
Rx, LSL #n or Rx, ASL #n or Rx, LSL Rn or Rx, ASL Rn
接受 Rx 的内容并按用‘n’或在寄存器 Rn 中指定的数量向高有效位方向移位。最低有效位用零来填充。除了概念上的第 33 位(就是被移出的最小的那位)之外丢弃移出最左端的高位,如果逻辑类指令中 S 位被设置了,则此位将成为从桶式移位器退出时进位标志的值。
考虑下列:
MOV R1, #12 MOV R0, R1, LSL#2
在退出时,R0 是 48。 这些指令形成的总和是 R0 = #12, LSL#2 等同于 BASIC 的 R0 = 12 << 2
 
逻辑右移
(Logical Shift Right)
Rx, LSR #n or Rx, LSR Rn
它在概念上与左移相对。把所有位向更低有效位方向移动。如果逻辑类指令中 S 位被设置了,则把最后被移出最右端的那位放置到进位标志中。它同于 BASIC 的 register = value >>> shift。
 
算术右移
(Arithmetic Shift Right)
Rx, ASR #n or Rx, ASR Rn
类似于 LSR,但使用要被移位的寄存器(Rx)的第 31 位的值来填充高位,用来保护补码表示中的符号。如果逻辑类指令中 S 位被设置了,则把最后被移出最右端的那位放置到进位标志中。它同于 BASIC 的 register = value >> shift。
 
循环右移
(Rotate Right)
Rx, ROR #n or Rx, ROR Rn
循环右移类似于逻辑右移,但是把从右侧移出去的位放置到左侧,如果逻辑类指令中 S 位被设置了,则同时放置到进位标志中,这就是位的‘循环’。一个移位量为 32 的操作将导致输出与输入完全一致,因为所有位都被移位了 32 个位置,又回到了开始时的位置!
 
带扩展的循环右移
(Rotate Right with extend)
Rx, RRX
这是一个 ROR#0 操作,它向右移动一个位置 - 不同之处是,它使用处理器的进位标志来提供一个要被移位的 33 位的数量。
关键字:ARM  汇编指令  LSL  LSR  ASL  ASR 引用地址:第1天-ARM汇编指令LSL/LSR/ASL/ASR

上一篇:第1天-ARM汇编指令BIC
下一篇:第1天-ARM汇编指令ADD/SUB/MUL

推荐阅读最新更新时间:2024-03-16 14:34

ARM雄鹰展翅:挑战英特尔
  导读:国外媒体今天撰文称,ARM即将凭借新款“Eagle”(鹰)处理器挑战英特尔在服务器市场的地位。   以下为文章全文:   当ARM高管发布新款Eagle处理器时,他们还不能说这款产品已经成型。但他们却毫不讳言,这款全新的设计将帮助这家英国公司进军一些新的市场。   与英特尔的竞争对手不同,ARM并没有直接将发明转化成产品,而是将技术授权给芯片制造商,而这些制造商则会在此基础上增加其他一些内容,从而生产出可以处理大量应用的芯片。最为知名的便是手机市场,ARM在这一市场占据主导。   ARM CEO沃伦·伊斯特(Warren East)周三晚间在在旧金山表示,自从20年前创立至今,ARM的处理器“核心”出货量已经达到
[嵌入式]
arm-linux-qt环境的建立
Arm-Linux嵌入式QT/E环境的建立(qt/e 3.x系列) QT/E 3.x系列比QT/E 2.x系列有非常大的改进,大大提高了开发进度,不再使用tmake,安装也更简单。但目前在网上关于QT/E 3.x系列的介绍还是比较少, 所以本文介绍一下QT/E 3.x系列的安装。 一、建立arm交叉编译工具链 在安装QT/E之前,应确保arm-linux交叉编译工具链已经建立,如果还没有可以参考以下步骤建立。 1、下载交叉编译工具cross-2.95.3.tar.bz2(或其他版本如:cross-3.4.4.tar.bz2),这是已经制作好的arm交叉编译工具链,只需解压及建交环境变量即可使用。 2、把文件cross-2
[单片机]
关于在ARM MDK 中使用STM32F4xx 硬件浮点单元
一. 前言 有工程师反应说Keil 下无法使用STM32F4xx 硬件浮点单元, 导致当运算浮点时运算时间过长,还有一些人反应不知如何使用芯片芯片内部的复杂数学运算,比如三角函数运算。针对这个部分本文将详细介绍如何使用硬件浮点单元以及相关数学运算。 二.问题产生原因 1. ------对于Keil MDK Version 5 版本, 编译器已经完全支持STM32F4xx 的FPU(浮点运算单元),可以直接 使用芯片内部的浮点运算单元。 2. ------对于Keil MDK Version 4 版本, 高版本v4,比如当前keil 官网可下载的v4.74.0.0 版本也已经支持 FPU,可以直接使用芯片内部浮点运算。但如果使用低
[单片机]
关于在<font color='red'>ARM</font> MDK 中使用STM32F4xx 硬件浮点单元
ARM与SDRAM芯片的联接
通常ARM芯片内置的内存很少,要运行Linux,需要扩展内存。ARM9扩展内存使用SDRAM内存,ARM11使用 DDR SDRAM。以ARM9核心的S3C2440为例,介绍一下内存的扩展。 S3C2440通常外接32位64MBytes的SDRAM,采用两片16位256Mbits的SDRAM芯片(如HY57V561620),SDRAM芯片通过地址总线、数据总线、若干控制线与S3C2440芯片相连。 S3C2440的地址总线:27根地址线----ADDR 。 S3C2440的数据总线:32根数据线----DATA 。 S3C2440的SDRAM控制线: 1、SDRAM片选----nGCS6(对应ARM的地址0x3000 0
[单片机]
适用于工业和物联网边缘的更安全更高效的i.MX处理器
在嵌入式世界大会2021上,恩智浦(NXP)发布了先进的i.MX 9应用处理器,该处理器在工业和物联网边缘的安全性,能效和可扩展性方面具有改进的性能。对其产品组合的更新通过集成EdgeLock安全区域来增强边缘处理器的安全性,EdgeLock安全区域是一个独立的,自我管理的芯片上的安全子系统,可简化尖端安全技术的部署。 在与EEWeb的采访中,恩智浦边缘处理业务和技术战略负责人Gowri Chindalore,恩智浦产品管理总监Amanda McGregor和边缘处理高级架构师Mohit Arora强调了EdgeVerse产品组合的扩展及其跨界应用,并通过Energy Flex架构最大化效率。 Chindalore表示:“
[嵌入式]
适用于工业和物联网边缘的更安全更高效的i.MX处理器
ARM协处理器指令
ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令。ARM 的协处理器指令主要用于 ARM 处理器初始化 ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在 ARM 协处理器的寄存器和存储器之间传送数据。 ARM 协处理器指令包括以下 5 条: CDP 协处理器数操作指令 LDC 协处理器数据加载指令 STC 协处理器数据存储指令 MCR ARM 处理器寄存器到协处理器寄存器的数据传送指令 MRC 协处理器寄存器到ARM 处理器寄存器的数据传送指令 ......
[单片机]
arm 下C编程的非对齐访问
看到这个标题,你以为我要讲的是程序中结构体的字节对齐问题,那你就错了,我要讲的是arm下的对于非对齐数据的访问。这个问题把我折腾了一天啊! 闲话少说了,先贴一个测试的代码,如果有arm开发板的同学可以拿到板子上跑一下,和在x86机器上跑出来的程序结果对比一下。 测试代码 #include stdio.h #include stdlib.h struct test { unsigned char a; unsigned char b; unsigned char sc; unsigned char sd; }; struct test bbb; int main (int argc, char argv) {
[单片机]
ARM推出高性能Cortex-M7处理器 助力微处理器市场发展
ARM宣布推出最新的32位Cortex-M处理器Cortex-M7,这款处理器相较于目前性能最高的ARM架构微控制器(MCU),可大幅提升两倍的运算及数字信号处理(DSP)性能。ARM Cortex-M7处理器针对高端嵌入式应用,适用于新一代汽车电子、连网设备以及智能家居与工业应用。首批获得ARM Cortex-M7处理器授权的厂商包括Atmel、飞思卡尔与意法半导体。 ARM处理器部门总经理Noel Hurley表示:“ARM Cortex-M处理器系列新增Cortex-M7之后,ARM与合作伙伴将可为互联世界提供最具可扩展性与拥有最高软件兼容性的解决方案。通过Cortex-M7的多样性与全新的内存功能,开发者可以为各
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved