ARM体系架构之——汇编指令集

一、聊聊汇编指令和伪指令的真假
学完单片机的时候,我们很迷惑,到底什么是汇编指令,什么是伪指令?
汇编指令:是CPU提供的指令。机器码的助记符 我们随便翻开一本单片机的教程最后几页附录都有汇编指令和机器码的对应关系。例如汇编指令 mov r0, #0x0 编译后是有对应的机器码的。
伪指令:其实不是真正的指令,它是由编译器提供的指令。放在指令中用于指导编译器进行编译过程,不会生成对应的机器码。
.globl IRQ_STACK_START 指示告诉编译器IRQ_STACK_START设置为外部属性,这样其他文件就可以调用这个函数。
二、大小写引发的ARM指令风格的腥风血雨
很多时候我们可以看到两种不同风格的编程LDR R0, [R1]和ldr r0, [r1],到底谁对谁错呢?其实都是对的,只是风格不一样罢了!
ARM官方的汇编风格是大写,比如在ADS、MDK(ARM把当年开发51的keil收购了,现在改名叫MDK,功能更加强大)等开发环境中。
GNU风格是小写(贝尔实验室当年搞的),一般是在linux中。
三、说说ARM汇编的特点
1、LDR/STR架构:ARM是RISC架构,设计时是不能直接访问内存的,而只能与寄存器打交道。所以必须将内存加载到通用寄存器或者是将寄存器中的内容写入到内存空间中,CPU才能进行处理,那么LDR和STR这两兄弟就是干这个事情的。这个组合实现了CPU与内存数据的交互。
2、8中寻址方式
寄存器寻址: mov r1, r2
立即寻址: mov r0, #0xFF00
寄存器移位寻址: mov r0, r1, lsl #3 (r0 = r1<<3)
寄存器间接寻址 ldr r1, [r2] 将内存地址里面的内容给r1
可以这么理解:r2类似与指针,指向的是内存地址, [r2]表示:该指针指向的地址单元内容。
基址变址寻址 ldr r1, [r2, #4] 内存地址是r2+4
多寄存器寻址 ldmia r1!, {r2-r7, r12}
将[r1]—r2 [r1+4]—r3…..
堆栈寻址 stmfd sp!, {r2-r7, lr} 压栈
相对寻址 beq flag flag:
3、指令后缀:
B 操作长度是8
H操作长度是16
S 影响CPSR
4、条件后缀
例如:moveq r0, r1 类似于:if eq {r0, r1} eq的成立取决于上面的代码
5、ARM的多级指令流水线
PC指向的是正在被取指的指令而不是正在执行的指令
PC 取址
PC-4 解码
PC-8 执行
四、总结:
汇编指令说简单也简单,说难也难。我们大部分时间是采用C语言和C++进行程序的设计,所以汇编的运用一般是中断和内核。这个在我们以后讨论这些问题时再详细研究!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值