ARM 如何实现绝对地址的跳转

发布者:创新思绪最新更新时间:2019-02-13 来源: eefocus关键字:ARM  绝对地址  跳转 手机看文章 扫描二维码
随时随地手机看文章

基于 b跳转指令,ldr伪指令,ldr加载指令分析


有以下场景需用到


1.实现从Stepingstone中执行部分指令后,需跳转到SDRAM中执行,前提是必须先将NAND FLASH中代码copy到SDRAM,然后才能跳转到SDRAM去执行。跳转到SDRAM 需使用LDR伪指令LDR PC,=SDRAM 来实现


分析:


b指令是相对跳转指令,可以看到起反汇编代码是完全一样的,它依赖于当前PC寄存器的值,不管此代码链接地址如何,b指令都可以跳转到正确位置,这类指令称为位置无关指令


ldr pc,=labr 伪指令,从反汇编代码可以看出,是从内存的某个位置读出数据,并赋给pc寄存器,其中存放的值依赖于链接脚本文件的链接地址。是绝对跳转指令。


2.在SDRAM中实现中断的调试,必须将中断向量也在0x00000000位置放置,让其跳转到SDRAM对应位置


Vectors         

ldr     PC, Reset_Addr     ;@0x00复位    

ldr     PC, Undef_Addr ;@ 0x04: 未定义指令中止模式的向量地址

ldr     PC, SWI_Addr ;@ 0x08: 管理模式的向量地址,通过SWI指令进入此模式

ldr     PC, PAbt_Addr ;@ 0x0c: 指令预取终止导致的异常的向量地址

ldr     PC, DAbt_Addr ;@ 0x10: 数据访问终止导致的异常的向量地址

nop ;@ 0x14: 保留

ldr     PC, IRQ_Addr ;@ 0x18: 中断模式的向量地址

ldr    PC, FIQ_Addr  ;@ 0x1c: 快中断模式的向量地址

Reset_Addr      DCD     Reset_Handler

Undef_Addr      DCD     Undef_Handler

SWI_Addr        DCD     SWI_Handler

PAbt_Addr       DCD     PAbt_Handler

DAbt_Addr       DCD     DAbt_Handler

                nop

IRQ_Addr        DCD     IRQ_Handler

FIQ_Addr        DCD     FIQ_Handler

Reset_Handler                

   

Undef_Handler b Undef_Handler ;未用到,可以用此指令保留

SWI_Handler b SWI_Handler ;未用到,可以用此指令保留

PAbt_Handler b PAbt_Handler ;未用到,可以用此指令保留

DAbt_Handler b DAbt_Handler ;未用到,可以用此指令保留

FIQ_Handler b FIQ_Handler ;未用到,可以用此指令保留

IRQ_Handler

    sub lr, lr, #4                  ;@ 计算返回地址

    stmdb   sp!,    { r0-r12,lr }   ;@ 保存使用到的寄存器

                                    ;@ 注意,此时的sp是中断模式的sp

                                     ;@ 初始值是上面设置的3072

ldr lr , =int_return

    ldr pc, =EINT_Handle            ;@ 调用中断服务函数,在interrupt.c中

int_return ;因为ldr跳转不能够把下一条指令的地址保存到lr,所以需要在跳转之前字写指令保存起来,

    ldmia   sp!,    { r0-r12,pc }^ ;@ 中断返回, ^表示将spsr的值复制到cpsr

    END

使用ldr加载指令(not ldr伪指令)实现绝对地址跳转


hander标号依赖于链接脚本地址的设定,将hander地址放在标号为step3标号的内存中,从而达到实现绝对地址跳转的目的。


+++++++++++link2.s+++++++++


.text


.global _start


_start:         b   step1


step1:          ldr pc,=step2


 


step2:          ldr pc,step3


step3:          .long   hander


hander:         b step4


step4:          b step4


 

+++++++++++Makefile++++++++++++++



link2:  link2.s


arm-linux-gcc -c -o link2.o link2.s


arm-linux-ld -Ttext 0x00000000 link2.o -o link2_elf_0x00000000


arm-linux-ld -Ttext 0x30000000 link2.o -o link2_elf_0x30000000


arm-linux-objdump -D link2_elf_0x00000000 > link2_0x00000000_dis


