EMPUCh3指令系统.ppt
《EMPUCh3指令系统.ppt》由会员分享,可在线阅读,更多相关《EMPUCh3指令系统.ppt(245页珍藏版)》请在三一办公上搜索。
1、第3章 ARM指令集,ARM指令系统,指令系统简介,ARM处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制较为简单。ARM具有32位ARM指令集和16位Thumb指令集;ARM指令集效率高,但是代码密度低;Thumb指令集是ARM指令集的子集。Thumb2是ARM指令集和Thumb指令集的融合。所有的ARM指令都是可以有条件执行的,而Thumb指令仅有一条指令具备条件执行功能。ARM程序和Thumb程序可相互调用,相互之间的状态切换开销几乎为零。,第3章 目录,3.1 ARM指令集概述 3.2 ARM寻址方式 3.3 ARM指令详细介绍,第3章 目录,3.1 ARM指令
2、集概述 3.2 ARM寻址方式 3.3 ARM指令详细介绍,3.1 ARM指令集概述,ARM指令集是32位的。ARM汇编程序的启动都是从ARM指令集开始。所有的ARM指令集都可以是有条件执行的。本节从以下三个方面介绍:ARM指令集编码 条件执行 指令分类及指令格式,概述,3.1.1 ARM指令集编码,ARM指令集是以32位二进制编码的方式给出的;指令编码中定义了目的操作数、第一操作数、第二操作数条件标志影响位指令所对应的不同功能实现的二进制位,指令编码概述,指令编码表如下,ARM指令集编码表,ARM指令集编码表,ARM指令集指令码opcode表,ARM指令集指令条件码cond表,ARM指令集指
3、令简表,ARM指令集指令简表,ARM指令集指令简表,ARM指令集基本格式,S,Cond:ARM指令根据CPSR中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。S:指令执行后,是否还改写“cond”位。使用条件码“cond”可以实现高效的逻辑操作,提高代码效率。所有的ARM指令都可以条件执行。如果指令不标明条件代码,将默认为无条件(AL)执行。,3.1.2 条件执行,ARM指令集举例,C代码:if(a b)a+;elseb+;,对应的汇编代码:a-r0,b-r1CMPR0,R1;R0与R1比较ADDHIR0,R0,#1;若R0R1,则R0=R0+1ADDLSR1,R1,#
4、1;若R0R1,则R1=R1+1,3.1.2 条件执行,ARM指令集可以分为六大类:数据处理指令Load/Store指令跳转指令程序状态寄存器处理指令协处理器指令异常产生指令。,3.1.3 指令分类及指令格式,ARM指令集分类,ARM指令的基本格式如下:,ARM指令集指令格式,S,其中 号内的项是必须的;号内的项是可选的;Rd 是固定不变的;Rn 是固定不变的;operand2 变化繁多;,3.1.3 指令分类及指令格式,Opcode:操作码;助记符,如AND=0000。Cond:条件码;助记符,如EQ=0000。S:更新码;若指定“S”,则指令执行后,自动更新CPSR中的Cond。Rd:目的
5、寄存器;如R0=0000。Rn:第1源操作数;是寄存器;如R1=0001。Op2:第2源操作数;可为立即数/寄存器,变形式多样。,ARM指令集指令格式说明,3.1.3 指令分类及指令格式,S,ARM指令集ARM指令格式举例,LDR R0,R1;读R1地址上的存储单元内容,执行条件ALBEQ DATAEVEN;条件分支指令,相等则跳转到DATAEVENADDS R2,R1,#1;加法指令,R2R2,更新CPRS,3.1.3 指令分类及指令格式,ARM指令集operand2,S,operand2的形式十分灵活#immed立即数方式;Rm 寄存器方式;Rm,Shift 寄存器移位方式;下面分别介绍:
6、,3.1.3 指令分类及指令格式,ARM指令集operand2=#immed,operand2=#immed32位指令无法遍历32位立即数!operand2是12bits,被分解为“8位常数immed_8”和“4位移位位数rimm_4”,用“immed_8循环右移2*rimm_4位”来表示一个立即数。有效立即数immediate表示成:=immed_8 ROR(2rimm_4)12bits=rimm_4拼接immed_8,3.1.3 指令分类及指令格式,3.1.3 指令分类及指令格式,循环右移10位,8位常数,ARM指令集operand2=#immed,operand2=#immed=imme
7、d_8 ROR(2r_imm_4)例如:0 x04800000可以看成0 x12循环右移10位,凡是左右循环移位偶数位后,能够表示成一个字节的数都是合法的立即数。(1之间的间距小于等于8),ARM指令集operand2=Rm,3.1.3 指令分类及指令格式,operand2=Rm在寄存器方式下,操作数即为寄存器的数值。例如:SUBR1,R1,R2MOVPC,R0,ARM指令集operand2=Rm,3.1.3 指令分类及指令格式,operand2=Rm 在寄存器方式下,操作数即为寄存器的数值。将寄存器的移位结果作为操作数,但Rm值保持不变。格式如下:Rm,shifttype#rimm_5Rm,
8、shifttype Rs,operand2=Rm 移位操作含义LSL:逻辑左移,空出的最低有效位用0填充。LSR:逻辑右移,空出的最高有效位用0填充。ASL:算术左移,由于左移空出的有效位用0填充,因此 它与LSL同义。ASR:算术右移,算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有效位用0填充,如果是负数用1填充。ROR:循环右移,移出的字的最低有效位依次填入空出的最高有效位。RRX:带扩展的循环右移。将寄存器的内容循环右移1位,空位用原来C标志位填充。,ARM指令集operand2=Rm,3.1.3 指令分类及指令格式,operand2=Rm
9、 移位方式:图示,ARM指令集operand2=Rm,3.1.3 指令分类及指令格式,operand2=Rm 实例:ADDR1,R1,R1,LSL#3;R1=R1+R1*8=9R1SUBR1,R1,R2,LSR R3;R1=R1-(R2/2R3),ARM指令集operand2=Rm,3.1.3 指令分类及指令格式,第3章 目录,3.1 ARM指令集概述 3.2 ARM寻址方式 3.3 ARM指令详细介绍,3.2 ARM处理器寻址方式,寻址方式定义,寻址方式就是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。操作数可能的形式:操作数为立即数:直接给出立即数操作数在寄存器中:直接指明寄存
10、器操作数在内存中:如何给出存储单元的地址?,3.2 ARM处理器寻址方式,寻址方式分类,ARM处理器具有7种基本寻址方式:立即寻址;寄存器寻址;寄存器间接寻址;基址加偏址;堆栈寻址;块拷贝寻址;相对寻址。,定义:在立即寻址指令中,只能用Operand2表示立即数!也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下:SUBSR0,R0,#1;R0减1,结果放入R0,并且影响标志位MOVR0,#0 xFF000;将立即数0 xFF000装入R0寄存器,MOV R0,#0 xFF00,0 xFF00,从代码中获得数据,3.2.1 立即寻
11、址,立即寻址-定义,3.2.1 立即寻址,指令:测试下列指令是否正确?为什么?ADDR0,R0,1111ADDR0,R0,0 x3fMOVR0,#0 x128MOVR0,#0 x1FFMOVR0,#0 xFFFFFFFF;等价MVNR0,#0上机练习,立即寻址-实例1-上机练习,3.2.1 立即寻址,立即数要求以“”为前缀十六进制立即数,在“”后加上“0 x”或“&”。二进制立即数,在“”后加上“%”。十进制立即数,在“”后加上“0d”或缺省。其它进制,在“”后加上“n_”,立即寻址-说明,3.2.1 立即寻址,立即寻址-实例2-上机验证,MOV R0,#0X0000F200;(1)MOV R
12、1,#0X00110000;(2)MOV R4,#0X00012800;(3),8000:E3A00CF2;(1)8004:E3A01811;(2)8008:E2A04B4A;(3),注:8位立即数不需要经过移位间接表示,而可以直接表示。,寄存器寻址,寄存器独立寻址寄存器移位寻址,3.2 ARM处理器寻址方式,格式:操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下:MOV R1,R2;将R2的值存入R1 SUB R0,R1,R2;将R1的值减去R2的值;结果保存到R0,MOV R1,R2,0 xAA,寄存器独立寻址-格式,3.
13、2.2 寄存器寻址,格式:,Rm,Rm:第二操作数寄存器;:移位类型(LSL,LSR,ASL,ASR,ROR或RRX)和移位位数(#rimm_5或Rs)。在指令执行时将移位后的内容作为第二操作数参与运算。但是,Rm保持不变。ADD R3,R2,R1,LSR#2;R3R2+R14,寄存器移位寻址-格式,3.2.2 寄存器寻址,移位位数为立即数:ADD R3,R2,R1,LSR#2;R3 R2+R14寄存器R1的内容逻辑右移2位(亦即R14),再与寄存器R2的内容相加,结果放入R3中。移位位数为寄存器:ADD R3,R2,R1,LSR R4;R3 R2+R12R4寄存器R1的内容逻辑右移R4位(亦
14、即R12R4),再与寄存器R2的内容相加,结果放入R3中。,寄存器移位寻址-实例,3.2.2 寄存器寻址,移位位数为立即数:MOV R1,#R1=R1-(R2/2R3),寄存器移位寻址-演示-练习,3.2.2 寄存器寻址,定义:寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下:LDR R0,R2;将R2指向的存储单元的数据读出;保存在R1中,寄存器间接寻址-格式,3.2.3 寄存器间接寻址,LDR R0,R2,0 xAA,定义:基址加偏移寻址又称变址寻址。基址加偏址寻址就是将基址寄存器
15、的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下:格式:base_reg,indexLDRR2,R3,#0 x0C;读R3+0 x0C地址上的存储单元,3.2.4 基址加偏址寻址,基址加偏址寻址-格式,LDR R2,R3,#0 x0C,0 xAA,将R3+0 x0C作为地址装载数据,分类:breg=Base Register偏移量模式:breg,indexLDR R0,R1,4;R0R14前变址模式:breg,index!LDR R0,R1,4!;R0R14,R1R14!表示自动变址后变址
16、模式:breg,indexLDR R0,R1,4;R0R1、R1R14说明:具有高优先级;Index是偏移地址称为偏址,基址加偏址寻址,基址加偏址寻址-分类,偏址-index格式:偏移地址是一个立即数LDR R0,R1,4;R0R14偏移地址是一个寄存器LDR R0,R1,R2;R0mem32R1+R2偏移地址是一个寄存器移位操作 LDR R0,R1,R2,LSL#2;R0R1+R2*4,基址加偏址寻址,基址加偏址寻址-偏址格式,偏移量ldr R0,R1,#4ldr R0,R1,R5ldr R0,R1,R5,LSL#&02前变址ldr R0,R1,#4!ldr R0,R1,R5!ldr R0,
17、R1,R5,LSL#&02!后变址ldr R0,R1,#4ldr R0,R1,R5ldr R0,R1,R5,LSL#&02,基址加偏址寻址,基址加偏址寻址-演示-练习,定义:堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”(First In Last Out,FILO)。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。,堆栈寻址,堆栈寻址-定义,分类1:根据增长方向不同,存储器堆栈可分为两种:向上增长:向高地址方向生长,称为递增堆栈(Ascending stack)向下增长:向低地址方向生长,称为递减堆栈(Desce
18、nding stack),堆栈寻址,堆栈寻址-分类,分类1:图示:,堆栈寻址,堆栈寻址-分类,栈底,栈顶,栈区,SP,0 x12345678,0 x12345678,高地址,低地址,分类2:根据堆栈指针指向的数据位置不同,存储器堆栈可分为两种:满堆栈(Full Stack):堆栈指针指向的单元含有有效数据;空堆栈(Empty Stack):堆栈指针指向单元含不有有效数据,但近邻有效数据单元;,堆栈寻址,堆栈寻址-分类,分类2:图示:,堆栈寻址,堆栈寻址-分类,0 x12345678,分类综合:满递增:堆栈向上增长,堆栈指针指向含有效数据的最高地址。指令如LDMFA、STMFA等;空递增:堆栈向
19、上增长,堆栈指针指向堆栈顶的第一个空位置。指令如LDMEA、STMEA等;满递减:堆栈向下增长,堆栈指针指向含有效数据的最低地址。指令如LDMFD、STMFD等;空递减:堆栈向下增长,堆栈指针指向堆栈顶的第一个空位置。指令如LDMED、STMED等。A=Ascend,D=Descend,堆栈寻址,堆栈寻址-分类,指令:,堆栈寻址,堆栈寻址-指令,实例1:,堆栈寻址,堆栈寻址-实例,STMEA R13!,R0,R1,R5,0X1000,0X100C,0X1018,R13,R13,0X1000,0X100C,0X1018,STMFA R13!,R0,R1,R5,R13,R13,实例2:,堆栈寻址,
20、堆栈寻址-实例,STMED R13!,R0,R1,R5,0X1000,0X100C,0X1018,R13,R13,0X1000,0X100C,0X1018,STMFD R13!,R0,R1,R5,R13,R13,实例2:stmfd SP!,R0-R3,LR;PUSHldmfd SP!,R4-R7,LR;POP,堆栈寻址,堆栈寻址-演示-练习,约定:大大小小编号小的寄存器在存储/加载数据时对应于存储器的小地址。也就是说,编号低的寄存器保存到堆栈的最低地址,或者从最低地址取数;反之,亦然!其次是其他寄存器按照寄存器编号的次序保存到第一个地址后面的相邻地址或从中取数。,堆栈寻址,堆栈寻址-约定,定义
21、:块拷贝寻址是多寄存器传送指令LDM/STM的寻址方式。LDM/STM指令可以把存储器中的一个数据块连续地加载到多个寄存器中,也可以把多个寄存器中的内容连续地保存到存储器中。寻址操作中的寄存器可以是R0-R15这16个寄存器的子集或是所有寄存器。,3.2.6 块拷贝寻址,块拷贝寻址-定义,分类:I=IncrementA=AfterD=DecrementB=Before,3.2.6 块拷贝寻址,块拷贝寻址-分类,指令:,3.2.6 块拷贝寻址,块拷贝寻址-指令,实例1:,3.2.6 块拷贝寻址,块拷贝寻址-实例,STMIA R9!,R0,R1,R5,0X1000,0X100C,0X1018,R9
22、,R9,0X1000,0X100C,0X1018,STMIB R9!,R0,R1,R5,R9,R9,实例2:,3.2.6 块拷贝寻址,块拷贝寻址-实例,STMDA R9!,R0,R1,R5,0X1000,0X100C,0X1018,R9,R9,0X1000,0X100C,0X1018,R9,R9,STMDB R9!,R0,R1,R5,约定:编号低的寄存器在存储数据或者加载数据时对应于存储器的低地址。也就是说,编号低的寄存器保存到存储器的最低地址或从最低地址取数;其次是其他寄存器按照寄存器编号的次序保存到第一个地址后面的相邻地址或从中取数。The registers are transferre
23、d in the order lowest to highest,so R15(if in the list)will always be transferred last.The lowest register also gets transferred to/from the lowest memory address.,3.2.6 块拷贝寻址,块拷贝寻址-约定,比较1:数据块传送指令和堆栈操作指令之间的关系如下:,3.2.6 块拷贝寻址,块拷贝寻址-比较,比较2:数据块传送指令和堆栈操作指令之间的关系如下:,3.2.6 块拷贝寻址,块拷贝寻址-比较,比较3:两段代码的执行结果是一样的,但
24、是使用堆栈指令的压栈和出栈操作编程很简单(只要前后一致即可),而使用数据块指令进行压栈和出栈操作则需要考虑空与满、加与减对应的问题。,3.2.6 块拷贝寻址,块拷贝寻址-比较,;使用块拷贝指令进行堆栈操作STMDAR0!,R5-R6.LDMIBR0!,R5-R6,;使用堆栈指令进行堆栈操作STMEDR0!,R5-R6.LDMEDR0!,R5-R6,实例:STMIA R0!,R1-R7;将R1R7的数据保存到存储器中。;存储指针在保存第一个值之后增加,;增长方向为向上增长。STMIB R0!,R1-R7;将R1R7的数据保存到存储器中。;存储指针在保存第一个值之前增加,;增长方向为向上增长。,3
25、.2.6 块拷贝寻址,块拷贝寻址-实例,练习1:下列指令实现功能:STMIA R1!,R5-R7 STMIB R1!,R5-R7STMDA R1!,R5-R7STMDB R1!,R5-R7,3.2.6 块拷贝寻址,块拷贝寻址-练习,练习1:数据块传送指令操作过程如右图所示,其中R1为指令执行前的基址寄存器,R1则为指令执行后的基址寄存器;绿箭头表示Reg存入存储器的顺序:低低高高;写出相应的指令:,3.2.6 块拷贝寻址,块拷贝寻址-练习,指令STMIA R1!,R5-R7,指令STMDA R1!,R5-R7,指令STMIB R1!,R5-R7,指令STMDB R1!,R5-R7,练习2:下列
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EMPUCh3 指令系统

链接地址:https://www.31ppt.com/p-6504988.html