stm32中有3条总线:地址总线,数据总线,系统总线;地址总线上是地址值,数据总线上是数据值,cpu读写时会先在地址总线上传输地址值,如果是写操作之后数据总线上会放往前面地址处写入的数据值,如果是读操作之后数据总线上会放前面地址处的数据值;地址总线既可以访问RAM也可以访问ROM,而当前访问RAM和ROM的地址会被寄存器SP和PC记录下来,即SP和PC就是用来记录当前RAM和ROM的访问地址/位置。

SP MSP PSP的理解:参考 1:https://blog.csdn.net/u012351051/article/details/125107815    2: https://mp.weixin.qq.com/s?__biz=MjM5MzUxMTAwMg==&mid=2649785048&idx=2&sn=8f3c5ac9cd4d4586d1543cb96502634d&chksm=be91c1ed89e648fb6c082a77f18b6bcffafc730c0041f1de3d50f3b53b0d7a37a170a55f17f9&scene=27

在CPU中,堆栈寄存器SP一共有3个,分别为SP、MSP、PSP。SP是对外使用的寄存器,或者认为SP始终指向当前模式下使用的MSP/PSP,只不过在OS内核或Handler模式下,SP先指向MSP,或者说SP拷贝了MSP的值,可以直接访问主堆栈。而在线程模式下,SP拷贝了PSP的值,可以直接访问线程(任务)堆栈。即SP是MSP和PSP的代言人,即SP是MSP和PSP的逻辑地址,对于裸机程序,我们只需要知道SP即可,而对于OS系统,尤其涉及中断、任务上下文切换时,就需要知道PSP和MSP了,OS底层也会直接针对PSP进行编程。

在发生中断时,CPU硬件需要自动保存现场,此时SP指向MSP还是PSP,取决于发生中断前正在使用的堆栈,即如果发生中断前,正在运行线程模式,而且是task任务运行,则使用PSP,而如果进入中断前,使用的MSP,这里就继续使用MSP。一旦开始执行中断服务程序,即handler模式,则一定使用MSP,也就是,如果是有OS的情况下,正在运行task的时候,发生了中断,CPU先使用PSP自动保存现场,跳入到中断服务程序后,就从PSP切换到MSP,所有中断服务程序用到的临时变量都存放到MSP里。

只有中断服务函数ISR工作在处理模式/handler下,其余所有的代码包括os的内核、驱动、应用等都工作在线程模式/thread下;而线程模式又分为特权状态(也叫内核态)和非特权状态(也叫用户态),之所以分成两个态就是为了os设计的;os的内核代码运行在线程模式的特权态下,用户app代码运行在线程模式下的非特权态。

FreeRTOS 中栈指针的类型为uint32*,而没用uint32,虽然地址是个uint32的数,也可以通过 *(uint32 *)addr来获取地址处的值,但FreeRTOS的栈是使用uint32数组的形式实现,因此遍历数组内的元素值(其实就是cpu中寄存器中的数值,这个数值既可以是地址值也可是数据值)就需要一个数组类型的指针即uint32*,这个uint32*的数据指向(等于)数据内各元素的地址值。

32位ARM和Thumb指令:32位Thumb指令具有.w后缀。

MOV 指令码

  语法: MOV   A    B

  解释: GUN ARM    汇编语法是把右值传入左值  A <---- B
      Inter x86  汇编语法是把左值传入右值  A ----> B

C语言中对所有标号/变量的操作,都是对其值的操作,而不是操作其地址值,即使是指针变量也是如此;对指针变量的操作也是指针变量的值,即它指向的变量的地址值,而不是指针变量本身的地址值。

asm语言中对所有标号/变量的操作,都是对其地址的操作,而不是操作其值,即使是普通变量也是如此;

LDR R0 [a]; 从a变量地址值处取出值传入R0中,等同于把a的值传入R0中,这里的a指变量a的地址值;

LDR 指令码 中 =后跟标号,取得是标号的地址,而不是标号的值,如果是一个具体的数值,那这个值是个地址值。

