嵌入式ARM开发入门解析2

一、ARM指令集

1、移位

算术右移 (ASR):针对于有符号数, 最高位补符号位,需要考虑这个数值的符号位

逻辑右移 (LSR):针对于无符号数 ,最高位补0,不需要考虑这个数值的符号位

循环右移(ROR): 循环将移出的最低位补到最高位

2、mov

3、ldr

功能1:向寄存器中加载非立即数

功能2:将RAM中的数据加载到寄存器

4、str

将寄存器中的数据写入RAM指定空间中

5、bic

将寄存器中的值某几位清零(取决于立即数哪几位为1)

6、orr

将寄存器中的值某几位值1(取决于立即数哪几位为1)

7、S

NZCV位配合c位在有条件的情况下执行某些指令

8、b

无条件跳转

bl:函数调用时,会将返回地址保存到lr寄存器

b:函数调用时,无法将返回地址保存到lr寄存器

bx:跳转到lr寄存器对应返回地址

9、mrs

读取某个特殊寄存器的值到通用寄存器
10、msr

将某个通用寄存器的值写入到特殊寄存器

二、

1、栈的分类

空增栈

空减栈

满增栈

满减栈

增栈:入栈时,sp指针向上移动

减栈:入栈时,sp指针向下移动

空栈:先写数据再挪动指针

满栈:先挪动指针,再写数据

ARM内核使用的是满减栈:*--sp,先让sp--,再写数据

2、汇编调用C语言传参时

(1)如果参数少于或等于4个时,可以通过通用寄存器R0 - R3进行传参

(2)当参数超过4个时,必须通过栈进行传参(入栈 保护 出栈恢复)

(3)C语言函数返回的结果保存到R0寄存器

在c语言中调用汇编语言实现找最小值

3、修改工作模式

(1)将cpsr寄存器中的值读到通用寄存器中R0

(2)将R0寄存器中低5位的值先清0 (bic)

(3)将R0寄存器中的低5位置设置为:10000(orr)

(4)将R0寄存器中的值回写到CPSR寄存器

4、立即数判断的规则

(1)如果某个数的数值范围是0~0xFF之间,那么这个数一定是立即数;

(2)把某个数展开成2进制,这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位;

(3)这个数的二进制序列凑够8位之后的的右边必须为偶数个连续的 0

相关推荐
zopple1 天前
汇编、C、C++和Java核心技术对比
c语言·汇编·c++
somi71 天前
ARM-05-Platform + DTS + GPIO子系统 + 中断 + 等待队列 + 错误处理
linux·运维·arm开发
互联科技报1 天前
好用稳定的5G网络仿真软件如何选?— 深度对比与选型指南
网络·arm开发·5g
web守墓人2 天前
【linux】Mubuntu发布,将完整的ubuntu arm装进手机应用中
linux·arm开发·ubuntu
aq55356002 天前
Laravel7.x重磅升级:十大新特性解析
开发语言·汇编·c#·html
EnglishJun3 天前
ARM嵌入式学习(十九)--- 字符设备驱动的注册与调用流程
arm开发·学习
ai产品老杨3 天前
异构计算时代的安防底座:基于 Docker 的 X86/ARM 双模部署与 NPU 资源池化实战
arm开发·docker·容器
somi73 天前
ARM-驱动-06-中断底半部 + ioctl + 原子操作与锁
arm开发·单片机·嵌入式硬件
好家伙VCC3 天前
**TEE在嵌入式安全中的应用实践:基于ARM TrustZone的加密存储方案设计与实现*
java·arm开发·python·struts·安全
进击的小头3 天前
第9篇:嵌入式芯片指令集架构(ISA)详解:ARM_RISC-V等主流ISA全对比
arm开发·单片机·架构·risc-v