第三章 arm指令的特点和寻址方式。
所有计算机的操作都是按照指令的要求进行操作的。指令应包含如下的信息:
1)指明计算机的有关部件执行什么操作;
2)指明参加操作的是什么数;
3)指明这些操作数存放的位置,以及通过什么方式才能找到它们;
4)指明后继指令从**取出。
一条指令通常由两部分组成:一部分是操作码,指明计算机应该执行操作的功能和性质;另一部分是地址码(也称为操作数)指出数据存放的位置,即操作数的地址。
一台计算机有许多条指令构成,计算机指令的集合称为计算机的指令系统。计算机的体系结构决定指令系统的特点,也决定计算机的数据处理能力。
3.1 arm指令特点。
arm内核的处理器属于risc结构,其指令长度固定,指令格式的种类少,寻址方式简单;arm处理器采用固定长度的指令,因此处理器内部硬件设计能够被简化;指令译码采用硬布线逻辑,不使用微程序控制,以减少指令的译码时间,大部分指令在一个时钟周期内完成。
按指令的功能分,arm指令集可分为六类:分支指令、数据处理指令、程序状态寄存器、load/store指令、协处理器指令、异常中断指令。其中,数据处理指令包括:
数据传输、算术逻辑运算和比较;算术逻辑运算类又可以分为位逻辑、算术操作、寄存器传送。
按照操作数的特点,arm指令可以分为无操作数指令、单操作数指令、双操作指令和三操作数指令。每条指令由操作码域、条件码域、条件码设置域、目标操作数、第一操作数寄存器和第二操作数组成。通常一条典型的arm指令表示为:
{},主要作用是:
1)操作码域是指令编码的助记符;
2)条件码域是指令允许执行的条件编码。arm 处理器的一个非常重要的特征是它的条件执行。每一条arm指令的可选条件码域cond包含4位的条件码,共有16种,每种条件码用两个字符表示,这两个字符应添加在指令助记符的后面和指令同时使用。
当处理器工作在arm状态时,几乎所有的指令均根据cpsr中条件码的状态和指令的条件域的设置有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。指令条件码表示参见表3.
1。插入条件**通常紧随在助记符**后面;省略条件**缺省为使用 al,条件 gt、ge、lt、le 是有符号比较,而 hs、hi、ls、lo 被称为无符号比较。
3)条件码设置域是一个可选择域。当在指令中设置域时,导致更改程序状态寄存器cpsr中的状态标志。在含有条件执行的指令中,由于条件不符,指令没有执行,不更改cpsr中的状态标志。
例如:addeqs r0, r0, r1;有条件的指令相加,更改状态寄存器。只有前一个操作的结果是 z=1 (如果设置了 z 位)的时候它才执行。例如:
add r1, r2, r3 ;基本的加法(r2与r3 的和放到 r0中),不影响状态寄存器。
adds r1, r2, r3 ;它导致更改状态寄存器。
addeqs r1, r2, r3 ;条件执行的指令更改状态寄存器。
4)在arm指令中目标操作数总是一个寄存器,通常表示为。即便目标操作数与第一操作数是同一个寄存器,在指令中也必须指明目标操作数。
5)< rn >表示第一操作数寄存器。在指令中通常使用arm的通用寄存器。
6)是指令的第二操作数。在arm的指令中,第二操作数在使用中是非常灵活的。由于arm在结构上具有桶型移位寄存器,第二操作数不仅能使用寄存器,还能使用立即数,更重要的是能够使用经过移位运算后的寄存器或立即数。
arm桶型移位结构提高了指令编码效率和指令执行效率。
表2.1 指令的条件码域。
3.2 arm指令的寻址方式。
寻址方式与处理器的结构密切相关,与指令格式和指令功能密切相关。通常来讲寻址方式是确定本条指令数据地址以及下一条要执行指令的地址的方法。arm指令的基本寻址方式包括9种方式,它们是:
立即寻址。
寄存器寻址。
间接寻址。
基址寻址。
相对寻址。
移位寻址(寄存器/立即数)
多寄存器寻址。
堆栈寻址。
块拷贝寻址。
下面详细介绍寻址方式。
1. 立即寻址。
立即寻址也称作立即数寻址,这种寻址方式的操作数由指令的地址部分直接给出。
指令中在操作码字段后面的地址码部分不是操作数地址,而是操作数本身,操作数本身就在指令中给出,只要取出指令也就取到了操作数。arm的指令长度统一是32位二进制,立即数包括在一条指令的32位长度之内。arm规定立即数在指令中的表示长度为8位二进制,数值在0和0xff之间。
但是经过移位寻址后,可以表示大于255的数,如:
add r4,r3,#1r4 :=r3 + 1;
and r8,r7,#0xff ; r8 :=r7[7:0]
立即数在表示上应以“#”为前缀。十六进制值在“#”后加“0x”或“&”
2.寄存器寻址。
arm处理器内有多个32位通用寄存器,当操作数是通用寄存器中的数值时,这种寻址方式称作寄存器寻址方式。
在arm指令中,运算需要的数值在寄存器中,寄存器编号由指令的地址码部分给出,寄存器的内容即为操作数,如:
add r0,r1,r2r0 :=r1+r2
sub r0,r1,r2r0 :=r1-r2
3.间接寻址。
指令中的地址码给出某一通用寄存器编号是操作数的地址,即寄存器中的值是操作数的地址,这种寻址方式称作寄存器间接寻址。在指定寄存器中存放操作数的有效地址,而操作数则存放在存储单元中,寄存器为地址指针。如:
ldr r0,[r1r0 :=r1]
str r0,[r1r1] :r0
add r0,r1,[r2];r0 :=r1+[r2]
4.基址寻址。
将指令中给出的基址寄存器内容与指令中给出偏移量disp相加,其结果作为有效地址,从存储器中读出操作数,这种寻址方式称作基址寻址。在arm指令系统中,偏移量disp不得超过4kb。
arm的基址寻址包括前索引寻址和后索引寻址两种方式。前索引寻址是将基址与偏移量相加作为传送数据的地址,如在寻址中使用“!”符号,传送数据后自动将数据的地址传送给基址寄存器,否则不修改基址寄存器。
ldr r0,[r1,#4] ;r0←[r1+4]
ldr r0,[r1,#4]! r0←[r1+4],r1←r1+4
后索引寻址是将基址作为传送数据的地址,传送数据后自动将基址的内容与偏移量相加传送给基址寄存器。
ldr r0,[r1] ,4 ;r0←[r1],r1←r1+4
5.相对寻址。
程序计数器pc的内容与指令中的地址码部分给出的位移量disp之和作为操作数的有效地址,这种寻址方式称为相对寻址。
相对寻址是基址寻址的一种变通,与基址变址寻址方式相类似,基地址由程序计数器pc提供,指令中的地址码字段作为位移量,两者相加后得到操作数的有效地址。位移量指出的是操作数与现行指令之间的相对位置。如:
bl subr1转移到subr1
subr1子程序入口地址。
mov pc,r14返回。
6.移位寻址
移位寻址方式是arm指令集特有的。arm微处理器内核含有桶型移位器(barrel shifter),移位寻址方式包括寄存器型移位寻址和立即数型移位寻址。
在arm指令集中, 相当一部分指令采用3操作数指令,分别是结果寄存器、第1操作数寄存器、第2操作数寄存器。
如果第2操作数或者单一数据传送指令中操作数是寄存器类型,可以对其进行各种移位操作,形成操作数,然后与第1个操作数运算,称作寄存器型移位寻址。如:
add r3,r2,r1,lsl #4 ;r3 :=r2+24*r1
如果数据处理指令的第二个操作数是立即数(在指令中最多使用8位立即值),对超过表示范围的立即数,即对大于 255 的立即数,可以通过立即数的移位来表示,称作立即数型移位寻址。如:
add r3,r2,#8,lsl r4 ;r3 :=r2+8r4
立即数操作数的移位域是一个4bit无符号整数,它表示8位立即数的移位操作位数。第二个操作数的值由8位立即数无符号扩展至32位,然后右移移位域数值乘以2的位数得到。
在单一数据传送指令中指定的移位数只能用立即值而不能存放在寄存器中。当立即数值在0和0xff之间时候,令immed_8=,rotate_imm=0;汇编器需要通过在指令中设置循环移位数量来表示立即数。如果不能表示,则生成一个错误。
数据处理指令(adc、add、and、bic、cmn、cmp、eor、mov、mvn、orr、rsb、sbc、sub、teq、tst)可以使用的桶型移位器(barrel shifter)。使用桶型移位器还可以影响在 ldr/str 操作中的变址值。
这些移位寻址方式包括如下六种:
asl ( arithmetic shift left)和lsl是等价的,可以任意互换;
asr (arithmetic shift right)算术右移。对象为带符号数;
lsl (logical shift left) 逻辑左移;
lsr (logical shift right) 逻辑右移;
ror (rotate right) 循环右移;
ARM3汇编指令
16位数据操作指令。名字功能。adc 带进位加法 add with carry add 加法。and 按位与。这里的按位与和c的 功能相同。asr 算术右移 arithmetic shift right bic 按位清零 把一个数跟另一个无符号数的反码按位与 cmn 负向比较 把一个数跟另一个数据的...
年五年级语文上册寻隐者不遇3教案苏教版
2019 2020年五年级语文上册寻隐者不遇3教案苏教版。设计思路 古诗字句凝练传神,意蕴深远悠长,教学中要让学生反复诵读,认真品味,用心揣摩细心领悟诗中蕴含的浓浓情思,同时让学生学会在质疑 交流中自主学习古诗的方法。教学内容 苏教版义务教育课程标准实验教科书语文第九册第3课 古诗两首 第一课时教学...
五年级语文教案 3寻隐者不遇教学设计
3寻隐者不遇教学设计。五年级语文教案教学目标 1 理解了诗意,能有感情地背诵这首诗。2 了解到贾岛是唐朝著名的 苦吟 诗人。3 能通过诗句体会作者的心情。4 领会到了这首诗 寓问于答 的特色。5 能根据诗意,发挥想像,编出一个有趣的故事。教学重点 有感情地朗读 背诵这首诗,体会作者的心情,能根据诗意...