第2章 ARM微处理器的指令系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

共161页11第2章ARM微处理器的指令系统6学时本章的主要内容1、ARM处理器的寻址方式;2、ARM处理器的指令集。本章教学要求掌握ARM的寻址方式、ARM指令系统。共161页222.1ARM处理器的寻址方式操作数总是被存放在指令、寄存器或存储器这三个地方。ARM指令的寻址方式分为数据处理寻址方式和内存访问指令寻址方式。2.1.1数据处理指令寻址方式数据处理指令的基本语法格式如下:opcode{condition}{s}Rd,Rn,shifter_operand共161页33其中,shifter_operand有11种形式:序号语法寻址方式1#immediate立即数寻址2Rm寄存器寻址3Rm,LSL#shift_imm立即数逻辑左移4Rm,LSLRs寄存器逻辑左移5Rm,LSR#shift_imm立即数逻辑右移6Rm,LSRRs寄存器逻辑右移7Rm,ASR#shift_imm立即数算术右移8Rm,ASRRs寄存器算术右移9Rm,ROR#shift_imm立即数循环右移10Rm,RORRs寄存器循环右移11Rm,RRX寄存器扩展循环右移共161页44数据处理指令寻址方式可以分为以下几种:(1)立即数寻址方式;(2)寄存器寻址方式;(3)寄存器移位寻址方式。1、立即数寻址方式在指令中直接提供操作数的方式叫做立即数寻址方式,被提供的操作数叫做立即数。共161页55在ARM指令中,必须用前缀“#”来表示一个立即数。ADDR0,R1,#4;R0←(R1)+4立即数可以用十六进制、二进制或十进制,在立即数的前面加上“0x”、“0b”、“0d”,缺省为十进制。ADDR0,R1,#0x3F;R0←(R1)+0x3FADDR0,R1,#4;R0←(R1)+4共161页66但立即数的使用是有限制的,具体如下:共161页77下面列出了一些有效的立即数:0xFF、0x104、0xFF0、0xFF00、0xFF000000、0xF000000F。下面列出了一些无效的立即数:0x101、0x102、0xFF1、0xFF04、0xFF003、0xFFFFFFFF、0xF000001F。共161页882、寄存器寻址方式指令用操作数所在的寄存器名称来提供操作数的方式叫做寄存器寻址。ADDR0,R1,R2;R0←(R1)+(R2)3、寄存器移位寻址方式寄存器的值在被传送到ALU之前,可以事先经过桶形移位寄存器的处理。预处理和移位发生在同一周期内,所以有效的使用移位寄存器可以增加代码的执行效率。共161页99桶式移位寄存器结构:共161页1010优点:移位操作的速度快,且移位操作所耗费的时间与移动的位数无关。ADDR2,R0,R1,LSR#5MOVR1,R0,LSR#2MOVR2,R4,RORR0共161页11112.1.2内存访问指令寻址方式内存访问指令的寻址方式可以分为以下几种:(1)字及无符号字节的Load/Store指令的寻址方式;(2)杂类Load/Store指令的寻址方式;(3)批量Load/Store指令的寻址方式;(4)协处理器Load/Store指令的寻址方式。共161页12121、字及无符号字节的Load/Store指令的寻址方式字及无符号字节的Load/Store指令语法格式如下:LDR|STRcond{B}{T}Rd,addressing_mode其中,addressing_mode共有9种寻址方式,具体如下:共161页1313序号语法寻址方式1[Rn,#±offset_12]立即数偏移寻址2[Rn,±Rm]寄存器偏移寻址3[Rn,Rm,shift#offset_12]带移位的寄存器偏移寻址4[Rn,#±offset_12]!立即数前索引寻址5[Rn,±Rm]!寄存器前索引寻址6[Rn,Rm,shift#offset_12]!带移位寄存器的前索引寻址7[Rn],#±offset_12立即数后索引寻址8[Rn],±[Rm]寄存器后索引寻址9[Rn],±Rm,shift#offset_12带移位的寄存器后索引寻址上表中,“!”表示完成数据传输后要更新基址寄存器。共161页14142、杂类Load/Store指令的寻址方式使用该类寻址方式的指令的语法格式如下:LDR|STR{cond}H|SH|SB|BRd,addressing_mode使用该类寻址方式的指令包括(有符号/无符号)半字Load/Store指令、有符号字节Load/Store指令和双字Load/Store指令。共161页1515序号语法寻址方式1[Rn,#±offset_8]立即数偏移寻址2[Rn,±Rm]寄存器偏移寻址3[Rn,#±offset_8]!立即数前索引寻址4[Rn,±Rm]!寄存器前索引寻址5[Rn],#±offset_8立即数后索引寻址6[Rn],±Rm寄存器后索引寻址杂类Load/Store指令的寻址方式如下:说明:在keill中LDR带符号可以,但STR带符号不行。共161页16163、批量Load/Store指令的寻址方式批量Load/Store指令将一片连续内存单元的数据加载到通用寄存器组中,或反过来。批量Load/Store指令的寻址模式产生一个内存单元的地址范围,指令寄存器和内存单元的对应关系满足这样的规则:即编号低的寄存器对应于内存中的低地址单元,编号高的寄存器对应于内存单元中高地址单元。共161页1717该类指令的语法格式如下:LDM|STM{cond}address_modeRn{!},registers^该类指令的寻址方式如下:序号语法寻址方式1IA(IncrementAfter)后递增方式2IB(IncrementBefore)先递增方式3DA(DecrementAfter)后递减方式4DB(DecrementBefore)先递减方式共161页18184、堆栈操作寻址方式堆栈操作寻址方式和批量Load/Store指令寻址方式十分类似。但对于堆栈的操作,数据写入内存和从内存中读出要使用不同的寻址模式,因为进栈和出栈操作要在不同的方向上调整堆栈。共161页1919(1)Full栈:堆栈指针指向栈顶元素;(2)Empty栈:堆栈指针指向第一个可用元素;(3)递减栈:堆栈向内存地址减少的方向生成;(4)递增栈:堆栈向内存地址增加的方向生成。根据不同的寻址方式,将堆栈分为以下4种:共161页2020根据堆栈的不同种类,将其寻址方式分为以下4种:(1)满递减FD(FullDescending);(2)空递减ED(EmptyDescending);(3)满递增FA(FullAscending);(4)空递增FA(EmptyAscending);共161页2121批量数据寻址方式堆栈寻址方式L位(存/取)P位(前变址/后变址)U位(加/减)LDMDALDMFA100LDMIALDMFD101LDMDBLDMEA110LDMIBLDMED111STMDASTMED000STMIASTMEA001STMDBSTMFD010STMIBSTMFA011下表是堆栈寻址方式和批量Load/Store指令寻址方式对应关系:共161页225、协处理器Load/Store寻址方式opcode{cond}{L}coproc,CRd,addressing_mode共161页23232.2ARM处理器的指令集2.2.1数据操作指令数据操作指令是指对存放在寄存器中的数据进行操作的指令。主要包括:数据传送指令、算术指令、逻辑指令、比较与测试指令、乘法指令。如果在数据操作指令中使用S前缀,指令的执行结果将会影响CPSR的标志位。共161页2424助记符操作行为MOV数据传送MVN数据取反传送AND逻辑与Rd=RnANDop2EOR逻辑异或Rd=RnEORop2SUB减Rd=Rn–op2RSB翻转减Rd=op2–RnADD加Rd=Rn+op2ADC带进位的加Rd=Rn+op2+CSBC带进位的减Rd=Rn–op2+C-1RSC带进位的翻转减Rd=op2-Rn+C-1TST测试RnANDop2并更新标志TEQ测试相等RnEORop2并更新标志CMP比较Rn-op2并更新标志CMN负数比较Rn+op2并更新标志ORR逻辑或Rd=RnORop2BIC位清0Rd=RbANDNOT(op2)共161页25251、MOV指令MOV指令将一个数N送到目标寄存器Rd,其中N可以是寄存器,也可以是立即数。MOV指令的格式为:MOV{cond}{S}Rd,operand2共161页26MOV指令的执行流程:共161页2727例:MOVR2,#0x7E;将立即数0x7E传送到寄存器R2中MOVR1,R0,LSL#3;将寄存器R0*8传送到寄存器R1受影响的CPSR标志位取值N寄存器Rd[31]被复制到NZ如果Rd为0,则Z=1,否则Z=0CC=0共161页28282、MVN指令MVN指令的格式为:MVN{cond}{S}Rd,operand2MVN指令在进行数据传送之前,先把源操作数operand2按位取反,然后再传送到目的寄存器Rd。MVNR0,#0;将立即数0取反传送到寄存器R0中,完成后R0=-1。标志修改同MOV指令,只修改N、Z、C。共161页29293、AND指令AND指令的格式为:AND{cond}{S}Rd,Rn,operand2AND指令把Rn和operand2按位进行逻辑“与”运算,并把结果存入Rd。共161页3030AND指令执行流程:共161页3131例:ANDR0,R0,#3;该指令保持R0的0、1位,其余位清零受影响的CPSR标志位取值N寄存器Rd[31]被复制到NZ如果Rd为0则Z=1,否则Z=0CC=0共161页32324、EOR指令EOR指令的格式为:EOR{cond}{S}Rd,Rn,operand2EOR指令把Rn和operand2按位进行逻辑“异或”运算,并把结果存入Rd。EORR0,R0,#3;该指令反转R0的0、1位,其余位保持不变。标志位的修改同AND。共161页33335、SUB指令SUB指令的格式为:SUB{cond}{S}Rd,Rn,operand2SUB指令把Rn作为被减数,operand2作为减数进行减法运算,然后将结果存放在Rd。operand2可以是寄存器寻址方式、立即寻址方式、带移位预处理的寄存器寻址方式。共161页3434SUB的执行流程为:共161页3535SUBR0,R1,R2;R0←(R1)-(R2)SUBR0,R1,#256;R0←(R1)-256SUBR0,R2,R3,LSL#1;R0←(R2)-(R31)受影响的CPSR标志位取值N寄存器Rd[31]被复制到NZ如果Rd为0则Z=1,否则Z=0C运算结果有借位则C=0,否则C=1V运算结果有溢出则V=1,否则V=0例:共161页36366、RSB指令RSB指令的格式为:RSB{cond}{S}Rd,Rn,operand2RSB指令之所以被称为逆向减法指令,是因为该指令把operand2作为被减数,而把Rn作为减数来进行减法运算,运算结果仍然被存入Rd。共161页3737RSBR0,R1,R2;R0←(R2)-(R1)RSBR0,R1,#256;R0←256-(R1)RSBR0,R2,R3,LSL#1;R0←(R31)-(R2)例子:共161页38387、ADD指令加法指令ADD的格式为:ADD{cond}{S}Rd,Rn,operand2ADD指令把第1源操作数Rn和第2源操作数operand2相加后,将结果存放到目的操作数Rd。Rn为寄存器寻址;operand2可以为寄存器寻址、立即寻址、带移位预处理的寄存器寻址。共161页3939AD

1 / 161
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功