凌阳教育的个人空间 https://blog.eetop.cn/204849 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

ARM寻址方式——块拷贝寻址

已有 1942 次阅读| 2015-12-25 17:58 |个人分类:linux技术

块拷贝寻址是多寄存器传送指令LDM/STM的寻址方式。LDM/STM指令可把存储器中的一个数据块加载到多个寄存器中,也可把多个寄存器中的内容保存到存储器中个。寻址操作中的存储器可以是R0~R1516个寄存器的子集或所有寄存器。

LDM/STM指令根据其后缀名的不同,其寻址的方式也有很大不同。这些后缀可定义存储器地址的增长是向上还是向下,以及地址的增减与指令操作的先后顺序。具体的寻址方式见表:从表中可以看出,指令分为两组:一组用于数据的存储和读取,对应于IAIBDADB;一组用于堆栈操作,即进行压栈与出栈操作,对应于FDEDFAEA。两组中对应的指令的含义是相同的,例如指令STMIB与指令STMFA含义相同,只是STMFA针对堆栈进行操作。对堆栈进行操作时,必须先对堆栈进行初始化。

表中对应符号的含义如下:

IA                 操作完成后地址递增

IB                  地址先增而后完成操作

DA                操作完成后地址递减

DB                地址先减而后完成操作

FD                 满递减堆栈

ED                空递减堆栈

FA                 满递增堆栈

EA                空递增堆栈

下面以图的形式举例说明LDM/STM指令时如何让寻址的。图给出了块拷贝的用法。从图中可以看出,每条指令时如何将3个寄存器的数据存入存储器的,以及在使用自动变址的情况下基址寄存器是如何改变的。执行指令之前基址寄存器为R9,自动变址之后为R9ˊ。需要注意的是,在递增方式下,寄存器存储的顺序是R0R1R5;而在递减方式下,寄存器存储的顺序是R5R1R0。在这里有一个约定:编号低的寄存器在存储数据或者加载数据时对应于存储器的低地址。也就是说,编号最低的寄存器保存到存储器的最低地址或从最低地址取数,其次是其他寄存器按照寄存器编号的次序保存到第一个地址后后面的相邻地址或从中取数。

下面用2条指令来说明这类指令的用途,它们把8个字从R0指向的位置拷贝到R1指向的位置。

LDMIA          R0!{R2-R9}          ;将数据家加载到R2~R9

STMIA          R1{R2-R8          ;将数据存入到存储器}

指令执行后,R0的内容增加了32字节,这是由于“!”使之自动变址8个字,而R1没有改变;可见,由于“!”的存在地质寄存器自动变址,基址寄存器的内容保持更新,但是如果没有“!”,当指令执行完成后,基址寄存器的值还是初始值。如果R2~R9含有有用的数据,则可把它们压入堆栈,从而在操作过程中把他们保存起来。

STMFD          R13!,{R2-R9}              ;将寄存器内容存入堆栈,下面要用到寄存器

LDMIA          R0!,{R2-R9}         ;加载数据到R2~R9,寄存器中原有的数据

                                                 ;遭到破坏

STMIA          R1!,{R2-R9}         ;保存数据到R1指向的地址

LDMFD         R13!,{R2-R9}              ;从堆栈中恢复

这里第一行和最后一行指令的后缀FD表示前面所述的满递减堆栈地址模式。注意,在堆栈操作中总是要指定自动变址,否则以前保存的内容会因为堆栈寄存器的基址不变将在下一次堆栈操作时遭到破坏。

多寄存器的存取指令为保存和恢复处理器状态以及在存储器中移动数据块提供了一种很有效的方式。它节省代码空间,使操作的速度比顺序执行等效的单寄存器存取指令快达4倍。(因改善后续行为而提高2倍,因减少指令数提高将近2倍)。

相对寻址

相对寻址可认为是基地址为程序计数器PC的变址寻址,偏移量指出了目的地址与现行指令之间的相对位置,偏移量与PC提供的基地址相加后得到有效的目的地址。

例如:

              BL          SUBR            ;转移到SUBR

                                                 ;返回到此

SUBR                                        ;子程序入口地址

              MOV      PC,R14          ;返回

凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 1

    获赞
  • 3

    评论
  • 3815

    访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-20 06:46 , Processed in 0.034571 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部