您的位置 首页 模拟

ARM仓库方法

初学ARM指令时,如果从字面上理解满堆栈和空堆栈很有可能会歪曲它们的意思。可以想象一下,满堆栈就是一个满的堆栈,不能再存储数据了;而…

初学ARM指令时,假如从字面上了解满仓库和空仓库很有可能会曲解它们的意思。能够幻想一下,“满仓库”便是一个满的仓库,不能再存储数据了;而“空仓库”便是一个空的仓库,没有被运用的仓库,呵呵,这样了解的话那就错了。

实践上“满仓库”和“空仓库”确切的说应该是“满栈”或许是“空栈”,咱们仅仅习惯了把栈叫做仓库。而二者深层的意思是说的“方位”或许“地址”,而不是“仓库”。假如叫“满方位”或许“空方位”更简单了解一些。下面是《ARM嵌入式体系开发 –软件设计与优化》书中给的解说:

满仓库(full stack,“F”)是指仓库指针指向仓库的最终一个已运用的地址或许满方位(也便是sp指向仓库最终一个数据项方位)。

空仓库(empty stack,”E”)是指sp指向仓库的第一个没有运用的地址或许空方位(也便是说sp指向仓库最终一个数据项的下一个方位)。

满仓库的关键词是最终一个已运用的地址,空仓库是第一个没有运用的地址。

存储器仓库能够分为两种:

一种是向上成长,便是向着高地址方向成长,称为递加仓库。
一种是向下成长,便是向着低地址方向成长,称为递减仓库。

这样,就有四种组合:满递加(FA)、空递加(EA)、满递减(FD)、空递减(ED)。

入栈规则:
(1)满仓库操作先调整SP,然后存入数据。
(2)空仓库操作先存入数据,然后调整SP。
(3)递加仓库调整SP时,履行SP=SP+4
(4)递减仓库调整SP时,履行SP=SP-4

出栈规则正好与入栈相反,也便是入栈的逆操作。
(1)空仓库操作先调整SP,然后存入数据。
(2)满仓库操作先存入数据,然后调整SP。
(3)递减仓库调整SP时,履行SP=SP+4
(4)递加仓库调整SP时,履行SP=SP-4

清晰了这四个规则,就很简单剖析各种仓库寻址方法对应的仓库散布状况了。
stmfd sp!, {r4-r11}

假定初始SP为0x0400,那么履行结束后内存0x03E0-0x03FF保存寄存器R4-R11的内容。
stmed sp!, {r4-r11}

假定初始SP为0x0400,那么履行结束后内存0x03E4-0x0403保存寄存器R4-R11的内容。
实践运用中,只选用一种方法运用就能够了。最常用最典型的便是后缀为“FD”时的结构,这是人们了解的仓库结构。
stmfd sp!, {r4-r11, lr}
ldmfd sp!, {r4-r11, lr}

例1:

PRE

r1 = 0X00000002

r4 = 0x00000003

sp = 0x00080014

STMFD sp!, {r1, r4}

POST

r1 = 0X00000002

r4 = 0x00000003

sp = 0x0008000c

例2

PRE

r1 = 0X00000002

r4 = 0x00000003

sp = 0x00080010

STMFD sp!, {r1, r4}

POST

r1 = 0X00000002

r4 = 0x00000003

sp = 0x00080008

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/274524.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部