ARM中的LDR使用方法

发布者:qazwsx007最新更新时间:2016-07-13 来源: eefocus关键字:ARM  LDR  使用方法 手机看文章 扫描二维码
随时随地手机看文章
ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。

LDR伪指令的形式是“LDR Rn,=expr”。下面举一个例子来说明它的用法。

COUNT EQU       0x40003100

……

LDR       R1,=COUNT

MOV      R0,#0

STR       R0,[R1]

COUNT是我们定义的一个变量,地址为0x40003100。这中定义方法在汇编语言中是很常见的,如果使用过单片机的话,应该都熟悉这种用法。

LDR       R1,=COUNT是将COUNT这个变量的地址,也就是0x40003100放到R1中。

MOV      R0,#0是将立即数0放到R0中。最后一句STR      R0,[R1]是一个典型的存储指令,将R0中的值放到以R1中的值为地址的存储单元去。实际就是将0放到地址为0x40003100的存储单元中去。可 见这三条指令是为了完成对变量COUNT赋值。用三条指令来完成对一个变量的赋值,看起来有点不太舒服。这可能跟ARM的采用RISC有关。

下面还有一个例子

;将COUNT的值赋给R0

LDR       R1,=COUNT

LDR       R0,[R1]

LDR       R1,=COUNT这条伪指令,是怎样完成将COUNT的地址赋给R1,有兴趣的可以看它编译后的结果。这条指令实际上会编译成一条LDR指令和一条DCD伪指令。

LDR 的两种用法
1)LDR pc, =MyHandleIRQ 表示将MyHandleIRQ符号放入pc寄存器中
2)LDR PC,MyHandleIRQ 表示将读取存储器中MyHandleIRQ符号所表示的地址中的值,及需要多读一次存储器。
 
在代码中:
start:
        ldr pc,=MyHandleReset   @jump to HandleReset
        ldr pc,=MyHandleUndef   @jump to HandleUndef
        ldr pc,=MyHandleSWI     @jump to HandleSWI
        ldr pc,=MyHandleIabort  @jump to HandleIabort
        ldr pc,=MyHandleDabort  @jump to HandleDabort
        nop
        ldr pc,=MyHandleIRQ     @jump to HandleIRQ             <=之前出错的一行
        ldr pc,=MyHandleFIQ     @jump to HandleFIQ
 
@MyHandleIRQ:   .word OS_CPU_IRQ_ISR
MyHandleIRQ:
        sub lr, lr, #4          @ to calculate the return address      
        stmdb sp!, {r0-r12,lr}
        ldr lr, =int_return     @ restore the return address
        ldr pc, =int_handle     @ call for the interrupt handler
在“之前出错的一行”处,如果改成“ldr pc,MyHandleIRQ”当中断来临时,无法进行中断处理。
 
另一种情况是正确的,注意体会:
start:
        ldr pc,=MyHandleReset   @jump to HandleReset
        ldr pc,=MyHandleUndef   @jump to HandleUndef
        ldr pc,=MyHandleSWI     @jump to HandleSWI
        ldr pc,=MyHandleIabort  @jump to HandleIabort
        ldr pc,=MyHandleDabort  @jump to HandleDabort
        nop
        ldr pc,MyHandleIRQ     @jump to HandleIRQ             <=之前出错的一行
        ldr pc,=MyHandleFIQ     @jump to HandleFIQ
 
MyHandleIRQ:   .word OS_CPU_IRQ_ISR
@MyHandleIRQ:
       sub lr, lr, #4          @ to calculate the return address      
       stmdb sp!, {r0-r12,lr}
       ldr lr, =int_return     @ restore the return address
       ldr pc, =int_handle     @ call for the interrupt handler
因为当中断来临时,还需要去MyHandleIRQ处把OS_CPU_IRQ_ISR取出,即多取一次存储器。

关键字:ARM  LDR  使用方法 引用地址:ARM中的LDR使用方法

上一篇:ARM中的ldr指令发现有些网友说的是错的啊
下一篇:ARM MOV和 LDR指令关系

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

高性能、高能效,ARM全新CryptoCell安全IP缩短上市时间
Arm宣布推出CryptoCell-713和CryptoCell-703,提供高性能、高能效的平台安全功能,帮助Arm合作伙伴开发更具安全性的解决方案,并缩短上市时间。 在过去几年中,安全性已成为Arm合作伙伴及其客户共同面临的一个突出问题。然而,OEM厂商、芯片供应商(SiP)和开发人员至今仍面临诸多挑战。例如,在针对移动及其他设备开发安全解决方案时,便需要解决可信 执行环境( TEE)等方面的问题。 这些挑战包括:我们每天使用设备的资产价值日益增加(例如优质内容和机器学习(ML)/人工智能(AI)算法);中国市场复杂的监管要求;以及由于安全功能需要与现有IP集成而造成的上市时间延迟。除了合作伙伴面临的这些挑战之外,根
[嵌入式]
高性能、高能效,<font color='red'>ARM</font>全新CryptoCell安全IP缩短上市时间
Arm老乡UltraSoC获融资,携RISC-V等架构的分析技术来华
  与 ARM 一样发源于英国剑桥,这家做SoC嵌入式分析的IP公司尽管只有二十几人,但刚刚获得了600万美元的风投。不久前,该公司信心满满地来中国,参加了中国系列活动,例如在一年一度的ICCAD(中国集成电路设计业年会)2017上露面。下面就随嵌入式小编一起来了解一下相关内容吧。   这家公司就是 UltraSoC ,首席执行官Rupert Baines先生在ICCAD期间向电子产品世界记者介绍了RISC-V及该公司的产品。    RISC-V是CPU界的Linux    UltraSoC 的一大亮点是支持RISC-V,也是RISC-V联盟的活跃成员。据悉,现在RISC-V发展很快,已有一些客户用RISC-V做服务器、分布
