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

一、目的

初始化硬件,引导启动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}

相关推荐
ol木子李lo2 天前
Visual studio 2022高亮汇编(ASM)语法方法
汇编·ide·windows·visual studio
资料,小偿3 天前
4.1.1基于51单片机汇编语言出租车计价器可切换白天黑夜,可修改价格
汇编·51单片机·proteus
embrace993 天前
【C语言学习】数据在内存中存储
java·c语言·开发语言·汇编·c++·学习·算法
T.Ree.9 天前
汇编_mov指令
汇编
CC-NX10 天前
32位汇编:实验12动态链接库
汇编
资料,小偿10 天前
4.101基于8086国旗图案proteus8.9,8086彩灯图案流水灯图案,国期图案仿真,四个开关四种模式。近期本人原创
汇编·proteus
资料,小偿13 天前
4.29.3五种波形发生器8086波形发生器,锯齿波脉冲波正弦波三角波直流信号含调试视频➕18页5000字原创报告软件流程图proteus8.9近期原创的,
汇编·proteus
T.Ree.13 天前
汇编_读写内存
开发语言·汇编·c#
量子炒饭大师14 天前
【一天一个计算机知识】—— 【编程百度】翻译环境与运行环境
c语言·汇编·c++·gitee·机器翻译
资料,小偿15 天前
4.98基于8086倒车测距8086测距ACD0809proteus8.9仿真,汇编语言源程序
汇编·proteus