汇编指令的学习4——ldm/stm指令、栈的处理

1、为什么需要多寄存器访问指令?

ldr/str每周期只能访问4字节内存,如果需要批量读取、写入内存时太慢,解决方案是stm/ldm

ldm  (load register mutiple)

stm(store register mutiple)


2、举例:stmia sp, {r0 - r12}(注意这里的-号不是减,而是范围)

(1)将r0存入sp指向的内存处(假设为0x30001000);然后地址+4(即指向0x30001004),将r1存入该地址;然后地址再+4(指向0x30001008),将r2存入该地址······直到r12内容放入(0x3001030),指令完成。即将r0~r12的内容存入以sp为起始地址的内容空间里。

(2)一个访存周期同时完成13个寄存器的读写。


3、8种后缀(相对于入栈来说,比较简单)

先(后)传输的,肯定是空栈(满栈),然后看地址是增还是减

  • ia(increase after)先传输,再地址+4
  • ib(increase before)先地址+4,再传输
  • da(decrease after)先传输,再地址-4
  • db(decrease before)先地址-4,再传输
  • fd(full decrease)满递减堆栈
  • ed(empty decrease)空递减堆栈
  • fa(·······) 满递增堆栈
  • ea(·······)空递增堆栈

4、四种栈

(1)空栈:栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出。(因为空所以可以直接存入再移动)

(2)满栈:栈指针指向栈中最后一格数据,每次存入时需要先移动栈指针一格再存入;取出时可以直接取出,然后再移动栈指针。(因为满所以应该移动后再存入)

(3)增栈:栈指针移动时向地址增加的方向移动的栈。(相对于入栈来说?)

(4)减栈:栈指针移动时向地址减小的方向移动的栈。(相对于入栈来说?)


5、!的作用

ldmia r0, {r2 - r3}

ldmia r0!, {r2 - r3}

感叹号的作用就是r0的值在ldm过程中发生的增加或者减少最后写回到r0去,也就是说ldm时会改变r0的值。

6、^的作用

ldmfd sp!, {r0 - r6, pc}

ldmfd sp!, {r0 - r6, pc}^

^的作用:在目标寄存器中有pc时,会同时将spsr写入到cpsr,一般用于从异常模式返回。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一课 GCC入门

1序言 gcc是一个可移植的编译器,支持多种硬件平台;也不仅仅是一个本地编译器也是一个跨平台编译器;支持多张语言编译时按照模块化设计支持多种语言。 gcc编译过程:预处理(预处理器);编译&#x…

[转载] 晓说——第9期:多如牛毛严酷无比的美国那些法

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2012/08/26/2657224.html

ARM的汇编伪指令【伪指令的解释】

本文作为此博文的伪指令章节的补充说明。 伪指令的含义 伪指令本质上不是指令。伪指令由编译器环境提供,用来指导编译过程,经过编译后伪指令不会生成机器码。 伪指令是和具体的编译器相关的。我们使用GNU工具链,因此学习GNU环境下的汇编伪指令…

关注 Imagine Cup 2010, 参与软件设计“最具人气奖”投票

关注 Imagine Cup 2010, 参与软件设计“最具人气奖”投票 Imagine Cup 2010全球总决赛将于7月3日到7月8日在波兰华沙举行。现在通过参与软件设计“最具人气”奖投票,你也可以参与到Imagine Cup 2010中。了解全球学生是如何用科技创新帮助我们解决人类面临的最困难问…

浏览器模拟用户登陆

javascript:document.getElementById(user).valuejack;document.getElementById(password).valuetest;submitForm();void(0);转载于:https://www.cnblogs.com/ahghy/p/3488839.html

Bzoj 2127 happiness 最小割

happiness 题解: 将图转换成最小割. 将割完的图中与S相连的点看做选文科, 与T相连的点看做选理科. flow(s, u) 文科值 flow(u,t) 理科值 假设u 和 v 一起选文科有奖励值z, flow(s,u) z/2 flow(s,v) z/2, flow(u,v) z/2 假设u 和 v 一起选理科有奖励值z, flow(u,t) z/2…

C中静态存储区和动态存储区

c语言中需要内存来存放数据。而内存主要分为两类:静态存储区和动态存储区。 1、静态存储区 (1)分为数据区(只读数据区(代码区?在linux中又叫文本段.text)、读写数据区.data)、未初始…

POJ 1149 最大流建图 PIGS

