嵌入式系统开发与应用教程

  • 格式:pptx
  • 大小:2.50 MB
  • 文档页数:121

下载文档原格式

  / 121
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ADD R3,R2,R1,LSR #2 ;R3<—R2 + R1÷4
寄存器寻址
第二操作数移位方式
LSL:逻辑左移,空出的最低有效位用0填充。 LSR:逻辑右移,空出的最高有效位用0填充。 ASL:算术左移,由于左移空出的有效位用0填充,因此 它与LSL
同义。 ASR:算术右移,算术移位的对象是带符号数,移位过程中必须保
指令长度
指令集可以是以下任一种
32 bits 长 (ARM状态) 16 bits 长 (Thumb 状态)
ARM7TDMI 支持3种数据类型
字节 (8-bit) 半字 (16-bit) 字 (32-bit)
字必须被排成4个字节边界对齐,半字必须 被排列成2个字节边界对齐
一、 ARM指令集概述
持操作数的符号不变。如果源操作数是正数,空出的最高 有效位用0填充,如果是负数用1填充。 ROR:循环右移,移出的字的最低有效位依次填入空出的最高有 效位。 RRX:带扩展的循环右移。将寄存器的内容循环右移1位,空位用 原来C标志位填充。
寄存器寻址
寄存器寻址
第二操作数的移位位数 移位位数可以用立即数方式或者寄存器方式给出,如下所 示:
条件码 0000 0001 0010 0011 0100 0101 0110 0111 1000
条件域表1
后缀 EQ NE CS CC MI PL VS VC HI
标志 Z置位 Z清零 C置位 C清零 N置位 N清零 V置位 V清零 C置位Z清零
含义 相等 不相等 无符号数大于或等于 无符号数小于 负数 正数或零 溢出 未溢出 无符号数高于
ADD R0,R0,#1
/*R0←R0+1*/
AND R0,R0,#0x3f /*R0←R0 AND 0x3f*/
在以上两条指令中,第二个源操作数即为立即数, 要求以“#”为前缀,对于以十六进制表示的立即数, 还要求在“#”后加上“0x”。
注:有效立即数问题
在32位指令编码中存放32位立即数的方法是: 在ARM数据处理指令中,当参与操作的第二操作数为 立即数型时,每个立即数都是采用一个8位的常数循环右 移偶数位而间接得到。其中循环右移的位数由一个4位二 进制的两倍表示,如果立即数记作<immediate>,8位 常数记作immed_8,4位的循环右移值记作rotate_imm, 有效的立即数是由一个8位的立即数循环右移偶数位得到。 因此有效立即数immediate可以表示成:
ARM指令集是32位的,ARM汇编程序的 启动都是从ARM指令集开始。所有的ARM 指令集都可以是有条件执行的。本节从以 下三个方面介绍:
指令分类及指令格式 指令集编码 条件执行
指令分类及指令格式
ARM指令集可以分为六大类,分别为数据处理 指令、Load/Store指令、跳转指令、程序状态 寄存器处理指令、协处理器指令和异常产生指 令。
<immediate>=immed_8循环右移(2×rotate_imm)
例:
MOV R0, #0x0000F200 MOV R0, #0x00012800 MOV R0, #0x00041400 MOV R0, #0x00041800 MOV R0, #0xF000000F
寄存器寻址
寄存器寻址就是利用寄存器中的数值作为操作数,这 种寻址方式是各类微处理器经常采用的一种方式,也 是一种执行效率较高的寻址方式。以下指令:
条件码 1001 1010 1011 1100 1101 1110
条件域表2
后缀
标志
含义
LS
C清零Z置位
无符号数小于或等于
GE
N等于V
带符号数大于或等于
LT
Fra Baidu bibliotek
N不等于V
带符号数小于
GT
Z清零且(N等 带符号数大于
于V)
LE
Z置位或(N不 带符号数小于或等于
等于V)
AL
总是
无条件执行
二、 ARM寻址方式
ADD R3,R2,R1,LSR #2 ;R3 <—R2 + R1÷4 ADD R3,R2,R1,LSR R4 ;R3 <—R2 + R1÷2R4
ADD R0,R1,R2
/*R0←R1+R2*/
该指令的执行效果是将寄存器R1和R2的内容相加, 其结果存放在寄存器R0中。
寄存器寻址
第二操作数为寄存器型的移位操作 在ARM指令的数据处理指令中参与操作的第二操作数
为寄存器型时,在执行寄存器寻址操作时,可以选择是否 对第二操作数进行移位,即Rm,{<shift>},其中Rm称 为第二操作数寄存器,<shift>用来指定移位类型(LSL, LSR,ASL,ASR,ROR或RRX)和移位位数。移位位数 可以是5位立即数(#<#shift>)或寄存器(Rs)。在指 令执行时将移位后的内容作为第二操作数参与运算。例如 指令:
第三讲
ARM指令集
1. ARM指令集概述;
2. ARM寻址方式;
3. 数据处理指令、Load/Store指令;
4. 寄存器传送指令、转移指令、异常中断产 生指令;
5. ARM系统初始化
6. Embest IDE集成开发环境、实验系统介 绍;
7. 基于ARM的嵌入式软件开发基础:ARM 汇编指令实验及C语言程序实验。
每条32位ARM指令都具有不同的二进制 编码方式,和不同的指令功能相对应 。
编码表如下:
指令集编码表
条件执行
ARM指令根据CPSR中的条件位自动判 断是否执行指令,在条件满足时,指 令执行,否则指令被忽略。
在ARM的指令编码表中,统一占用编 码的最高四位[31:28]来表示“条件码” (即“cond”)。 (P100页)
ARM指令使用的基本格式如下:
〈opcode〉{〈cond〉} {S} 〈Rd〉,〈Rn〉{,〈operand2〉}
ARM指令集编码
ARM指令集是以32位二进制编码的方式 给出的,大部分的指令编码中定义了第一 操作数、第二操作数、目的操作数、条件 标志影响位以及每条指令所对应的不同功 能实现的二进制位。
ARM指令系统支持如下几种常见的寻址方式:
立即寻址
寄存器寻址
寄存器间接寻址
基址加偏址寻址
堆栈寻址
块拷贝寻址
相对寻址
立即寻址
立即寻址也叫立即数寻址,这是一种特殊的寻址方 式,操作数本身就在指令中给出,只要取出指令也就取 到了操作数,这个操作数被称为立即数,对应的寻址方 式也就叫做立即寻址。例如以下指令: