第2章ARMTHUMB微处理器结构及指令系统-Power

上传人:王**** 文档编号:260546250 上传时间:2022-02-28 格式:PPTX 页数:104 大小:956KB
返回 下载 相关 举报
第2章ARMTHUMB微处理器结构及指令系统-Power_第1页
第1页 / 共104页
第2章ARMTHUMB微处理器结构及指令系统-Power_第2页
第2页 / 共104页
第2章ARMTHUMB微处理器结构及指令系统-Power_第3页
第3页 / 共104页
第2章ARMTHUMB微处理器结构及指令系统-Power_第4页
第4页 / 共104页
第2章ARMTHUMB微处理器结构及指令系统-Power_第5页
第5页 / 共104页
亲,该文档总共104页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第2章ARMTHUMB微处理器结构及指令系统-Power》由会员分享,可在线阅读,更多相关《第2章ARMTHUMB微处理器结构及指令系统-Power(104页珍藏版)》请在金锄头文库上搜索。

1、第二章ARM/Thumb微处理器结构及指令系统2.3 ARM/THUMB指令系统 q1. ARM处理器寻址方式q2. ARM指令集介绍q3. Thumb指令集1.ARM处理器寻址方式 寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有9种基本寻址方式。(1).寄存器寻址; (2).立即寻址;(3).寄存器偏移寻址; (4).寄存器间接寻址;(5).基址寻址; (6).多寄存器寻址;(7).堆栈寻址; (8).块拷贝寻址;(9).相对寻址。 操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。 寄存器寻址指令举例如下:

2、MOV R1,R2 ;将R2的值存入R1 SUB R0,R1,R2 ;将R1的值减去R2的值,结果保存到R0 0 xAA0 x55R2R1(1).寄存器寻址MOV R1,R20 xAA 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下: SUBS R0,R0,#1 ;R0减1,结果放入R0,并且影响标志位MOV R0,#0 xFF000 ;将立即数0 xFF000装入R0寄存器 0 x55R0MOV R0,#0 xFF00程序存储(2).立即寻址MOV R0,#0 xFF

3、000 xFF00从代码中获得数据 寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0, ;即是R0=R28 ANDSR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“与”操作,结果放入R10 x55R0R20 x01(3).寄存器偏移寻址MOV R0,R2,LSL #30 x080 x08逻辑左移3位 寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地

4、址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下: LDRR1,R2;将R2指向的存储单元的数据读出;保存在R1中 SWP R1,R1,R2;将寄存器R1的值和R2指定的存储;单元的内容交换 0 x55R0R2 0 x400000000 xAA0 x40000000(4).寄存器间接寻址LDR R0,R20 xAA 基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址指令举例如下: LDRR2,R3,#0 x0C ;读取R3+0 x0C地址上的存储单元 ;的内容,放入R2 STRR1,R0,#-4! ;先R0=R0-4,然后把R1的值寄存

5、 ;到保存到R0指定的存储单元 (5).基址寻址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA将R3+0 x0C作为地址装载数据 多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。 多寄存器寻址指令举例如下: LDMIA R1!,R2-R7,R12 ;将R1指向的单元中的数据读出到 ;R2R7、R12中(R1自动加1) STMIA R0!,R2-R7,R12 ;将寄存器R2R7、R12的值保 ;存到R0指向的存储; 单元中 ;(R0自动加1) 使用多寄存器寻址指令时,寄存器子集的顺序是按

6、由小到大的顺序排列,连续的寄存器可用“”连接;否则用“,”分隔书写。(6).多寄存器寻址0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器LDMIA R1!,R2-R4,R6 0 x400000100 x010 x020 x030 x04 堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:

7、向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈(7).堆栈寻址(7).堆栈寻址栈底栈顶栈区SP堆栈存储区栈顶栈底栈区SP向下增长向上增长0 x123456780 x12345678堆栈压栈堆栈压栈栈顶SP栈顶SP栈底空堆栈栈底满堆栈 堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。 (7).堆栈寻址0 x123456780 x12345678栈顶SP0 x12345678栈顶SP压栈压栈所以可以组合出四种类型的堆栈方式:满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA

8、等; 空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等; 满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等;空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。 (7).堆栈寻址 多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。 如:STMIA R0!,R1-R7;将R1R7的数据保存到存储器中。;存储指针在保存第一个值之后增加,;增长方向为向上增长。STMIB R0!,R1-R7;将R1R7的数据保存到存储器中。;存储指针在保存第一个值之前增加,;增长方向为向上增

9、长。 (8).块拷贝寻址 增加 之前STMIBSTMFALDMIBLDMED 之后STMIASTMEALDMIALDMFD 减少 之前LDMDBLDMEASTMDBSTMFD 之后LDMDALDMFASTMDASTMED 向上生长 向下生长 满 空 满 空 增长的方向增长的先后多寄存器传送指令映射 相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。 相对寻址指令举例如下:BL SUBRl ;调用到SUBRl子程序. . .SUBR1MOV PC,R14 ;返回(7). 相对寻址2. ARM指令集介绍(1).指令格

