IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM汇编(栈) -> 正文阅读

[嵌入式]ARM汇编(栈)

一、
栈是一段CPU自动分配的空间
SP寄存器(栈寄存器)指向内存中当前栈的位置
栈的特性(先进后出)
在这里插入图片描述
1、空增栈EA(empty ascending)表示该栈指向的空间是一个空的空间可以往里面放数据然后再往高地址自增一位
2空减栈ED(full decending) 表示该栈指向的空间是一个空的空间可以往里面放数据,然后指针往低地址反向自减一位
3、满增栈FA(full ascending)表示该栈指向的空间是一个已经放了东西的空间,需要先向高地址自增一位再来存放数据
4、满减栈FD(full decending)表示该栈指向的空间是一个已经放了东西的空间,需要先向低地址自减一位再来存放数据

@@@@ARM 用的为满减栈所以是自减才往低地址放数据
@@读写都加后缀FD ,@你加其他的处理器也会帮你改成FD,因为它只支持FD
@在内存读写中STM /LDM有四种寻址方式
@ARM在压栈和出栈的时候风别对应STMDB(decrease before)/LDMIA(increase after),我们在写的时候统一写成STMFD/LDMFD就对应的相应的压栈的弹栈。
二、SP(栈指针的应用)
1、叶子函数的调用过程(所调用的函数为叶子函数即这个函数里面不调用其他函数)
MOV SP, #0X40000020
MAIN:
MOV R1, #7
MOV R2, #8
BL FUNC
ADD R3, R1, R2
B STOP
FUNC:
@@压栈保护现场
@STMFD SP! ,{R1,R2}
MOV R1, #10
MOV R2, #20
MUL R3, R1, R2
@@出栈保护现场
@LDMFD SP!, {R1,R2}
MOV PC, LR
@@这个程序的运行结果很明显乘法子函数的结果正确而寄存器R1/R2的值被覆盖所以ADD的结果错误
@@那我们要俩个结果都正确就要用到栈指针SP把数据R1,R2的值压栈,算完乘法之后出栈给R1/R2
@这个栈的应用为保护之前的数据
2、
对于非叶子函数(即这个函数不是叶子函数,主函数调用的函数里面也调用了其他函数)
@@我们知道LR存的是BL跳转之前的下一条语句的地址
@@但是我跳了俩次LR的值肯定也是会被覆盖
MOV SP, #0X40000020
MAIN:
MOV R1, #7
MOV R2, #8
BL FUNC1
ADD R3, R1, R2
B STOP
FUNC1:
@@压栈保护现场
STMFD SP! ,{R1,R2}
MOV R1, #10
MOV R2, #20
BL FUNC2
MUL R3, R1, R2
@@出栈保护现场
LDMFD SP!, {R1,R2}
MOV PC, LR
FUNC2:
@@压栈保护现场
STMFD SP! ,{R1,R2,LR}
MOV R1, #10
MOV R2, #20
SUB R3, R1, R2
@@出栈保护现场
LDMFD SP!, {R1,R2,LR}
MOV PC, LR
@@所以我们把LR的值一起压到栈里面
@@这样我们所有函数的值都是正确的结果

STOP:
B STOP

.end @汇编程序结束

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:23:46  更:2021-08-09 10:25:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:35:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计