您的位置:首页 > 其它

ARM汇编指令集1--需要的基础知识

2017-10-04 09:51 176 查看
ARM汇编指令集1--需要的基础知识

                                         
---参考朱有鹏ARM裸机编程

前言:学习的过程,就是一个先模仿,然后再进行创新的过程。

           学习朱老师的课程,真的完全从0开始学习,以前有很多的地方真的并没有理解,

           等全部学习完后再进行一次总结与感谢。

1、指令与伪指令

(1)汇编指令是CPU机器指令的助记符,经过编译后会得到一串由1010

组成的机器码,可以由CPU读取执行,编译完成之后才开始工作。

(2)汇编伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器

环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会胜场机器码

(在编译过程中起作用)

2、两种不同风格ARM指令:

(1)ARM官方的ARM汇编风格:指令一般用大写、WINDOW中IDE中开发

环境(ADS、MDK等)常用,如:LDR R0,[R1]

(2)GNU风格的ARM汇编:指令一般用小写字母,Linux中常用,如

Ldr   r0 ,[r1]

这些就是用汇编写的,你看到的东西就分为两种:一种叫做指令,一种叫做伪指令

3、ARM汇编特点1

LDR、STR架构

(1)ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中的

内容加载入CPU中通用寄存器才能被CPU处理

(2)LDR(下载指令)指令将内存内容加载入通用寄存器(从内存到寄存器)

(3)STR(store register)指令将寄存器内容存入内存空间中

(4)LDR、STR组合用来实现ARM CPU和内存数据的交换

这就使得ARM访问内存的效率要低一些。

4、ARM汇编特点2:8种寻址方式:

以前学习STm8的时候,老师,整天跟我们说汇编不要丢掉了

也说了这些寻址方式,但是现在对这些寻址方式也有了一定的理解。

(1)寄存器寻址                 mov  r1,r2

(2)立即寻址                     mov  r0,#0xFF00

(3)寄存器移位寻址          mov  r0,r1,lsl  #3

(4)寄存器间接寻址          ldr  r1,[r2]             ;相当于C语言的指针的调用,指针的调用也是通过这里来调用

(5)基址变址寻址             ldr  r1,[r2,#4]        ;现在这个地址是放置在R2加4的内存里面放置的

(6)多寄存器寻址             ldmia   r1!,{r2-r7,r12}   ;r1相当于C语言的数组名

(7)堆栈寻址                    stmfd   sp!,{r2-r7,lr}     ; 数组名不再是普通的数组,只能是堆栈的指针

(8)相对寻址                    beq      flag

                                           flag:

5、ARM汇编特点3:指令后缀

(1)同一指令经常附带不同的后缀,变成不同的指令,经常使用的后缀有:

(2)B(BYTE)功能不变,操作长度变为8位

(3)H(half Word)功能不变,长度变为16位

(4)S(signed)功能不变,操作数变为有符号

如:ldr    ldrb    ldrh   ldrsb   ldrsh

(5)S(S标志)功能不变,影响CPSR的标志位

(6)如mov 和movs(一般是放在传输数据的指令,也就是C语言中的赋值的指令)

两个S代表的意思是不一样的,我们需要根据上下文的意思来判断到底是什么意思

6、ARM汇编特点4:条件执行后缀
 
(1)Moveq  r0,r1   //如果eq后缀成立,则直接执行mov r0,r1;
               //如果eq不成立则本句代码直接作废,相当于没有
               //相当于C语言中if(eq){r0 = r1;}
 
(2)条件后缀执行注意两点:
1、条件后缀是否成立,不是取决于本句代码,而是取决于这句代码之前的代码运行后的结果。
2、条件后缀决定了本句代码是否被执行,而不会影响上一句和下一句代码是否被执行。
3、它是不会直接用的,它会直接用条件码助记符来用。
GT: greater than
 
 
 
7、ARM汇编特点5:多级指令流水线
(1)为了增加处理器指令流的速度,ARM使用多级流水线,下图为3级流水线工作原理示意图(S5PV210使用13级流水线,ARM11为8级)
 
(2)--允许多个操作同时处理,而非顺序执行
ARM   Thumb
PC    PC          取指         从存储器中读取指令
PC-4  PC-2        解码         解码指令中用到的寄存器
PC-8  PC-4        执行         寄存器读(从寄存器BANK)
                               移位及ALU操作
                               寄存器写(到寄存器BANK)
(3)PC指向正被取指的指令,而非正在执行的指令。
流水线的级数越多,S5PV210使用13级流水线,ARM11为8级
一旦流水线被打断,要重新装载就更加的复杂。
ARM就采用这种条件执行的过程。ARM的指令的执行效率是非常高的。
会影响我们中断返回加8或者减8的过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息