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

一、目的

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

相关推荐
切糕师学AI5 小时前
ARM 汇编指令:ORRS
汇编·arm开发
缘友一世8 小时前
计算系统安全速成之链接:理解程序的构建过程【7】
汇编·计算机系统
38242782712 小时前
汇编:宏汇编、宏库
汇编
38242782714 小时前
汇编:条件汇编、
前端·汇编·数据库
white-persist14 小时前
【攻防世界】reverse | simple-check-100 详细题解 WP
c语言·开发语言·汇编·数据结构·c++·python·算法
时空自由民.14 小时前
stm32FXX系列MCU汇编启动文件分析
汇编·stm32·单片机
切糕师学AI15 小时前
ARM 汇编指令:STR
汇编·arm开发
38242782715 小时前
IA-32汇编:MOV r/m16,sreg指令、LAHF指令、ALIGN指令、LABEL 指令、TYPEDEF指令解析
汇编
38242782718 小时前
汇编:字符串的输入
汇编
38242782719 小时前
8086 CPU汇编伪操作汇总
汇编