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的过程。
---参考朱有鹏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的过程。
相关文章推荐
- Android逆向中常用的ARM汇编指令基础知识
- ARM汇编基础知识汇总与Inline Hook
- ARM裸机编程需要知道的汇编知识1---可编程逻辑器件
- ARM基础:为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- ARM基础:为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- 使用ARM汇编破解iOS程序基础知识分享
- Android逆向中常用的ARM汇编指令基础知识
- ARM裸机编程需要知道的汇编知识2---哈弗结构和冯诺依曼结构
- 汇编语言的基础知识标识符和表达式
- ARM基础知识(一)
- 要看懂OpenCV的代码,所需要的C和C++的基础知识
- 汇编语言的基础知识标识符和表达式的继续
- 汇编基础知识(一)
- FriendlyARM Tiny210开发板硬件基础 第二篇--汇编调用c语言
- as汇编基础程序设计--基础知识点
- ARM基础知识连载
- 《PHP 源代码分析》第一章 构建系统 之 准备工具、库及需要具备的基础知识
- [汇编语言学习笔记][第一章基础知识]
- Java必学基础知识总结汇编
- 程序员需要那些具备最基础的知识和技能