老是忘记一些指令的用法... ... 索性记下来,便于以后再查。就当是学习笔记了。
多寄存器和堆栈寻址的用法:
多寄存器寻址:LDMIA,LDMIB,STMIA,STMIB,LDMDA,LDMDB,STMDA,STMDB;
堆栈寻址:LDMFA,LDMFD,STMFA,STMFD,LDMEA,LDMED,STMEA,STMED;
指令后缀的解释:
弄清堆栈寻址的SP的变化:LDMFA,LDMFD,STMFA,STMFD,LDMEA,LDMED,STMEA,STMED;
IA: 每次传送后地址加4;
IB: 每次传送前地址加4;
DA: 每次传送后地址减4;
DB: 每次传送前地址减4;
FD: 满递减堆栈;
ED: 空递减堆栈;
FA: 满递增堆栈;
EA: 空递增堆栈。
1、多寄存器寻址:
LDMIA R0!,{R1-R4}
;R1<----[R0]
;R2<----[R0+4]
;R3<----[R0+8]
;R4<----[R0+12]
例如:
所有的示例指令执行前:
mem32[0x1000C] = 0x04
mem32[0x10008] = 0x03
mem32[0x10004] = 0x02
mem32[0x10000] = 0x01
r0 = 0x00010010
r1 = 0x00000000
r3 = 0x00000000
r4 = 0x00000000
1) ldmia r0!, {r1-r3} 2) ldmib r0!, {r1-r3}
执行后: 执行后:
r0 = 0x0010001C r0 = 0x0010001C
r1 = 0x01 r1 = 0x02
r2 = 0x02 r2 = 0x03
r3 = 0x03 r3 = 0x04
2、堆栈寻址:
STMFD入栈指令,相当于STMDB
STMFD SP!,{R2-R4}
;[SP-4]<---R4
;[SP-8]<---R3
;[SP-12]<---R2
LDMFD出栈指令,相当于LDMIA
LDMFD SP!,{R6-R8}
;R6<----[SP]
;R7<----[SP+4]
;R8<----[SP+8]
关键字:arm 寄存器 存取使用
引用地址:
arm 多寄存器存取使用
推荐阅读最新更新时间:2024-03-16 14:52
业界观察:ARM到底有没有被收购的可能?
近日,关于ARM将被收购的传言又起。由于ARM对整个智能终端产业影响甚大,因此相当数量的人都已经在思考一个问题:ARM到底有没有可能被收购? ARM收购风波 最近一个被风传将收购ARM的苹果公司,传闻收购价或高达80亿美元,这一数字几乎占到苹果417亿美元现金流量的20%。 但是,应对这些传言,ARM控股公司的首席执行官沃伦•伊斯特近日表示,最适合ARM发展的道路就是让其作为一个独立的企业存在,任何企图收购ARM的买家都无疑是在浪费钞票。 伊斯特认为比起英特尔公司,客户从ARM那里分享到公司的研发成果并且从ARM设计芯片中获利要更加简单高效。他表示ARM对于芯片的研发能力对于众多公司来说都“有利可图”,
[嵌入式]
ARM中的STM/LDM指令
STM/LDM是批量传输数据的指令,这里要说明的是[15:0]Register list代表了16个寄存器,传输数据的时候R15始终是最后传输的,按照从R0到R15的顺序,R15始终在高地址。 递增传输倒好理解,关键是递减传输,2440的datasheet令我费解,看看datasheet里的一张图 假设Rn = R0, R0 = 0x1000,STMDB R0!, { R1, R5, R7 }这样一条指令,先存储R1,执行之后R0的值是多少?图上并没有标注,并不能按照R0 -= 4, = R1, R0 -= 4, = R4, R0 -= 4, = R7这种方式来理解,如果按照R7,R5,R1的顺序来存储就好理解了,但
[单片机]
拥抱ARM妹子第二季 之 序:我和春天有个约会 - 生命的萌芽
iframe id="iframe_0.536531469784677" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://img16.poco.cn/mypoco/myphoto/20140506/23/5618964420140506233829078.jpg?_=3762696%22%20style=%22border:none;max-width:661px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElem
[单片机]
快速学Arm——存储器加速模块(MAM)2
我们再来看一下LPC2300 ARM的MAM工作模式.LPC2300系列ARM允许用户设置MAM的加速级别,使芯片应用于某些对功耗和可预见性有要求的场合.MAM定义了如下的三种工作模式: 从图中可以看出MAM功能会使系统耗费更多的能量,但预见性会提高. MAM部分使能: CPU顺序执行时所需要的代码由缓冲区提供,但是成像跳转后需要对Flash进行读操作.此外,若数据缓冲区中的数据可用,则从其中获取数据.但是,为了保证可预见性,同时也为了不增加功耗,MAM还是会虚拟一次对Flash的读操作.该模式下,CPU具有较好信号,较低的功耗,数据的可预见性也比较好.至于是如虚拟的,我目前还不清楚. MAM完全使能: CPU
[单片机]
基于ARM微处理器的隧道照明智能控制器
隧道是高速公路的重要组成部分,隧道照明系统是车辆能够 安全 地进入、通过和离开隧道区域必不可少的基本保证。目前长隧道的照明分为入口段、过渡段、基本段、出口段,每段的灯具按功能又分为应急灯、全日灯和加强灯三种。应急灯除在停电时用作应急照明外还兼作全日照明,全日灯24小时不间断工作,加强灯根据洞口不同的亮度来开启。隧道内不同区域的亮度要求各不相同,它们和洞外亮度、交通流量、洞内废气的多少、行车速度、灯具的养护周期等诸多因素有关,甚至与路面的材料和洞壁的装修材料有关。这些灯的控制目前基本上是靠开关照明回路来进行控制的。一般隧道都有七八个照明控制回路,建设投资大,施工难度高,隧道开通后管理者仅能在有限的回路里进行控制,很难兼顾到运营成
[单片机]
Android ARM 汇编学习(一)
给自己挖了个坑,一切都得从 Hello World 开始。 hello.S .data msg: .ascii Hello, World!\n len = . - msg .text .globl _start _start: /* syscall write(int fd, const void *buf, size_t count) */ mov %r0, $1 /* fd - stdout */ ldr %r1, =msg /* buf - msg */ ldr %r2, =len /* count - len(msg) */ mov %r7, $4 /* write is syscall #4 */ swi $0
[单片机]
Keil4 编译时出现RL-ARM is not allowed with this license
最近在用MDK编译一个别人的工程时,有如上提示: 原因是没有注册Real-Time OS; 解决方法: 打开MDK的注册机,按如上所设,再生成一个序列号,注册Real-Time OS; 注:CID从MDK的file- license Management中复制得来,点击Generate,生成序号,添加进去。 OK!问题解决
[单片机]
基于S3C4510B的存储系统原理与设计
1. 引言 对于嵌入式系统的开发人员来说,深刻地理解其存储系统的寻址原理和有效的管理存储系统对正确高效地设计嵌入式系统的硬件和底层软件编程具有重要的意义。目前嵌入式系统中最常用的存储器包括有EEPROM、FLASH、Normal DRAM和Sync.DRAM等。本文所采用的存储器包括有SDRAM和FLASH。S3C4510B(以下简称4510)微处理器是构建在ARM核ARM7TDMI之上的,ARM7TDMI的地址总线为32位的,4510的内部系统总线却是26bit:SA ,它的外部地址总线却是22bit:ADDR ,它们之间是如何译码的,而仅用14根外部地址总线为什么能够访问多达16MB的内存地址空间,本文就试图回答这
[应用]