1 / 44
文档名称:

ARM和嵌入式系统设计3.ppt

格式:ppt   大小:1,488KB   页数:44页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

ARM和嵌入式系统设计3.ppt

上传人:q2299971 2017/8/10 文件大小:1.45 MB

下载得到文件列表

ARM和嵌入式系统设计3.ppt

相关文档

文档介绍

文档介绍:ARM汇编指令
本章目标
掌握ARM处理器的寻址方式
ARM指令格式;
ARM指令种类,
重点掌握压栈、出栈操作
掌握ARM程序的跳转
ARM程序的文件类型:
C程序:ARM开发中大部分程序使用C语言编写,文件类型为“*.C”;
汇编程序:涉及到硬件底层操作的代码有时必须使用汇编语言编写,文件类型为“*.S”。
ARM程序的文件类型
为什么要掌握部分常用ARM指令?
熟悉ARM体系结构:通过指令的学****可以更深入的了解ARM硬件结构的特点;
修改启动代码:启动代码为了满足大部分系统的顺利运行,通常将系统硬件配置在最低性能,通过调整启动代码中的参数使其更适合自己的硬件系统;
调试程序:通过观察反汇编代码了解程序执行情况,比如某个变量的操作是否被编译器优化掉了。
阅读已有的汇编代码;
为什么要掌握部分常用ARM指令
ARM指令系统
简介
ARM处理器是基于精简指令集计算机(RISC)原理设
计的,指令集和相关译码机制较为简单。ARM920T
具有32位ARM指令集和16位Thumb指令集,ARM指令
集效率高,但是代码密度低;而Thumb指令集具有
较高的代码密度,却仍然保持ARM的大多数性能上
的优势,它是ARM指令集的子集。所有的ARM指令
都是可以有条件执行的,而Thumb指令仅有一条指
令具备条件执行功能。ARM程序和Thumb程序可相
互调用,相互之间的状态切换开销几乎为零。
ARM寻址方式
寻址方式是根据指令中给出的地址码字段来
实现寻找真实操作数地址的方式。ARM处理器具有
9种基本寻址方式。
; ;
; ;
; ;
; 。
操作数的值在寄存器中,指令中的地址码字段指出
的是寄存器编号,指令执行时直接取出寄存器值来操作。寄
存器寻址指令举例如下:
MOV R1,R2 ;将R2的值存入R1
SUB R0,R1,R2 ;将R1的值减去R2的值,结果保存到R0
0xAA
0x55
R2
R1
ARM寻址方式
寄存器寻址
MOV R1,R2
0xAA
立即寻址
立即寻址指令中的操作码字段后面的地址码部分即是操
作数本身,也就是说,数据就包含在指令当中,取出指令也就
取出了可以立即使用的操作数(这样的数称为立即数)。立即寻
址指令举例如下:
SUBS R0,R0,#1 ;R0减1,结果放入R0,并且影响标志位
MOV R0,#0xFF000 ;将立即数0xFF000装入R0寄存器
0x55
R0
MOV R0,#0xFF00
程序存储
MOV R0,#0xFF00
0xFF00
从代码中获得数据
寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作
数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结
合之前,选择进行移位操作。寄存器移位寻址指令举例如下:
MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0,;
即是R0=R2×8
ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相“与”操
作,结果放入R1
0x55
R0
R2
0x01
ARM寻址方式
寄存器移位寻址
0x08
0x08
逻辑左移3位
移位操作:
LSL、LSR:逻辑左\右移;ASR:算术右移,保持符号位不变
ROR:循环右移; RRX:带扩展位的循环右移
寄存器间接寻址
寄存器间接寻址指令中的地址码给出的是一个通用寄存器
的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄
存器为操作数的地址指针。寄存器间接寻址指令举例如下:
LDR R1,[R2];将R2指向的存储单元的数据读出;保存在R1中
SWP R1,R1,[R2];将寄存器R1的值和R2指定的存储;单元的内容交换
0x55
R0
R2
0x40000000
0xAA
0x40000000
LDR R0,[R2]
0xAA
基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,
形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,
常用于查表、数组操作、功能部件寄存器访问等。
LDR R2,[R3,#0x0C];读取R3+0x0C地址上的存储单元的内容放入R2
STR R1,[R0,#-4]! ;先R0=R0-4,然后把R1的值寄存;到保存到R0指
定的存储单元
ARM寻址方式
基址寻址
0x55
R2
R3
0x40000000
0xAA
0x4000000C
LDR R2,[R3,#0x0C]
0xAA
将R3+0x0C作为地址装载数据
多寄存器寻址
多寄存器寻址一次可传送