欢迎来到天天文库
浏览记录
ID:65491937
大小:437.00 KB
页数:44页
时间:2022-01-09
《第3章 ARM指令集》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第三章ARM指令集3.1ARM指令集概述3.2ARM寻址方式3.3ARM指令详细介绍3.1ARM指令集概述ARM指令集是32位的,程序的启动都是从ARM指令集开始。所有的ARM指令集都可以是有条件执行的。本节从以下三个方面介绍:3.1.1指令集编码3.1.2条件执行3.1.3指令分类及指令格式3.1.1ARM指令集编码ARM指令集是以32位二进制编码的方式给出的,大部分的指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的二进制位。每条32位ARM指令都具有不同的二进制编码方
2、式,和不同的指令功能相对应。3.1.2条件执行ARM指令根据CPSR中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。在ARM的指令编码表中,统一占用编码的最高四位[31:28]来表示“条件码”(即“cond”)。条件域表1条件码后缀标志含义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数大于或等于0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零0110VSV置位溢出0111VCV清零未溢出条件域表2条件码后缀标志含义1001LSC清零Z置位无符号
3、数小于或等于1010GEN等于V带符号数大于或等于1011LTN不等于V带符号数小于1100GTZ清零且(N等于V)带符号数大于1101LEZ置位或(N不等于V)带符号数小于或等于1110AL忽略无条件执行3.1.3指令分类及指令格式ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。ARM指令使用的基本格式如下:〈opcode〉{〈cond〉}{S}〈Rd〉,〈Rn〉{,〈operand2〉}指令格式中符号说明opcode操作码;指令助记
4、符,如LDR、STR等。cond可选的条件码;执行条件,如EQ、NE等。S可选后缀;若指定“S”,则根据指令执行结果更新CPSR中的条件码。Rd目标寄存器。Rn存放第1操作数的寄存器。operand2第2个操作数3.2ARM寻址方式3.2.1立即寻址3.2.2寄存器寻址3.2.3寄存器间接寻址3.2.4基址加偏址寻址3.2.5堆栈寻址3.2.6块拷贝寻址3.2.7相对寻址3.2.1立即寻址立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数,对应的寻
5、址方式也就叫做立即寻址。例如以下指令:ADDR0,R0,#1/*R0←R0+1*/ADDR0,R0,#0x3f/*R0←R0+0x3f*/在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”。3.2.2寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令:ADDR0,R1,R2/*R0←R1+R2*/该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0
6、中。寄存器寻址第二操作数为寄存器型的移位操作在ARM指令的数据处理指令中参与操作的第二操作数为寄存器型时,在执行寄存器寻址操作时,可以选择是否对第二操作数进行移位,即Rm,{},其中Rm称为第二操作数寄存器,用来指定移位类型(LSL,LSR,ASL,ASR,ROR或RRX)和移位位数。移位位数可以是5位立即数(#<#shift>)或寄存器(Rs)。在指令执行时将移位后的内容作为第二操作数参与运算。例如指令:ADDR3,R2,R1,LSR#2;R3<—R2+R1÷4寄存器寻址第二操作数移位方式LS
7、L:逻辑左移,空出的最低有效位用0填充。LSR:逻辑右移,空出的最高有效位用0填充。ASL:算术左移,由于左移空出的有效位用0填充,因此它与LSL同义。ASR:算术右移,算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有效位用0填充,如果是负数用1填充。ROR:循环右移,移出的字的最低有效位依次填入空出的最高有效位。RRX:带扩展的循环右移。将寄存器的内容循环右移1位,空位用原来C标志位填充。寄存器寻址寄存器寻址第二操作数的移位位数移位位数可以用立即数方式或者寄存器方式给出,如下
8、所示:ADDR3,R2,R1,LSR#2;R3<—R2+R1÷4ADDR3,R2,R1,LSRR4;R3<—R2+R1÷2R4寄存器R1的内容分别逻辑右移2位、R4位(亦即R1÷4、R1÷2R4),再与寄存器R2的内容相加,结果放入R3中。3.2.3寄存器间接寻址寄存器间接寻址就是以寄存器中的值作为操作
此文档下载收益归作者所有