题意: 给出猪圈个数 m 和买家人数 n 然后给出m个猪圈的猪的头数.. 接下来 n 行.. 给出mm a1 a2 .. a(mm) k 例如 2 1 5 3 表示第i1个用户 有mm(2) 个猪圈的钥匙 就是有第 a1(1) 个和第 a2(5) 个猪圈的钥匙..还想要买得k头猪.. 问最多能够卖出多少头.. 思路&#xff…

【编译打包】tengine 1.5.2

tengine 官方没有提供rpm包,应网友要求,本文继续提供SRPM 包去掉了不相关的模块,支持平台为 rhel6 系列,适用于Web,LB,cache等场合。编译参数如下./configure \--prefix%{_sysconfdir}/nginx \--sbin-path%…

ARM通识——ARM的7种基本工作模式、37个通用寄存器

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、ARM采用32位架构 ARM约定一个Byte是8 bits,一个Halfword是16 bits (2 byte),一个Word是32 bits (4 byte)。 大部分ARM core 提供ARM 指令集(32 bit&#xff0…

软件测试工程师核心竞争力(转)

说明:总结整理来源于网络,并非独立原创 1、传统测试工程师应具备的核心竞争力1.1 测试策略设计能力测试策略设计能力是指:对于各种不同的被测软件,能够快速准确地理解需求,并在有限的时间和资源下,明确测试…

以NFS方式挂载rootfs的设置方法

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 更多详细内容,见Linux中NFS服务器的配置(/etc/export)_天糊土的博客-CSDN博客 网络文件系统(NFS,network file system),是一种网络通讯协…

cocos2dx xcode5 创建项目

我的开发环境MacBook Pro OS X 10.9.1,Xcode5。 下载cocos2dx并解压,我使用的版本是2.2.1,3.0beta版本还没出来。 终端cd到cocos2d-x-2.2.1/tools/project-creator,我的全路径是/Users/HanHongmin/Documents/cocos2d-x-2.2.1/too…

poj 3660(floyd 变形)

题意: 有N头牛,每头牛都会有比他强的或者弱的牛,按照牛的强弱排序,问有几头牛的位置是确定的。 5 5(n,m) 4 3 4 2 3 2 1 2 2 5则4>3>2>5 && 1>2>5故只有2,5是确定的。 1 #include &…

分析根文件系统中的/linuxrc文件(附带busybox的介绍)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 init进程的详解_天糊土的博客-CSDN博客_init进程 busybox详解_linuxarmsummary的博客-CSDN博客 前言 因为uboot给内核传参的bootargs中有“init/linuxrc”这个项目,而由前面的…

Wisconsin Squares [USACO]

这个也不记得了&#xff0c;反正不难 /* ID: zhangyc1 LANG: C TASK: wissqu */ #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> using namespace std;char arrMatrix[4][5]; bool arrNewCow[4][…

CentOS Linux搭建SVN Server配置详解

PS&#xff1a;今天给开发的同事搭建一个公网的SVN Server&#xff0c;google一下&#xff0c;发现下面这篇最详细&#xff0c;就记录下来&#xff0c;重新排版一下。顺便根据自己的使用经验&#xff0c;补充了几个细节和总结。本文配置是基于CentOS 5.x的&#xff0c;但一样适…

bic,orr——设置某些位为0或者1

转载于http://blog.chinaunix.net/uid-28458801-id-4083986.html 一、bic &#xff08;1&#xff09;格式&#xff1a;BIC {条件} {S} 目的寄存器&#xff0c;操作数1&#xff0c;操作数2&#xff1b; &#xff08;2&#xff09;BIC指令用于清除操作数1的某些位&#xff0…

405 Method Not Allowed

当jquery easyui的datagrid插件使用.json文件为数据源&#xff0c;通过非http协议访问【就是直接拖进浏览器查看效果】&#xff0c;能正常加载.json文件并且生成datagrid数据源。但是通过http协议访问示例代码时&#xff0c;无法加载json文件生成datagrid的数据源。 这个是由于…

Eclipse之ANT使用

Ant是Java平台下非常棒的批处理命令执行程序&#xff0c;能非常方便地自动完成编译&#xff0c;测试&#xff0c;打包&#xff0c;部署等等一系列任务&#xff0c;大大提高开发效率。如果你现在还没有开始使用Ant&#xff0c;那就要赶快开始学习使用&#xff0c;使自己的开发水…