10、式(2).条件码(3).ARM存储器访问指令(4). ARM数据处理指令(5).乘法指令(6). ARM分支指令(7).协处理器指令(8).杂项指令(9).伪指令2. ARM指令集介绍nARM7TDMI(-S)的指令集,包括ARM指令集Thumb指令集。n首先介绍ARM指令的基本格式及灵活的操作数,然后介绍条件码,再把ARM指令集、Thumb指令集按类分别说明。 ARM指令的基本格式如下:(1).指令格式 S , 其中号内的项是必须的,号内的项是可选的。各项的说明如下:opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器; Rn:第1个操作数的寄存器;

11、operand2:第2个操作数;LDR R0,R1 ;读取R1地址上的存储器单元内容,执行条件ALBEQ D1 ;分支指令,执行条件EQ,即相等则跳转到D1ADDS R1,R1,#1 ;加法指令,R1+1R1,影响CPSR ;寄存器(S)SUBNES R1,R1,#0 x10 ;条件执行减法运算(NE),R1 - ; 0 x10=R1,影响CPSR寄存器(S)指令格式举例如下:(1).指令格式: 灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式:#immed_8r常数表达式;Rm寄存器方式;Rm,shift寄存器移位方式;第2个操作数(1).指令格式:第2个操作数#i

12、mmed_8r常数表达式 该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。循环右移10位0 x120 0 0 1 0 0 1 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x801 0 0 0 0 0 0 00 x040 0 0 0 0 1 0 08位常数(1).指令格式:第2个操作数 合法常量:0 x3FC、0、0 xF0000000、200、0 xF0000001。 非法常量 : 0 xlFE、511、0 xFFFF

13、、0 x1010、0 xF0000010。 #immed_8r常数表达式 常数表达式应用举例:MOV R0,#1 ;R01AND R1,R2,#0 x0F ;R2与0 x0F,结果保存在RlLDR R0,R1,#-4 ;读取R1地址上的存储器单元内容,且 R1 R1- 4(1).指令格式:第2个操作数Rm寄存器方式 在寄存器方式下,操作数即为寄存器的数值。寄存器方式应用举例:SUB R1,R1,R2 ;R1-R2R1MOV PC,R0 ;PC=R0,程序跳转到指定地址LDR R0,R1,-R2 ;Rl所指存储器单元 内容存人R0,且R1 = R1 - R2 (1).指令格式:第2个操作数Rm,

14、shift寄存器移位方式 将寄存器的移位结果作为操作数,但Rm值保持不变,移位方法如下:操作码说明操作码说明ASR #n算术右移n位ROR #n循环右移n位LSL #n逻辑左移n位RRX带扩展的循环右移1位LSR #n逻辑右移n位Type RsType为移位的一种类型,Rs为偏移量寄存器,低8位有效。(1).指令格式:第2个操作数LSL移位操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C 寄存器偏移方式应用举例:ADD R1ADD R1,R1R1,R1R1,LSL #3 LSL #3 ;R1=R19R1=R19SUB R1SUB R1,R1R1,R2R2,LSR #

15、2 LSR #2 ;R1=R1-R24R1=R1-R24 ARM指令的基本格式如下:(2).条件码 S , 使用条件码“cond”可以实现高效的逻辑操作,提高代码效率。 所有的ARM指令都可以条件执行,而Thumb指令只有B(跳转)指令具有条件执行 功能。如果指令不标明条件代码,将默认为无条件(AL)执行。操作码条件助记符标志含义0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1无符号数大于或等于0011CC/LOC=0无符号数小于0100MIN=1负数0101PLN=0正数或零0110VSV=1溢出0111VCV=0没有溢出1000HIC=1,Z=0无符号数大于1001L

16、SC=0,Z=1无符号数小于或等于1010GEN=V有符号数大于或等于 1011LTN!=V有符号数小于 1100GTZ=0,N=V有符号数大于 1101LEZ=1,N!=V有符号数小于或等于 1110AL任何无条件执行 (指令默认条件) 1111NV任何从不执行(不要使用) 指令条件码表(3). ARM存储器访问指令 ARM处理器是典型的RISC处理器,对存储器的访问只能使用加载和存储指令实现。ARM处理器是冯诺依曼存储结构,程序空间、RAM空间及I/O映射空间统一编址,除对RAM操作以外,对外围IO、程序数据的访问均要通过加载/存储指令进行。 存储器访问指令分为单寄存器操作指令和多寄存器操作指令。助记符说明操作条件码位置LDR Rd,addressing 加载字数据Rdaddressing,addressing索引LDRcondLDRB Rd,addressing 加载无符号字节数据Rdaddressing,addressing索引LDRcondBLDRT Rd,addressing以用户模式加载字数据Rdaddressing,addressing索引LDRcondTLDRBT R

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号