arm-linux-objdump -D link2_elf_0x30000000 > link2_0x30000000_dis


clean :


rm -f  *.o


  

link2_elf_0x30000000:    file format elf32-littlearm


Disassembly of section .text:


30000000


30000000:  eaffffff      b       30000004


30000004


30000004:  e59ff00c   ldr     pc, [pc, #12]; 30000018


30000008


30000008:  e51ff004   ldr     pc, [pc, #-4]         ; 3000000c


3000000c


3000000c:  30000010 .word         0x30000010


30000010


30000010:  eaffffff      b       30000014


30000014


30000014:  eafffffe     b       30000014


30000018:  30000008 .word         0x30000008


 

link2_elf_0x00000000:    file format elf32-littlearm


Disassembly of section .text:


00000000


   0:          eaffffff      b       4


00000004


   4:          e59ff00c   ldr     pc, [pc, #12]        ; 18


00000008


   8:          e51ff004   ldr     pc, [pc, #-4]         ; c


0000000c


   c: 00000010 .word         0x00000010


00000010


  10:          eaffffff      b       14


00000014


  14:          eafffffe     b       14


  18:          00000008 .word         0x00000008


关键字:ARM  绝对地址  跳转 引用地址:ARM 如何实现绝对地址的跳转

上一篇:ARM 平台printf函数定位到uart输出介绍
下一篇:基于S3C2410 的MDK 例程移植

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

STM32与通常ARM的区别
ARM是英国的芯片设计公司,其最成功的莫过于32位嵌入式CPU核----ARM系列,最常用的是ARM7和ARM9,ARM公司主要提供IP核,就是CPU的内核结构,只包括最核心的部分,并不是完整的处理器. ARM把这个核卖给各大半导体公司,如 Pllips 三星 ,ATMEL 等等,许多公司,甚至Intel. ARM为了对付 8位机市场,最近推出了 Cortex-M3核,STM32就是意大利的意法半导体基于Cortex-M3的32位嵌入式处理器, Cortex_M3核性价比更高,价格低,可以与8位单片机竞争 ARM Cortex-M3 处理器初探 单片机市场的规模可以用“巨无霸”来形容,预计到2010时每年能有20G片的出货量。世界
[单片机]
ARM Linux下使用GPIO模拟SPI时序详解
一、概述 SPI是英文SerialPeripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI是一种高速、全双工、同步通信总线,标准的SPI有4个引脚,常用于单片机和EEPROM、FLASH、实时时钟、数字信号处理等器件的通信。SPI通信原理要比I2C简单,它主要是主从方式通信,这种通信方式通常只有一个主机和一个或多个从机,标准的SPI是4根线,分别是SSEL(片选)、SCLK(时钟,也写作SCK)、MOSI(主机输入,从机输出)和MISO(主机输入,从机输出)。 SSEL:从设备片选使能信号。譬如从设备是低电平使能的话,当拉低这个引脚,从设备就会被选中,主机和这个被选中的从设备通信。 SCLK
[单片机]
在<font color='red'>ARM</font> Linux下使用GPIO模拟SPI时序详解
九寨沟、新疆地震突如其来,地震仪到底发展到啥程度了?
这两天,想必大伙一定被两则地震消息给刷屏了,一个是08月08日21时19分发生在四川阿坝州九寨沟县发生7.0级地震;另一个是8月9日7时27分,在新疆博尔塔拉州精河县发生 6.6级地震。有网友疑问,为什么 地震仪 不能提前预测并大幅度减少伤亡呢?地震仪的技术到底发展到什么程度了?   今天的《 方案馆 》,与非小编就和大伙说一说关于地震仪的故事。   发展史 说到地震仪,不知道大伙是不是和小编一样,“张衡”两个字瞬间跳到眼前。张衡是我国东汉时代的科学家在公元132年就制成了世界上最早的“地震仪”,准确的说是 地动仪 。此仪器据说能判定地震发生的方位,那个没有电子仪器的年代,这玩意当真有用吗?     地动仪的核心部件就是一个青
[嵌入式]
FARO Platinum Arm 在卡车厂焊装车间工件测量上的应用
一汽解放汽车有限公司(简称一汽解放公司)成立于2003年1月18日,是中国第一汽车集团公司以原第一汽车厂主体专业厂为基础,按照“1、2、3、3”的核心竞争力标准(即一个开发中心,采购和销售两个网络,焊装、涂装和总装三大工艺以及发动机、底盘、变速箱三大总成),以一汽技术中心为依托重新组建的中重型载重车制造企业,是一汽集团公司的全资子公司。 一汽解放公司的主导产品是解放系列品牌的中重型系列载重汽车。该系列产品现在具有从5吨到30吨的普通载货汽车、自卸车、牵引车、半挂车、搅拌车、邮政车等500多个品种。一汽的服务理念是“用户第一”,而赢得用户的关键就是靠质量说话,找到先进的质控手段成为现代制造工业检测的主流要求。 卡车厂焊装车间的典型
[测试测量]
ARM异常和中断
异常和中断 异常就是在程序运行过程中(USER mode),出现了一些异常情况,而中断是异常的一种情况. 模式和异常的对应关系 需要特别注意的就是,如果在程序执行过程中需要进行系统调用(程序正常运行在USER模式,而内核运行在SVC模式,user模式无法直接运行SVC模式的指令,因此需要通过异常的方式进入到特权模式. 故这里就通过SWI实现.),即 SWI软中断– SVC. 异常处理 异常向量表 存储在内存固定区域,表中每一个表项都对应一个异常类型,存了一个跳转指令:LDR PC, handle(将需要调用的函数地址放到PC中,即可跳转到指定的地址执行) 异常优先级 RESET Data Abort(数据异常) F
[单片机]
双核手机耗电引争议ARM认为大势所趋
  北京时间4月22日消息,双核手机宣传大于实际作用?ARM高管却不这么认为,他们认为双核是手机的未来。   最近,ARM移动战略主管布鲁斯(James Bruce)接受采访时说,在ARM的产品蓝图中,每一代产品速度要比上一代提高约1倍;2012年将推出A15芯片,它比今天的A9设计要快大约1倍。   然而问题的关键在于,增加一个核心会不会导致电池使用时限大幅下降。   这很难回答。   与英特尔、AMD的X86结构芯片不同,ARM授权的只是设计,三星和德仪等企业使用ARM设计,但芯片速度多快则自已决定,在决定后再根据时脉来增加各种功能。在软件方面,开发者被迫开发程序,以使CPU更有效利用。作为运营商和用户,则可以
[手机便携]
国内首个ARM架构云平台发布 完善国产芯片生态产业链
中新网贵阳10月13日电 (记者 刘鹏)13日,国内首个完全基于ARM商业架构的云平台“ARM架构云平台”在贵阳发布。该平台的推出旨在吸引和集成ARM阵营在芯片、硬件、软件平台的上下游产业链,从而推动国产服务器芯片领域的应用开发,完善和融合产业生态系统。 据了解,“ARM架构云平台”的建立基于贵州华芯通半导体技术有限公司生产的ARM架构中央处理器,充分利用了该服务器CPU的高性能、低功耗和低成本的优势。同时,基于华芯通半导体的服务器参考评估设备(REP),并通过与云服务提供商——云上贵州大数据产业发展有限公司(以下简称:云上贵州)合作,实现了典型的云服务应用。 华芯通半导体由贵州省及美国高通公司共同出资成立,注册地为贵州贵安新区,
[网络通信]
基于ARM9的指纹识别系统的设计和实现
生物识别技术是利用人体固有的生理特性(如指纹、脸象、红膜等)和行为特征(如笔迹、声音、步态等)来进行个人身份的鉴定。   生物识别技术比传统的身份鉴定方法更具安全、保密和方便性。生物特征识别技术具有不易遗忘、防伪性能好、不易伪造或被盗、随身“携带”和随时随地可用等优点。   生物识别的工作原理是利用生物识别设备对生物特征进行取样,提取其唯一的特征并将其转化成数字代码,并进一步将这些代码组成特征模板,人们同识别设备交互进行身份认证时,识别设备获取其特征并与数据库中的特征模板进行比对,以确定是否匹配,从而决定接受或拒绝该人。而在众多的用于身份验证的生物识别技术中,指纹识别技术是目前最方便、可靠、非侵害和价格便宜的解决方案。   
[模拟电子]
基于<font color='red'>ARM</font>9的指纹识别系统的设计和实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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