ARM架构简析

在这里插入图片描述
在这里插入图片描述
全局与局量等知识

断电后,程序以及数据都在FLASH中。
断电后,内存中就没有变量了。
程序在烧在FLASH中的;
在这里插入图片描述
程序运行的时候,全局变量的初始值,必然是从FLAASH中的来的:

初始化全局变量的过程:
在这里插入图片描述
在这里插入图片描述
= :代表伪指令 (去FLASH中去某个位置 读指令: 数据写到RO中去 完成初始化)
以上的方式是效率低的。那么如果全局变量很多咋办?
(BIN文件是写在 FLASH上的):
在这里插入图片描述
那如果有很多的变量怎么办?
这样程序运行的时候,就会见数据段整段的拷贝到内存。
那如果没有初始值的全局变量呢?
在这里插入图片描述
这那么多的全局变量也保存在FLASH中吗?
解答:不是的。
类似于memset,这些变量在内存中都放在ZI段,运行的时候,相当于把ZI段全部清清零。
全局变量初始化完成之后,我们才去执行main函数。

那么局部变量呢?----- 栈
在这里插入图片描述
过程:
1.记录返回地址 ;记录下一个D的地址。
2.执行C:

LR返回地址会被覆盖!
所以在A开始,就要将LR保存起来,保存在栈中,栈在哪里? 栈就是一块内存。
在这里插入图片描述
所以不仅仅是LR寄存器会被覆盖。

程序运行的时候:
第一步,将数据段拷贝到内存中。
第二步:让SP指向一块空闲的内存;
第三部:调用MAIN函数。
在这里插入图片描述
汇编中:对应的局部变量的写入栈的过程:
在这里插入图片描述

相关推荐

  1. 数据库索引

    2023-12-18 10:58:04       55 阅读
  2. Spring Boot

    2023-12-18 10:58:04       40 阅读
  3. :分账系统

    2023-12-18 10:58:04       28 阅读
  4. ARM 内核架构分类?

    2023-12-18 10:58:04       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-18 10:58:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-18 10:58:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-18 10:58:04       82 阅读
  4. Python语言-面向对象

    2023-12-18 10:58:04       91 阅读

热门阅读

  1. 技术面试斗智斗勇II

    2023-12-18 10:58:04       62 阅读
  2. Joysticks

    2023-12-18 10:58:04       70 阅读
  3. VIM ——Vimtutor 个人总结【从入门到精通】

    2023-12-18 10:58:04       66 阅读
  4. TCP或许不是“可靠”的

    2023-12-18 10:58:04       73 阅读
  5. 【力扣100】2.两数相加

    2023-12-18 10:58:04       73 阅读
  6. 流行的 React 相关库和框架

    2023-12-18 10:58:04       48 阅读
  7. Function

    2023-12-18 10:58:04       70 阅读
  8. C语言:高精度减法

    2023-12-18 10:58:04       74 阅读