asm 理解的更多相关文章

  1. 理解ASM的Extent

    理解ASM的Extent 分类: Oracle 2017-04-14 10:19:44   ASM中分配空间的单位是AU,Extent包含1个或多个AU.在11g之前,1个Extent对应1个AU.而 ...

  2. 对ASM存储管理的一些初步理解记录

    ASM:Automatic Storage Management,是ORACEL10G以后为了简化存储管理的复杂性,也是为了摆脱对其他厂商的依赖而推出的.ASM作为目前ORACLE推荐的首选存储方案, ...

  3. 保护模式下pmtest1.asm的理解

    整个代码对应内存线性地址分为四段,[gdt] [code32] [video32] [code16] 代码先在实模式[code16]下运行,code16中的cs就是系统分配的该程序物理地址的基址. 编 ...

  4. 201709015工作日记--上下文的理解,ASM

    1.Android上下文理解 Android上下文对象,在Context中封装一个所谓的“语境”,Activity.Service.Application都继承自Context,所以在这三者创建时都会 ...

  5. ASM X86&&X64 Registers 对寄存器ESP和EBP的一些理解

    ESP EIP EBP : frame pointer(base address of stack) Calling Convention: 调用约定 为什么fun调用之后 esp -ebp = 20 ...

  6. linux内核分析作业8:理解进程调度时机跟踪分析进程调度与进程切换的过程

    1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方 ...

  7. 浅谈ASM中的SLB

    接触Azure几个月,总想写点什么,迟迟没有动笔,一是怕自己技术粗鄙,写的东西会令人捧腹,二是工作原因,时间比较匆忙,在此再次声明,以下写的东西都是我个人看法,若有不足,请多多包涵!!! 情景是这样的 ...

  8. AOP理解

    1.问题 问题:想要添加日志记录.性能监控.安全监测 2.最初解决方案 2.1.最初解决方案 缺点:太多重复代码,且紧耦合 2.2.抽象类进行共性设计,子类进行个性设计,此处不讲解,缺点一荣俱荣,一损 ...

  9. 【spring】 <tx:annotation-driven /> 的理解 【转载的】

    在使用SpringMvc的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用.<tx: ...

  10. ASM文件系统

    1.确认数据库版本 2.个人理解的存储解决方案的发展趋势 2.1图示说明 2.2图示描述 如上图我们描述了在不同时期的IT行业(数据库)出现的存储文件系统,下面我们将分别说明: ü  裸设备:所谓裸设 ...

随机推荐

  1. 【笔记】archlinux缺少部分常用工具

    安装archlinux之后发现缺少很多常用工具 比如ifconfig ftp等 ifconfig需要安装net-tools nslookup需要dnsutils ftp需要inetutils 另外安装 ...

  2. DELL服务器升级BIOS,做RAID磁盘阵列

    dell服务器BIOS升级.LSI集成整列卡驱动安装 1.下载启动盘rufus,安装linux系统到U盘 1.准备两个U盘,插入启动U盘进入系统,进入centos7选择页面,插入另一个U盘用于安装li ...

  3. SQL执行定时任务JOB,包教包会

    什么是JOB? 数据库中可以定时执行任务的功能组件,那就是JOB. JOB的作用 它可以按我们设置好的参数定时执行查询语句或存储过程,特别适合一些每天,每周,每月,每年这种需要循环执行任务的场景,当然 ...

  4. 建筑CAD软件如何设置当前默认层高?

    在绘制CAD建筑图的过程中,必然少不了要对层高进行设置,如果每层的层高都一样,想要调整建筑CAD软件默认当前层高的话该如何设置?本节建筑CAD教程就和小编一起来了解一下浩辰CAD建筑软件中调整默认当前 ...

  5. python测试IP地址是否ping通

    import timeimport osdef pingComputer(): for i in range(1, 256): host = '192.168.2.' + str(i) status1 ...

  6. 查看Sql数据库连接数

    select count(1) as nums, sd.name from  [Master].[dbo].[SYSPROCESSES] spinner join [Master].[dbo].[SY ...

  7. java基于springboot的新生报到小程序带论文

    简介 本项目主要是新生报道系统,包含的新生入学流程的功能:新生可以在app里提交预报到日期确认报到,查看自己的学费缴费记录,更改自己的银行卡号,查看课表,查看寝室,查看自己的专业班级等个人信息,查看饭 ...

  8. Web前端单词大全

    style 修饰width 宽度height 高度title 想说明的text-align 水平对齐方式center 居中 left 居左 right 居右line-height 垂直对齐方式/行高 ...

  9. iOS开发 React Native与iOS交互汇总

    RN简介 React Native 是一个使用React和应用平台的原生功能来构建 Android 和 iOS 应用的开源框架.起源于faceBbook内部,2013开源. React Native ...

  10. react-router 路由 入门必看

    如果您已经入门reactjs,请绕道~ 这篇博客只适合初学者,初学reactjs的时候,如果你不会webpack,相信很多人都会被官方的例子绕的晕头转向. ES6的例子也会搞死一批入门者.之前一直用的 ...