历史上的今天
返回首页

历史上的今天

今天是:2025年02月12日(星期三)

正在发生

2020年02月12日 | ARM汇编--寻址方式

2020-02-12 来源:eefocus

ARM7TDMI(-S)具有32位ARM指令集和16位Thumb指令集。

RM指令集效率高,但是代码密度高

Thumb指令集具有较高的代码密度,却仍然保持着ARM的大多数性能上的优势,它是ARM的子集。


所有的ARM置零都是可以条件执行的,而Thumb置零仅有一条指令具备条件执行的功能。


ARM和Thumb程序可以相互调用,相互之间状态切换开销几乎为零。

 

首先我们来看一下分类:


一、数据处理指令操作数寻址方式

1、立即数寻址方式

2、寄存器寻址方式

3、寄存器移位寻址方式


二、存储器访问指令操作数寻址方式

1、寄存器间接寻址

2、基址变址寻址

3、相对寻址

4、多寄存器寻址(块拷贝寻址)

5、堆栈寻址


下面来一一介绍:

ARM有9种寻址方式

寻址方式:


1、立即寻址:

立即寻址指令中的操作码字段后面的部分就是操作数本省,也就是说,数据就包含再指令,取指令也就取出了可以立即使用的操作数。举例:

SUBS   R0,R0,#1              ;R0减1,结果放入R0中,并且影响标志位

MOV    R0,#0xFF000          ;将立即数0xFF000装入R0寄存器


ARM规定:这个立即数必须符合8位图格式,负责必须使用“文字池”方式,通过存储器访问指令加载,所谓的8位图格式就是指,这个数据能通过一个8bit的数循环右移偶数位得到。


2、寄存器寻址:        

操作数的值在寄存器中,指令中的地址字段指出的是寄存器的编号,指令执行的时候直出寄存器值来操作。举例:

MOV   R1,R2                ;将R2的值存入R1

MOV   R0,R1,R2              ;将R1的值减去R2的值,结构存到R0


3、寄存器移位寻址

寄存器移位寻址是ARM处理器特有的寻址方式。当第二个操作数是寄存器移位方式时,第二个操作数在与第一个操作数结合之前,选择进行移位操作。举例:

MOV    R0,R2,LSL #3      ;R2的值左移3位,结果放入R0,即R0=R2*8

ANDS  R1,R1,R2,LSL R3    ;R2的值左移R3位,然后和R1相"与"操作,结构放入R1


可采用移位操作的指令如下:


LSL左移、LSR右移、ASR算术右移、ROR循环右移、RRX带扩展的循环右移


4、寄存器间接寻址:

寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存再寄存器指定地址的存储单元中,即寄存器为操作数的地址指针,举例:

LDR   R1,[R2]          ;将R2指向的单元中的数据保存再R1中

SWP   R1,R1,[R2]       ;将寄存器R1的值和R2指向的单元中进行内容交换


5、基址变址寻址:

基址寻址就是将基址寄存器的内容与指令中给出的偏移量进行相加,形成操作数的有效地址。

基址寻址用于访问基址附近的存储单元,常用于查表、数组操作以及功能不见寄存器访问等   

举例:

LDR   R2,[R3,#0x0c]     ; 读取R3 0x0c地址指向的存储单元的内容,放入R2

STR   R1,[R0,#-4]!       ;先R0=R0-4,然后把R1的值寄存到R0所指向的单元中

LDR   R1,[R0,R3,LSL #1]  ;将R0 R3*2地址上的单元的内容读出,并存入R1中


6、相对寻址:

相对寻址是基址寻址的一种变通。由程序计数器PC提供基址地址,指令中的地址码字段为偏移量。两者相加后得到的地址即为操作数的有效地址。


7、多寄存器寻址:

多寄存器寻址即一次可传送几个寄存器的值,允许一条指令传送16个寄存器的任何子集或所有的存储器,举例:

LDMIA   R1!,{R2-R7,R12};将R1指向的单元中的数据读出到R2---R7、R12中(R1自自动 )

STMIA   R0!,{R2-R7,R12};将R2---R7、R12中的数据一次读入到R0指向的单元中(R0自动 )


8、堆栈寻址(块拷贝寻址):

堆栈是一种按特定顺序进行存取的存储区,操作顺序分为“先进后出”和“后进先出”,堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向的存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。


存储器堆栈可以分为两种:

向上生长:递增堆栈

向下生长:递减堆栈


还有从当前堆栈指针指向的内容是否有效可以分为:满递增、空递增、满递减、空递减

举例:

STMFD    SP!,{R1-R7,LR}    ;将R1---R7、LR入栈。满递减堆栈

LDMFD    SP!,{R1-R7,LR}    ;数据出栈,放入R1---R7、LR寄存器,满递减堆栈


问题:堆栈是先进后出   先把r1---r7放入堆栈中,再按照上述形式出栈,数据能还原么?还原了数据不是翻转了么

推荐阅读

史海拾趣

正泰公司的发展小趣事

正泰公司始建于1984年,初期以低压电器业务为主。随着公司业务的不断拓展,正泰逐渐将业务范围扩展至智慧能源系统领域。在这一过程中,公司深入践行“产业化、科技化、国际化、数字化、平台化”战略举措,形成了“绿色能源、智能电气、智慧低碳”三大板块。正泰的低压电器产品长期保持国内领先地位,品牌认知度和客户粘性极强,为公司后续的发展奠定了坚实的基础。

Dae Ryung Electronic Co Ltd公司的发展小趣事

在快速发展的过程中,Dae Ryung Electronic Co Ltd公司始终注重产品质量和品牌建设。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测等各个环节都进行严格把关。同时,公司还注重品牌形象的塑造和宣传,通过广告宣传、公关活动等方式提升品牌知名度和美誉度。这些努力使得公司的产品在市场上获得了良好的口碑和认可。

EnerSys公司的发展小趣事

EnerSys公司及其前身在工业电池制造领域拥有超过100年的历史。自20世纪初起,公司就开始专注于为各种工业应用提供可靠的电池解决方案。随着时间的推移,EnerSys不断吸收新技术和制造工艺,逐渐发展成为工业电池市场的领导者。这一长期的历史积淀,为EnerSys在电子行业中的发展奠定了坚实的基础。

科达嘉CODACA公司的发展小趣事

科达嘉电子高度重视质量管理,先后通过了ISO9001质量管理体系、ISO14001环境管理体系认证。公司不仅建立了完善的质量检测流程,还成立了专门的检测中心,对产品进行严格的质量把控。这些措施确保了科达嘉电子产品的稳定性和可靠性,进一步提升了公司在市场上的竞争力。

Custom Electronics Inc公司的发展小趣事

在市场竞争日益激烈的背景下,CEI意识到品牌建设的重要性。公司加大了对品牌形象的宣传力度,通过广告、展览、研讨会等多种方式,提高了品牌知名度和美誉度。同时,CEI还注重产品质量的提升和售后服务的完善,赢得了广大客户的信赖和支持。

Heyco公司的发展小趣事

Heyco公司成立于1906年(部分资料提及为1926年或1937年,这里以多个资料综合为准),最初在德国柏林成立。起初,公司专注于制造手工工具,随着汽车工业的兴起,Heyco迅速转型为汽车装配线所需工具的生产商。在二战后,Heyco抓住了汽车工业快速发展的机遇,进一步扩大了生产规模,不仅为德国本土汽车制造商如宝马、奥迪、大众和梅赛德斯奔驰提供定制工具,还逐渐拓展到国际市场。这一时期,Heyco凭借其高质量的产品和卓越的服务赢得了市场的广泛认可。

问答坊 | AI 解惑

H-JTAG V0.7.0 BETA 支持CORTEX-M3

发布H-JTAG V0.7.0 BETA (Build 20080720) 1. 添加了对CORTEX-M3的支持; 2. 支持CORTEX-M3芯片的片内FLASH烧写; 3. 添加了对XSCALE系列PXA210/250/255的支持; 4. 更正了H-CONVERTER中地址处理的一个BUG; 5. 把VECTOR CATCH的管理和设置移 ...…

查看全部问答>

好消息-免费在线电源仿真设计软件请大家试用!

请大家点击下面链接进入免费设计: 在线设计电源仿真软件 [ 本帖最后由 analog010 于 2009-12-7 14:50 编辑 ]…

查看全部问答>

EMI/EMC--原理与应对详解(二)

根据基尔克夫定理:流过任何导体电流的代数和都等于零,即: 根据(5)式结果,地球不但有电流流入,而且也应该有电流流出,那么流出地球的电流到哪里去了呢? 前面已经指出,地球平均每一秒钟有100多次闪电,而闪电也是一个放电过程,由此可知 ...…

查看全部问答>

请问现在读博士以后前景怎么样啊?(方向:嵌入式,具体ASIC,多核结构).

研究生没涉及过嵌入式,有点计算机,通信和信号处理的基础. 请问现在读嵌入式的博士,前景怎么样啊? 都说这个方向不好出博,请问这个领域有没有什么有应用前景又有研究价值的方向啊?智能天线算不算这一领域啊? 请各位给点看法. …

查看全部问答>

推荐一个不错的51单片机学习视频教程(高清晰版本)

推荐一个不错的51单片机学习视频教程(高清晰版本) 飞龙教程------51单片机 需要更多单片信息请与我联系 飞龙QQ:9086074 希望认识更多的单片机开发朋友一起交流   第一次做教程不好多多见谅 博客BLOG   :   &nb ...…

查看全部问答>

放大类相对于电源类,哪个难度更大?

本帖最后由 paulhyde 于 2014-9-15 09:06 编辑 我们组正在准备国赛,大家在选题时出了点分歧,不知道是选电源类还是放大类.各位高手指点指点,说说是电源类好做还是放大类好做  …

查看全部问答>

低价出售原装评估板

低价出售TI的DM648评估板,使用过2个月,有兴趣的及时联系我们021-65879969肖…

查看全部问答>

各位大虾,有没有人做过lm3S的usb+epi同时工作的情况?

我现在epi扩展了32M的SDRAM,准备用USB做Host去读取u盘的数据存储在SDRAM里面,但是刚刚看见了Ti的errdata,说usb和epi同时工作会有一定的问题。不知道这个问题是否严重?我的设计能否实现? 或者数据再需要经过芯片内部的SRAM再中转一次? 谢谢 ...…

查看全部问答>

UARTprintf()函数

UARTprintf()函数为何串口毫无反应啊 UARTCharPut 倒是可以在助手上显示…

查看全部问答>

MSP-EXP430F5529实验板液晶显示汉字

捣鼓了好久,终于可以显示汉字了,呵呵 看看效果吧 字体是12x12了,能写这么多字把屏幕写满了,呵呵 反白显示,效果不是很好,没写的地方,那儿就一条白杠 上传两个文件,关于写汉字的函数和汉字表: 1. 2. 我用的取模软件: …

查看全部问答>