嵌入式第四十七篇——ARM汇编

1、什么是立即数?如何判断某数是非法是12位立即数?

(1)立即数是直接嵌在指令中的常数,不需要从内存 / 寄存器读取,

(2)判断标准:把某个数展开成2进制,该数必须存在一种循环右移(偶数位),使得移位后高24位全0,低8位即为有效imm8

2、b,bl,bx指令的区别是什么?

b:单纯跳转,不保存返回地址

bl:跳转前,将下一条指令地址存入 LR (R14)

bx:跳转 + 切换指令集(ARM↔Thumb),不保存返回地址

3、ARM内核采用的栈是哪种栈?

ARM 内核本身不强制固定栈类型,但主流使用满递减栈(FD)

1.满递减栈 (FD)
  • 缩写: FD
  • 核心特点 :
    SP始终指向栈中最后一个已压入的元素。
    入栈操作时,先执行SP递减(SP--),再将数据存入新位置。
    适用于栈空间已满时需先移动指针再存储的场景。
2.空递减栈 (ED)
  • 缩写: ED
  • 核心特点 :
    SP指向栈中第一个可用的空位置。
    入栈操作时,先将数据存入当前SP位置,再执行SP递减(SP--)。
    适用于栈空间从高地址向低地址增长且初始为空的情况。
3.满递增栈 (FA)
  • 缩写: FA
  • 核心特点 :
    SP指向栈中最后一个已压入的元素。
    入栈操作时,先存入数据到当前SP的下一个位置,再执行SP递增(SP++)。
    适用于栈空间从低地址向高地址增长且初始为满的场景。
4.空递增栈 (EA)
  • 缩写: EA
  • 核心特点 :
    SP指向栈中第一个可用的空位置。
    入栈操作时,先执行SP递增(SP++),再将数据存入新位置。
    适用于栈空间从低地址向高地址增长且初始为空的情况。

5.关键区别总结

  • 满栈 与空栈 :
    满栈的SP指向有效数据,空栈的SP指向空闲位置。
  • 递减栈 与递增栈 :
    递减栈向低地址扩展(SP--),递增栈向高地址扩展(SP++)。

6.典型应用场景

  • ARM架构: 通常使用满递减栈(FD)。
  • x86架构: 常见空递增栈(EA)。
  • 嵌入式系统: 根据硬件设计选择栈类型,如Cortex-M系列默认采用FD栈。

4、CPSR中条件标志位,分别在什么情况下被置位

|-----|-------------|------------------------|-------------------|
| 标志位 | 含义 | 置位(=1) | 清零(=0) |
| N | 运算结果为负 | 有符号数运算结果的最高位(bit31)为 1 | 最高位为 0 |
| Z | 运算结果为 0 | 运算结果所有位都是 0 | 运算结果非 0 |
| C | 无符号数进位 / 借位 | 加法:最高位产生进位 减法:无借位 | 加法:最高位无进位 减法:产生借位 |
| V | 有符号数溢出 | 有符号数运算结果超出 32 位范围 | 有符号数运算无溢出 |

5、arm汇编调用c语言函数以及c语言函数调用汇编编写的函数,函数参数和返回值如何处理?

(1)参数传递:

前 4 个参数依次存入R0、R1、R2、R3;

超过 4 个的参数,通过栈传递(按从左到右顺序压栈);

(2)返回值处理:

32 位返回值:存入R0;

64 位返回值:存入R0+R1;

相关推荐
La Pulga几秒前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
li星野1 小时前
【学习记录】逻辑分析仪完全入门:从品牌方案到采样率、存储深度的核心概念解析
学习
旖旎夜光1 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
WEI_YANG_JU2 小时前
初中数学教学中合作学习的研究与实践
学习
码农小韩2 小时前
FPGA学习(一)——LED点灯与开发流程
学习·fpga开发·入门·环境配置·仿真·点灯
李长渊哦3 小时前
Qoder 自定义子智能体(Subagent)学习笔记
chrome·笔记·学习
代码山河3 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目
女神下凡4 小时前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范
旖旎夜光4 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习
m4Rk_4 小时前
【论文阅读】Agent 记忆机制(119):EvoLife——让具身 Agent 把主动问到的答案沉淀为可复用的空间经验
论文阅读·人工智能·学习·开源·github