[嵌入式]
基于ARM的车载GPS智能导航系统
1  引言 随着中国的城市化的程度不断加快,使得越来越多的人口与事业单位集中在一个“狭小”范围内生活与工作。城市的迅速“膨胀”直接导致了交通网络的日趋复杂,人员流动的日益频繁也使得每个人对空间信息有了更多的依赖。人们更加关心“当前我在哪里?”“目的地在哪里?”“如何到达?”等问题。而以嵌入式系统为平台的数字地理集成应用方案可以有效地解决这些矛盾。在此背景下,本文给出了基于 ARM 的嵌入式解决方案。 2  硬件实现 本嵌入式 GPS 导航系统的硬件核心是三星公司 ARM9 系列中的 16/32 位 RISC 处理器 S3C2410A 芯片,该芯片强大的实时处理能力和丰富的外围接口非常适
[应用]
ARM的常数表达式
如果说Intel指令中的立即数,相信大家都很熟悉。类似的,Arm指令中的 立即数 就是常数表达式。之所以称为常数表达式,而不称为立即数是有原因的。 Intel指令属于CISC指令集,指令是不定长的,因此可以将任意32位立即数编码到指令内。 Arm指令属于RISC指令集,指令是定长的32字节。众所周知,指令中操作码是必须的字段,如果把32位立即数直接编码到指令内部,操作码就无 容身之地 了 因此,Arm指令中 立即数 的位数必小于32位。那么如何在Arm指令中正常表示立即数呢?我们看看Arm的通用指令格式。 Arm指令中,操作码(opcode)、目的操作数(Rd)、源操作数1(Rn)是必须的字段。条件码(co
[单片机]
<font color='red'>ARM</font>的常数表达式
基于ARM Linux的图像采集与蓝牙传输
  嵌入式Linux系统具有可移植性好、网络功能强、优秀的GNU编译工具、免费的开放源代码等优点。S3C2410处理器是一款采用ARM920T结构,内部资源非常丰富的32位嵌入式处理器。USB摄像头具有低廉的价格,良好的性能,加上Linux下有V4L支持对其编程,很容易集成到嵌入式系统中。蓝牙技术是目前被认可的短距离无线通信技术,广泛应用于手机、电脑以及汽车免提系统。   本文介绍基于嵌入式Linux的USB图像采集系统,并通过构建好的嵌入式Linux下的蓝牙环境将采集到的图片传送到蓝牙手机上,实现监控功能。   1 软硬件平台概述   系统硬件平台如图1所示。该平台软件上采用嵌入式Linux操作系统;硬件上采用Sams
[单片机]
基于<font color='red'>ARM</font> Linux的图像采集与蓝牙传输
ARM推64位处理器架构ARMV8及芯片
北京时间10月31日消息,ARM宣布推出ARMv8 64位架构指令集之际,Applied Micro Circuits Corporation(AMCC)就推出了面向服务器市场的处理器X-Gene。 X-Gene架构 根据介绍,X-Gene采用高度集成的SoC片上系统设计,包含多个高性能ARMv8架构核心。该处理器主频最高可达3.0GHz,拥有强悍的单线程性能,支持完整的处理器和输入输出虚拟化,整合了服务器级别的动态电源管理技术,热设计功耗可根据需要进行配置,待机功耗不超过0.3W,支持万兆网络。 X-Gene与其他平台性能对比 根据AMCC的说法,搭载X-Gene的主机将可以减少50%以上
[嵌入式]
<font color='red'>ARM</font>推64位处理器架构ARMV8及芯片
基于ARM与FPGA的LCD控制器设计
随着显示屏技术的不断发展,真彩液晶显示屏以其高分辨率、高对比度及高清晰度等优势逐渐在嵌入式显示系统中占据重要地位。目前,基于嵌入式平台的LCD显控技术的实现主要有两种方式:ARM内嵌LCD控制器和独立的控制器件。但是这两种实现方式都存在着不足之处,内嵌控制器的使用可能增大处理器的负担和限制显示帧率,而外部控制器件不仅成本高,而且专用性比较强,很难适应不同类型的液晶屏。 据此存在的问题,这里提出一种基于ARM与FPGA的LCD控制器设计方案,该设计方案一方面能够通过操作LINUX OS下的Framebuffer设备提高显存的写入速率及减轻处理器的负担,另一方面用FPGA来实现LCD控制器的设计,开发周期短、功耗低,同时具有灵
[单片机]
基于<font color='red'>ARM</font>与FPGA的LCD控制器设计
Marvell助力Dell 打造“Copper” ARM架构服务器
2012年6月4日北京讯——全球整合式芯片解决方案的领导厂商美满电子科技(Marvell,NASDAQ:MRVL)今天宣布Dell最新推出的“Copper” ARM架构服务器采用了Marvell公司ARMADA® XP芯片。凭借对ARM 生态系统的支持,Dell致力于满足客户对于高密度、高能效、超低总拥有成本(TCO)的需求,Dell目前为特定的大客户和合作伙伴提供该款服务器。 Marvell云服务和基础架构(CSI)业务部门市场副总裁Paul Valentine表示:“我们非常荣幸地看到,Marvell技术成为在Dell新型云服务器平台中的技术核心部分。凭借着Marvell全方位的云服务和基础架构的专业性,Copper 在安全
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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