自学嵌入式第四十四天:汇编

一、目的

初始化硬件,引导启动C语言程序;

引导C语言启动:

(1)初始化异常向量表;

(2)初始各工作模式的栈指针寄存器;

(3)开启ARM内核中断允许;

(4)将工作模式设置为user模式;

(5)完成上述工作后,引导程序进入c语言主函数执行;

二、MOV

MOV{S}<c> <Rd>, #<const>

MOV{S}<c> <Rd>, <Rm>

mvn r1, r1 //把r1按位取反后放回r1

三、立即数

1.能被编译器编译进指令中的数字量称为立即数;

2.立即数的判断方法:

(1)如果一个数在0-255中间一定是立即数;

(2)如果将一个数展开为二级制形式,存在一种循环右移偶数位方式,使得移位后的结果的高24位全为0,则是立即数;

3.imm12(立即数):4位旋转位放循环右移次数/2;imm8放低八位;

四、ADD、SUB

add r0, r1, #0x4 //r0 = r1 + 4

add r2, r0, r1 //r2 = r0 + r1

add r2, r0, r1, lsl #2 //r2 = r0 + 逻辑左移2位的r1

五、LDR加载指令

ldr r0, =0xffff //可以赋不是立即数

六、BIC/ORR

bic:指定位清零;

bic r0, r1, #0x04 //清第三低位,r0 = r1 & (~(0x04))

orr:指定位置1;

orr r0, r1 //r0 = r0 | r1;

七、状态

CPSR寄存器中条件判断标志位

N: 符号标志位:上条指令执行结果最高位bit31为1,则 N = 1, 当结果作为有符号解释时为负值

Z: 零值标志位:上条指令执行结果为0(即bit0 - bit31 均为0),则 Z = 1;

C: 进位标志位:进行无符号解读,如果在加法过程中进位或者减法时没有借位,则为 C = 1,否则 C = 0

V: 溢出标志位:进行有符号解读,是否发生溢出 -2^31 - 2^31-1(两个正数加得负数,两个负数加得正数)

条件码:eq ge gt le lt al(无条件执行)

equal:等于

not equal:不等

八、cmp比较大小

CMP<c> <Rn>, #<const>

九、B/BL、BX

B<c> <label>

BL<c> <label>

跳转到标签处并存储当前位置到R14(LR)位

BX<c> <Rm>

eg:bx lr //跳转到lr上存储的位置

十、四种系统栈

1.满减栈

2.满赠栈

3.空减栈

4.空增栈

十一、压栈弹栈

stmfd sp!, {lr}

ldmfd sp!, {lr}

相关推荐
2601_962296516 天前
C/C++:编译全过程——预处理、编译、汇编、链接(包含预处理指令:宏定义,文件包括、条件编译)
汇编·预处理·链接·c/c++·编译过程
Freak嵌入式7 天前
Pico PIO 汇编语法深度详解:标识符、指令、伪指令全解析
汇编·stm32·单片机·嵌入式硬件·fpga开发·硬件架构
kyle~12 天前
x86 汇编LOCK前缀 --- 硬件架构向软件提供的核心同步原语
汇编·c++·性能优化·硬件架构·实时系统
典典分享指南13 天前
飞书 + 企业微信 + 微信文档多端协同实践指南
汇编·flask·intellij-idea·fastapi
极客互动API18 天前
企业微信 iPad 协议服务搭建与 AI 回调实战
网络·汇编·人工智能·微信·企业微信·ipad
wechatbot88823 天前
极客互动企业微信 SCRM 私域运营实战效果全景
大数据·汇编·微信·自动化·企业微信·rpa
祈禾1 个月前
计算机组成原理之编译、汇编、链接、解释
开发语言·汇编·笔记·学习
水饺编程1 个月前
AT&T 汇编语言学习笔记开篇语
c语言·汇编·c++
iCxhust1 个月前
8088单板机VScode集成开发环境使用方法二(汇编版)
汇编·单片机·微机原理·8088单板机
·薯条大王1 个月前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python