基于mini2440 的 bootloader 设计 ---- 3、ARM指令学习
来源:互联网 发布:创业者必备的网络知识 编辑:程序博客网 时间:2024/05/21 09:37
开发环境:
电脑系统:RedHat Enterprise Linux6 kernel version : linux-2.6.32
交叉工具链:arm-linux-xxx4.3.2
开发板版本:mini2440 S3C2440处理器 64M SDRAM 256M nand flash
一、寻址方式
定义:处理器根据指令中给出的信息寻找到操作数的方式就叫做寻址方式。这里的操作数一般指目的操作数。
1、立即数寻址:
特点:操作数直接存放在指令当中,取到指令就拿到操作数。
例子:add r0,r0,#30 ; r0<--r0+30 (立即数需用 # 当前缀)
2、寄存器寻址:
特点:操作数存放在寄存器中。
例子:add r0, r1, r2 ; r0 <-- r1+r2
3、寄存器间接寻址:
特点:操作数放在内存中,内存地址放在寄存器中。
例子:ldr r0, [r1]; r0 <-- [r1]
4、基址变址寻址:
特点:操作数放在内存中,其地址由寄存器的值加上指令中的立即数得到。
例子:ldr r0, [r1,#4]; r0 <-- [r1+4]
5、相对寻址:
特点:PC指针的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。
例子:bl next (程序跳转指令)
二、指令分类学习
1、算术和逻辑类指令:add、sub、mov、mvn、and、orr、bic
1.1、add
格式:add{条件}{S} <dest>, <op1>, <op2>
功能:将op1与op2相加,结果存放到dest <dest、op1必须是寄存器, op2可以是立即数、寄存器>
例子:add r0, r1,r2
1.2、sub
格式:sub{条件}{S} <dest>, <op1>, <op2>
功能:op1-op2,结果存放到dest <dest、op1必须是寄存器, op2可以是立即数、寄存器>
例子:sub r0, r1,r2
1.3、mov
格式:mov{t条件}{S} <dest>, <op1>
功能:op1存放到dest <dest必须是寄存器, op1可以是立即数、寄存器>
例子:mov r1, r0
1、4、mvn格式:mvn{条件}{S} <dest>, <op1>
功能:op1取反后存放到dest <dest必须是寄存器, op1可以是立即数、寄存器>
例子:mvn r1, r0
1.5、and
格式:and{条件}{S} <dest>, <op1>, <op2>
功能:op1跟op2进行按位与,结果存放到dest <dest、op1必须是寄存器, op2可以是立即数、寄存器>
例子:orr r3, r1, r0
1.6、orr
格式: orr{条件}{S} <dest>, <op1>, <op2>
功能:op1跟op2进行按位或,结果存放到dest <dest、op1必须是寄存器, op2可以是立即数、寄存器>
例子:orr r3, r1, r0
1.7、bic格式: orr{条件}{S} <dest>, <op1>, <op2>
功能:op1跟op2进行按位清除,结果存放到dest <dest、op1必须是寄存器, op2可以是立即数、寄存 器>,遇1被清除,与or相反
例子:orr r3, r1, #1011B ;0、1、3 被清除,2保留
2、比较类指令:cmp、tst
2.1、cmp
格式: cmp{条件}{p} <op1>, <op2>
功能:op1-op2,结果影响CPSR中的标志位
例子:cmp r1,r2
2.2、tst
格式: tst{条件}{p} <op1>, <op2>
功能:op1 AND op2,结果影响CPSR中的标志位
例子:cmp r1,#1
3、跳转指令:b、bl
3.1、b
格式: b{条件} <地址>
功能:跳转到<地址>处执行,且不保存返回地址,即lr 中没有跳转前的地址
例子:b next
3.2、bl
格式: bl{条件} <地址>
功能:跳转到<地址>处执行,且保存返回地址,即lr 中保存有跳转前的地址
例子:bl next
4、移位指令:lsl、lsr、ror
4.1、lsl
格式: rx, lsl#n
功能:将rx左移n位,低位补零
例子:mov r1, #12
mov r0, r1,lsl#2 ; r0=48=12<<2
4.2、lsr
格式: rx, lsr#n
功能:将rx右移n位,高位补零
例子:mov r1, #12
mov r0, r1,lsr#2 ; r0=3=12>>2
4.3、ror
格式: rx, ror#n
功能:将rx循环右移n位,低位补高位
例子:mov r1, #12
mov r0, r1,lsl#2 ; r0=48=12<<2
5、程序状态字访问指令:msr、mrs
5.1、msr
格式: msr cpsr, rx
功能:将rx复制到cpsr中
例子:msr cpsr, r0
5.2、mrs
格式: mrs rx, cpsr
功能:将cpsr复制到rx中
例子:msr r0, cpsr
6、存储器访问指令:ldr、str
6.1、ldr
格式: ldr{条件} rd,[地址]
功能:将地址中的内容复制到rd中
例子:ldr r0, [#30008000]
6.2、str
格式: str{条件} rd,[地址]
功能:将rd中的内容复制到[地址中]
例子:ldr r0, [#30008000]
以上就是基本的ARM指令,当然,每种类型的指令还有很多,这里只是介绍了一些基本且经常遇到的,若想查看完整的指令集,还得参考手册
《ARM Architecture Reference Manual》
- 基于mini2440 的 bootloader 设计 ---- 3、ARM指令学习
- 基于mini2440 的 bootloader 设计 ---- 1、 准备工作
- 基于ARM的通用bootloader的设计
- 基于mini2440 的 bootloader 设计 ---- 2、处理器介绍
- 基于mini2440 的 bootloader 设计 ---- 4、CPU核心初始化
- 基于mini2440 的 bootloader 设计 ---- 5、内存初始化
- 基于mini2440 的 bootloader 设计 ---- 7、进入C大门
- 基于mini2440 的 bootloader 设计 ---- 8、NandFlash 初始化
- 基于mini2440 的 bootloader 设计 ---- 9、中断初始化
- 基于mini2440的简易bootloader
- 基于mini2440 的 bootloader 设计 ---- 6、C程序运行环境搭建
- ARM学习笔记012之mini2440上电的启动和初始化程序分析(即Bootloader分析)
- mini2440的bootloader制作
- 基于ARM核的Bootloader代码的分析与设计(zhuan )
- 【mini2440】ARM汇编指令1
- 【mini2440】ARM汇编指令2
- 结合Bootloader的相关知识,并参考ARM的汇编指令,分析下面的Bootloader代码。
- 基于FNET的32位ARM的bootloader
- AIDL的简单运用实现
- Java内存溢出及jvm内存设置
- Android自定义控件:下拉菜单的实现与优化
- 只能输入数字的文本域
- ArrayAdapter requires the resource id to be a TextView
- 基于mini2440 的 bootloader 设计 ---- 3、ARM指令学习
- js_无缝滚动效果offsetLeft
- 公司网站如何让用户使用QQ第三方登录
- uipickerView如何设置字体大小
- weblogic11g 数据库连接从hibernate变为weblogic数据源后,日期变的显示为:00:00:00:0
- 加解密优化
- Eclipse使用git最基本流程
- 如何轻松实现iOS9多任务管理器效果(iCarousel高级教程)
- GitLab安装