讲稿-05 ARM指令系统介绍下
ARM指令系统
ARM指令集介绍 指令集介绍
■ ARM指令集 指令集——第2个操作数 指令集 第 个操作数 #Rm,shift——寄存器移位方式 寄存器移位方式 将寄存器 寄存器的移位结果作为操作数(移位操作不消耗 寄存器 额外的时间),但寄存器 寄存器Rm值保持不变,移位方 寄存器 法如下:
操作码 ASR #n LSL #n LSR #n 算术右移n位 逻辑左移n位 逻辑右移n位 说明 操作码 ROR #n RRX Type Rs 循环右移n位 带扩展的循环右移1位 Type为移位的一种类型,Rs为偏移 量寄存器,低8位有效。 说明
0x00
0x00
0x7F
0x02
经检验0x7f00,0x02均为合法立即数 均为合法立即数 经检验
ARM指令集介绍 指令集介绍
■
放到寄存器R1中的步骤 中的步骤: 将0x7f02 放到寄存器 中的步骤:
1、MOV R3, #0x7F00 2、 ORR R1, R3, #2 、 、
立即 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0x00 0x00 0x7F 0x00 数
ARM指令长度概述 指令长度概述
– 指令集可以是以下任一种 32 bits 长 (ARM状态)
16 bits 长 (Thumb 状态)
– ARM7TDMI及以上版本 ARM7TDMI及以上版本
支持3 支持3种数据类型
字节 (8-bit) 半字 (16-bit) 字 (32-bit) – 字必须被排成4个字节边界对齐,半字必须被排列成 字必须被排成4个字节边界对齐, 2个字节边界对齐
00 R1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0xFF 0xFF 0xFF 0xFD 0xFE 0xFF 11111111111111111111111111111100 LSL #2 0xFF 0xFF 0xFF 0xFD MOV R3 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 0xXX 0xXX 0xXX 0xXX
第三章 ARM指令系统简介
(1).寄存器寻址
操作数的值在寄存器中,指令中的地址码字段指出
的是寄存器编号,指令执行时直接取出寄存器值来操
作。
寄存器寻址指令举例如下: R2 0xAA MOV R1,R2 ;将R2的值存入R1 R1 0xAA 0x55 SUB R0,R1,R2 ;将R1的值减去R2的值,结果保存到R0 MOV R1,R2
第三章 ARM指令系统简介
3.1 ARM处理器寻址方式
寻址方式是根据指令中给出的地址码字段来实现寻 找真实操作数地址的方式。ARM处理器具有9种基本寻址 方式。
(1).寄存器寻址;
(2).立即寻址;
(3).寄存器偏移寻址; (4).寄存器间接寻址; (5).基址寻址; (7).堆栈寻址; (9).相对寻址。 (6).多寄存器寻址; (8).块拷贝寻址;
STMFD sp!,{r4-r7,lr} 满递减
9753 8420 1234 1010 8034 FFFF A0BE 16 1234 102E 8765 FF ABCD 100
LDMFA sp!,{r4-r7,pc}
高地址
满递增
9753 8420 1234 1010 8034 A0BE AOBE 1234 FF 100 pc lr 9020 8034 9048
operand2:第2个操作数;
指令格式举例如下:
LDR BEQ ADDS
R0,[R1] D1
;读取R1地址上的存储器单元内容, ;执行条件AL ;分支指令,执行条件EQ,即相等则跳转到D1 ;加法指令,R1+1=>R1,影响CPSR ;寄存器(S) ;条件执行减法运算(NE), ;R1-0x10=>R1,影响CPSR寄存器(S)
第5-1章 ARM指令系统
第5章ARM指令系统、汇编程序设计与PXA270处理器简介5.1ARM指令系统5.2 ARM汇编程序设计5.3 PXA270处理器简介ARM微处理器的指令系统◆ARM指令的寻址方式◆ARM微处理器的指令集概述◆ARM指令集◆Thumb指令集简介及应用场合根据指令中给出的地址码字段寻找真实操作数地址的方式。
ARM处理器支持的寻址方式有:◆立即寻址◆寄存器寻址◆寄存器移位寻址◆寄存器间接寻址◆基址寻址◆多寄存器寻址◆堆栈寻址◆块拷贝寻址◆相对寻址立即寻址操作数本身在指令中给出,只要取出指令也就取到了操作数。
这个操作数被称为立即数ADD R0,R0,#1;R0←R0+1AND R8,R7,#0xFF;R8←R7[7:0]ADD R0,R0,#&3f;R0←R0+0x3f立即数要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”或“&”寄存器寻址寄存器中的数值作为操作数ADD R0,R1,R2;R0←R1+R2ARM指令的寻址方式寄存器移位寻址ARM集特有。
第二个操作数先进行移位操作。
ADD R3,R2,R1,LSL #3;R3←R2+8*R1LSL:逻辑左移(Logical Shift Left)LSR:逻辑右移(Logical Shift Right)ASR:算术右移(Arithmetic Shift Right)ROR:循环右移(Rotate Right)RRX:扩展为1的循环右移(Rotate Right eXtended by 1 place )0LSLLSRASRRORARM指令的寻址方式寄存器间接寻址以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中LDR R0,[R1];R0←[R1]STR R0,[R1];[R1]←R0ARM指令的寻址方式基址寻址将基址寄存器的内容与指令中给出的地址偏移量相加,形成操作数的有效地址。
基址寻址常用于访问基地址附近的存储单元。
arm指令系统
6.3.2 数据处理指令
2、 MVN指令 MVN指令的格式为: MVN{条件}{S} 目的寄存器,源操作数 MVN指令可完成从另一个寄存器、被移位的寄存器、或将一个 立即数加载到目的寄存器。 与MOV指令不同之处是在传送之前按位被取反了,即把一个被 取反的值传送到目的寄存器中。其中S决定指令的操作是否影响 CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标 志位的值。 MVN R0,#0 ;将立即数0取反传送到寄存器R0中,完成后R0=-1 R0=R0=
6.3.1 跳转指令
2、BL指令 、 指令
格式: BL{条件} 目标地址 BL在跳转之前,会在寄存器R14中保存PC的当前内容,因 此,可以通过将R14 的内容重新加载到PC中,来返回到跳 转指令之后的那个指令处执行。 该指令是实现子程序调用的一个基本但常用的手段。 BL Label ;当程序无条件跳转到标号Label处执行时,同时将当前的 PC值保存到R14中
6.2.4 基址变址寻址
LDR R0,[R1] ,# ;R0←[R1]、R1←R1+4 ,#4 , 、 + 在第三条指令中,以寄存器R1的内容作为操作数的有效地址, 从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字 节。 LDR R0,[R1,R2] ;R0←[R1+R2] , , + 在第四条指令中,将寄存器R1的内容加上寄存器R2的内容形 成操作数的有效地址,从而取得操作数存入寄存器R0中。 LDR R0,[R1,# ! ;R0←[R1+4]、R1←R1+4 , ,#4]! + 、 + ,# 在第二条指令中,将寄存器R1的内容加上4形成操作数的有效 地址,从而取得操作数存入寄存器R0中,然后,R1的内容自 增4个字节。 “!”表明指令在完成数据传送后应该更新基址 寄存器。
ARM指令系统
ARM指令系统.txt蜜蜂整日忙碌,受到赞扬;蚊子不停奔波,人见人打。
多么忙不重要,为什么忙才重要。
1.ARM指令的寻址方式有几种?试分别举例说明。
答:立即数寻址:MOV R0,#15寄存器寻址:ADD R0,R1,R2寄存器间接寻址:LDR R0,[R4]寄存器移位寻址:ADD R0,R1,R2,LSL #1基址变址寻址:LDR R0,[R1,#4]多寄存器寻址:LDMIA R0!,{R1-R4}相对寻址:BL proc;跳转到子程序proc处执行…proc MOV R0,#1堆栈寻址:STMFD R13!,{R0-R4};LDMFD R13!,{R0-R4};2.ARM指令系统对字节、半字、字的存取是如何实现的?LDR/STR字数据加载/存储指令LDRB/STRB字节数据加载/存储指令LDRH/STRH半字数据加载/存储指令LDRSB/LDRSH有符号数字节/半字加载指令3.如何从ARM指令集跳转到Thumb指令集?BX指令跳转到指令中所指定的目标地址,并实现状态的切换。
Rm是一个表达目标地址的寄存器。
当Rm中的最低位Rm[0]为1时,强制程序从ARM指令状态跳到Thumb指令状态;当Rm中的最低位Rm[0]为0时,强制程序从Thumb指令状态跳到ARM指令状态。
4.ARM指令集支持哪几种协处理器指令?CDP LDC STC MCR MRC5.ARM指令的条件码有多少个?默认条件码是什么?15个默认条件码是AL6.ARM指令中的第二操作数有哪几种形式?试举例说明。
寄存器形式MOV R1,R0;将寄存器R0的值传送到寄存器R1立即数形式MOV R0,#5;将立即数5传送到寄存器R0被移位的寄存器形式MOV R1,R0,LSL#37.MOV指令与LDR指令有何区别?LDR指令用于在存储器和处理器的寄存器之间传送数据MOV主要用于将一个寄存器中的数据传送到另一个寄存器,或者将一个立即数传送到寄存器,8.判断下列指令正误,并说明理由?(1)LDR R3,[R4]!(2)ADD R6,R5,#4!(3)LDMIA R6,{R3-R7}!(4)LDMFD R13!,{R2,R4}(5)ADD R1,R2,#0x104(6)ADD R1,R2,#0x101(7)MOV R0,R0(8)MVN R7,#0x2F100(9)MVN R0,R3,#2_011100(10)SBC R15,R6,LSR R5(11)AND R5,[R6],R7(12)MRS R15,CPSR(13)MSR CPSR,#0x001(14)MUL R3,R3,R6(15)MUL R4,R6,#0x80(16)STRB SP![R0,R4](17)LDRB R1,[R6,R4],R6(18)STRB R0,[R15,#0x04]!(19)LDRB PC,[R5](20)LDRSB R5,[R4,#0x101](21)STRSH R6,[R5]9.下列指令在什么条件下被执行SUBMI R3,R3,#0x08负数ADDNE R0,R0,R4不等10.下列两段代码是用来实现打开中断和关闭中断,请补齐空白处内容MRS R1,CPSRBIC R0,R1,__ #0x80MSR CPSR_c,R0MRS R1,CPSRORR R1,___MSR CPSR_c,R111.举例说明B和BL指令的区别、BX和BLX的区别?B指令示例:backword SUB Rl,R1,#1CMP R1,#0;比较R1和0BEQ forward;如果R1=0则跳转到forward处执行SUB R1,R2,#3SUB R1,R1,#1forward ADD R1,R2,#4ADD R2,R3,#2B backword;程序无条件跳转到标号backword处执行BL指令示例…BL func;跳转到子程序ADD R1,R2,#2;子程序调用完返回后执行的语句,返回地址…func;子程序…;子程序代码MOV R15,R14;复制返回地址到PC,实现子程序的返回BX指令示例CODE32;ARM程序段,32位编码arm1 ADR R0,thumb1+1;伪指令,把语句标号thumb1所在的地址赋;给R0,末位R0[0]置1,要跳转到THUMB指令集MOV LR,PC;设置返回地址BX R0;跳转ADD R1,R2,#2;返回地址处,第4条指令CODE16;THUMB程序段,16位编码thumb1 ADD R1,R3,#1;THUMB程序…BX LR;跳转到返回地址处,执行第4条指令BLX指令示例CODE32;ARM程序段,32位编码arm1 ADR R0,thumb1+1;伪指令,把语句标号thumb1所在的地址赋;给R0,末位R0[0]置1,要跳转到THUMB指令集;MOV LR,PC;该指令注销,比较BL指令BLX R0;跳转,同时设置返回地址即PC?LRADD R1,R2,#2;返回地址处,第4条指令CODE16;THUMB程序段,16位编码thumb1 ADD R1,R3,#1;THUMB程序…BX LR;跳转到返回地址处,执行第4条指令分析:使用BLX指令代替BX指令简化了Thumb例程的调用,因为BLX指令在连接寄存器LR中自动设置了返回地址。
ARM指令系统
BCS
LABEL2
ARM指令系统 ARM指令系统
跳转指令 跳转指令 – BL
• BL 指令的格式为 BL {条件} 目的地址 – BL 除 转移程序控制权外,同时也将程序顺序执行的下一个地址值 保存在链接寄存器(LR)中,可用于子程序的调用。 – 子程序距离当前 PC 的范围与指令B是一样:+ – 32MB – 当子程序执行完毕后,可将链接寄存器(LR)的值写回PC中,实现 子程序的返回。 BL SUB1 ; 无条件调用子程序SUB1,同时 将顺序执 ;行的下一地址值保存到R14中 . SUB1 ; 子程序入口点 . MOV PC, LR ; 子程序返回 7
ARM指令系统 ARM指令系统
ARM指令系统 ARM指令系统
1、ARM指令分类 ARM指令分类
分类指令 数据处理 数据传送 指令列举
ADD、ADC、SUB、RSB、SBC; MOV、MVN; AND、ORR、EOR、BIC;CMP、CMN;TST、TEQ; MUL、MLA、UMULL、UMLAL、SMULL、SMLAL
ARM指令系统 ARM指令系统
跳转指令 跳转指令 – BX
• BX 指令的格式为 BX {条件} 目的地址 – BX 将寄存器<Rm> 的数值复制至 PC 中,以达到转移程序控制权; – 根据寄存器 <Rm> 的最低位 <Rm>[0] 来变更指令集状态,<Rm>[0]为 1,则变更为THUMB 指令集状态。<Rm>[0] 为0,则变更为 ARM 指 令集状态。 – 此指令可将程序控制权转移到 4GB范围内的任意一地址上。 CODE 32 ; 从此处起程序以 ARM 指令集编译 . BX R0 ; ˆ R0[31:1] 为地址 LABEL1,R0[0]为1,跳转到 LABEL1处执行,并切换指令集状态为THUMB指令集 . CODE 16 ; 指示从此处起为THUMB 指令集状态 LABEL1 ;LABEL1程序入口点 . 8
嵌入式第05讲ARM指令系统1PPT课件
SUBS R0,R0,#1
;R0减1,结果从放代入码R0中,并获且得影数响标据志位
MOV R0,#0xRF0F0000x0Fx;5F将50立0即数0xFF000装入R0寄存器
MOV R0,#0xFF00
7
1 ARM处理器寻址方式
寻址方式分类——寄存器移位寻址
寄存器移位寻址是ARM指令集特有的寻址方式。 当第2个操作数是寄存器移位方式时,第2个寄存器 操作数在与第1个操作数结合之前,选择进行移位操 作。寄存器移位寻址指令逻举辑例左如移下3位:
MOV ANDS
R0,R2,RL2SL #30x01 ;R2的值左移03x位0,8 结果放入R0, R0 0x5058 ;即是R0=R2×8
R1,R1,R2,LSL R3 ;R2的 值 左移 R3 位, 然 后和 R1 相
;“与”操作,结果放入R1
MOV R0,R2,LSL #3
8
1 ARM处理器寻址方式
MOV R1,R2 SUB R0,R1,R2
;将R2的值存入R1
;R将2R1的值0减xA去AR2的值,结果保存到R0 R1 00xxA55A
MOV R1,R2
6
1 ARM处理器寻址方式
寻址方式分类——立即寻址
立即寻址指令中的操作码字段后面的地址码部
分即是操作数本身,也就是说,数据就包含在指令
当中,取出指程令序也存就储取出了可以立即使用的操作数 (这样的数称为立即数)。立即寻址指令举例如下:
简介
ARM处理器是基于精简指令集计算机(RISC)原
理设计的,指令集和相关译码机制较为简单。
ARM7TDMI(-S)具有32位ARM指令集和16位Thumb
指令集,ARM指令集效率高,但是代码密度低;而
ARM处理器指令系统
ARM指令的寻址方式(8)
❖ 块拷贝寻址
块拷贝寻址类似于堆栈寻址,但堆栈寻址要配合堆栈 进行,而块拷贝则应用于普通数据传送指令。 ARM的块拷贝寻址支持4种方式: ▪ IB(Increment Before):增加之前 ▪ IA(Increment After):增加之后 ▪ DB(Decrement Before):减少之前 ▪ DA(Decrement After):减少之后
▪ 满堆栈(Full):栈指针指向上一个压入堆栈的有效数 据项。
ARM指令的寻址方式(7)
ARM共支持4种类型的堆栈: ▪ FA(Full Ascending):满递增堆栈; ▪ FD(Full Descending):满递减堆栈; ▪ EA(Empty Ascending):空递增堆栈; ▪ ED(Empty Descending):空递减堆栈; 例如:
主要包括: ➢数据传送指令 ➢算术逻辑运算指令 ➢比较测试指令等。
▪数据传送指令用于在寄存器间进行数据传送; ▪算术逻辑运算指令完成常用的算术与逻辑运算,同时可 以选择更新CPSR中的相应条件标志位; ▪比较测试指令不保存运算结果,仅根据运算结果更新 CPSR中相应的条件标志位。
数据运算指令(2)
当前程序状态寄存器CPSR
▪Q:v5以上版本才有,描述增强DSP运算指令是否 发生溢出; ▪I、F:中断禁止位,1表示中断禁止; ▪T:指示处理器处于ARM或Thumb工作状态; ▪M:表示处理器的运行模式。
指令的条件码
❖ 指令的条件码 ▪ARM处理器指令的条件域为4位,ARM状态指令的条 件域一般为指令编码的高4位。 ▪条件码共有16种,每种条件码用2个字符表示, ▪2个字符的条件码可以添加在指令助记符的后面, 和指令同时使用。例如,BEQ,表示“相等则跳转”。
ARM的指令系统
操作码一般由指令助记符码、条件码等组成。操作数字段可以有 两个或者三个,第一个操作数为目的操作数,后面的操作数为源操作 数。
3
一、ARM指令格式
基本格式如下:
<opco<Rn>{,operand2}
其中:
opcode cond S Rd Rn operand2 指令助记符,如LDR. STR等。 执行条件,如EQ、NE等。 是否影响CPSR寄存器的值,书写时影响CPSR 目标寄存器。 第一个操作数的寄存器。 第二个操作数。
MOV R1, R2 ;将R2的值存入R1中
8
2.3 寄存器移位寻址
寄存器移位寻址是ARM指令集特有的寻址方式,只能对操作数使用。
MOV ANDS R0,R1,LSL #3 R1,R1,R2,LSL R3
;R1的值左移3位,结果放入R0,即R0=R1×8 ;R2的值左移R3位,然后和R1相“与”操作, ;结果放入R1中
11
2.5 基址寻址
基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形 成操作数的有效地址。
前索引基址寻址方式,基址寄存器的值不改变。 ① 前索引基址寻址方式,基址寄存器的值不改变。
LDR R2,[R3,#0x0C] R2 [R3 #0x0C] ; [R3 + 0x0C]→ R2 R2,基址寄存器R3的值保持不变 R3
ARM嵌入式体系结构与接口技术 嵌入式体系结构与接口技术
第3章 ARM的指令系统
1
目录
一、ARM指令格式 二、寻址方式 二、ARM指令后缀
2
一、ARM指令格式
汇编指令由操作码字段 操作数字段 操作码字段和操作数字段 操作码字段 操作数字段两部分组成。 操作码字段指示处理器所要执行的操作; 操作码字段 操作数字段指出在指令执行操作的过程中所需要的操作数。 操作数字段 指令的一般格式:
《ARM指令集》课件
3
2000年代至今
随着移动设备的普及,ARM指令集在智能手机 、平板电脑等领域得到广泛应用。
ARM指令集的特点和优势
低功耗
ARM指令集以其低功耗特性而闻名,适合于移动设备和嵌入式系统。
高性能
ARM指令集采用精简的指令集设计,使得处理器能够快速执行指令,提高性能。
ARM指令集还支持流水线技术,即将一条指令的执行分为取指、译码、执行、存回等多个阶段,以提高 程序的执行效率。
03
ARM指令集的编程实践
ARM指令集在汇编语言中的应用
01
ARM指令集在汇编语言中主要用于编写低级程序,如操作系统内核、 驱动程序等。
02
ARM指令集提供了丰富的控制和数据处理指令,使得汇编语言能够高 效地控制硬件和执行复杂的数据处理任务。
01
指令级并行
在同一时钟周期内,处理多条指令 。
线程级并行
利用多线程并行执行,提高整体性 能。
03
02
数据级并行
对数据进行分组处理,提高处理速 度。
任务级并行
将复杂任务分解为多个子任务,并 行执行。
04
ARM指令集的功耗优化技术
动态电压频率调节
根据实际需求调整电压和频率,降低功耗。
低功耗模式
在空闲或低负载时,进入低功耗模式,降低 功耗。
易于移植
ARM指令集具有良好的可移植性,使得软件在不同ARM处理器之间易于移植。
开放架构
ARM指令集采用开放架构,允许厂商根据需求进行定制和扩展。
ARM指令集的应用领域
智能手机
ARM指令集广泛应用于智能 手机领域,包括苹果、三星
、华为等知名品牌。
ARM指令系统说明
;(有条件地)R11 [R6] ;加载16位半字,带符号扩展到32位 LDRH R1,[R0,#22] ;R1 [R0+22],加载16位半字, ;零扩展到32位 STRH R4,[R0,R1]! ;R4 [R0+R1],存储最低的有 ;效半字到R0+R1地址开始的 ;两个字节,地址写回到R0 LDRSB R6,constf ;加载位于标号constf地址中的 ;字节,带符号扩展
op 操作码,指令LDR或STR。 cond 可选的条件码。 B 可选后缀。若有B,则传送Rd的最低有效字节 若op是LDR,则将Rd的其它字节清零。 T 可选后缀。若有T,那么即使处理器是在特权模 式下,存储系统也将访问看成是处理器是在用户模式 下。 Rd 用于加载或存储的ARM寄存器。 Rn 存储器的基址寄存器。若指令是带写回的前索 引(后缀为“!”)或后索引,或使用后缀T,则不允 许Rn与Rd相同。
4.3 ARM 基本寻址方式
4.3.1 寄存器寻址 ADD R0,R1,R2 ; R0 R1+R2 这条指令将两个寄存器(R1和R2)的 内容相加,结果放入第3个寄存器R0中。 必须注意写操作数的顺序,第1个是结果 寄存器,然后是第一操作数寄存器,最 后是第二操作数寄存器。
4.3.2 立即寻址
指令中在操作码字段后面的地址码部分 不是通常意义上的操作数地址,而是操作 数本身。 ADD R3,R3,#1 ; R3 R3+1 AND R8,R7,#0xff ; R8 R7[7:0] 第2个源操作数为一个立即数,以“#”为 前缀,十六进制值以在“#”后加“0x”或“&” 表示。
2.LDR和STR——半字和带符号字节
加载寄存器:带符号的8位字节、带符号和无符 号的16位半字。 存储寄存器:16位半字。 带符号加载是指带符号扩展到32位。无符号半 字加载是指零扩展到32位。 句 法 这些指令有4种可能的形式:零偏移、前索引 偏移、程序相对偏移和后索引偏移。
ARM指令集讲解
ARM指令集讲解ARM指令和指令系统:指令是指示计算机某种操作的命令,指令的集合称为指令系统。
指令系统的功能强弱很大程度上决定了这类计算机智能的高低,它集中地反应了微处理器的硬件功能和属性。
ARM指令在机器中的表示格式是用32位的二进制数表示。
如ARM中有一条指令为ADDEQS R0,R1,#8;其二进制代码形式为:31~28 | 27~25 | 24~21 | 20 | 19~16 | 15~12 | 11~0 0000 | 001 | 0100 | 1 | 0001 | 0000 | 0000 0000 1000cond | opcode | Rn | Rd | Op2ARM指令格式一般如下:{}{s},{,}格式中< >的内容是必不可少的,{ }中的内容可忽略表示操作码。
如ADD表示算术加法{} 表示指令执行的条件域。
如EQ、NE等,缺省为AL。
{S} 决定指令的执行结果是否影响CPSR的值,使用该后缀则指令执行结果影响CPSR的值,否则不影响表示目的寄存器表示第一个操作数,为寄存器表示第二个操作数,可以是立即数。
寄存器和寄存器移位操作数ARM指令后缀:S、!S后缀:指令中使用S后缀时,指令执行后程序状态寄存器的条件标志位将被刷新,不使用S后缀时,指令执行后程序状态寄存器的条件标志将不会发生变化。
S后缀常用于对条件进行测试,如是否有溢出,是否进位等,根据这些变化,就可以进行一些判断,如是否大于,相等,从而影响指令执行的顺序。
!后缀:如果指令地址表达式中不含!后缀,则基址寄存器中的地址值不会发生变化。
加上此后缀后,基址寄存器中的值(指令执行后)= 指令执行前的值+ 地址偏移量(1)!后缀必须紧跟在地址表达式后面,而地址表达式要有明确的地址偏移量(2)!后缀不能用于R15(PC)的后面(3)当用在单个地址寄存器后面时,必须确信这个寄存器有隐性的偏移量,例如“STMDB R1!,{R3,R5,R7}”。
ARM指令系统
第2章 ARM指令系统
2.1 ARM指令系统简介
ARM嵌入式处理器可以支持32位的ARM指令集和16位的 Thumb指令集。一般而言,在ARM嵌入式系统中,需要正确 处理好两个工作状态:32位的ARM状态和16位的Thumb状态。
ARM处理器状态模式切换
“额外开销”
代码保持在ARM 状态下运行
返回指令
运算操作符 如:
-S
ADDS R0, R1 ;将R0与R1中的数
值相加,并更新寄存器APSR中的标
志位
EQ,NE, LT,GT等
条件判断执行语句。 EQ=Equal,NE=NotEqual, LT=Less Than, GT=Great Than
11
2.1 ARM指令系统简介
2.1.3 ARM汇编指令的书写格式
Thumb-2 是 Thumb 指令集的一项主要增强功能,并 且由 ARMv6T2 和 ARMv7M体系结构定义。 Thumb2 提供了几乎与 ARM 指令集完全一样的功能。 它兼 有16 位和 32 位指令,并可检索与 ARM 类似的性能 ,但其代码密度与 Thumb 代码类似。
15
伴随着Thumb‐2 指令集出现,终于可以在单一 的操作模式下完成所有处理了。
(3)[19:16]为R0~R15共16个寄存器; (4)[15:12]为目标寄存器或源寄存器; (5)[11:0]为地址偏移或操作数寄存器;
20
2.2 ARM指令集的基本概念
2.2.2 ARM指令中的条件执行
➢ 在ARM指令编码表中,最高4位[31:28]表示 指令的条件码,即cond。在ARM汇编语言 中,每种条件码都使用两个英文缩写字母 符号来表示其含义。一般条件码都是添加 在指令助记符的后面,用来表示在指令执 行的过程中,必须满足当前的条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM 指令系统
MSR指令
MSR指令的格式为: MSR指令的格式为: 指令的格式为 MSR{条件 条件} 程序状态寄存器(CPSR或SPSR)_<域 MSR{条件} 程序状态寄存器(CPSR或SPSR)_<域>,操作数 MSR指令用于将操作数的内容传送到程序状态寄存器的特定域中 指令用于将操作数的内容传送到程序状态寄存器的特定域中。 MSR指令用于将操作数的内容传送到程序状态寄存器的特定域中。其 操作数可以为通用寄存器或立即数。 中,操作数可以为通用寄存器或立即数。<域>用于设置程序状态寄存 器中需要操作的位,32位的程序状态寄存器可分为 个域: 位的程序状态寄存器可分为4 器中需要操作的位,32位的程序状态寄存器可分为4个域: 31:24]为条件标志位域, 表示; 位[31:24]为条件标志位域,用f表示; 23:16]为状态位域, 表示; 位[23:16]为状态位域,用s表示; 15: 为扩展位域, 表示; 位[15:8]为扩展位域,用x表示; 为控制位域, 表示; 位[7:0]为控制位域,用c表示; 该指令通常用于恢复或改变程序状态寄存器的内容,在使用时, 该指令通常用于恢复或改变程序状态寄存器的内容,在使用时,一般 要在MSR指令中指明将要操作的域。 MSR指令中指明将要操作的域 要在MSR指令中指明将要操作的域。 CPSR, MSR CPSR,R0 CPSR_c, MSR CPSR_c,R0
ARM 指令系统
第五章 ARM指令系统及汇编程序设计(下)
1
ARM 指令系统
程序状态寄存器访问指令
ARM微处理器支持程序状态寄存器访问指令,用于在程 微处理器支持程序状态寄存器访问指令, 微处理器支持程序状态寄存器访问指令 序状态寄存器和通用寄存器之间传送数据, 序状态寄存器和通用寄存器之间传送数据,程序状态寄 存器访问指令包括以下两条: 存器访问指令包括以下两条:
8
ARM 指令系统
LDM/STM可以传送R0-R15的任意组合
OP {cond} mode Rn{!}, reglist{^} mode: IA 每次传送后地址加1 IB 每次传送前地址加1 DA 每次传送后地址减1 DB 每次传送前地址减1
FD ED FA EA
满递减堆栈 空递减堆栈 满递增堆栈 空递增堆栈
;[r13]->r0, r13+=0x04 ;[r13]<-r1, r13+=0x04
7
ARM 指令系统
4. 前索引偏移;
OP{cond} Rd, [Rn, offset] {!} Offset 就是数据处理指令中的第二操作数; 就是数据处理指令中的第二操作数; 为一个可选的后缀,即是否修改Rn !为一个可选的后缀,即是否修改 Rn为R15时不能选择该后缀; 为 时不能选择该后缀; 时不能选择该后缀 LDR r0, [r1, #0x04] ;[r1+0x04]->r0 LDR r0, [r1, #0x04]! ;[r1+0x04]->r0, r1+=0x04 STR r0, [r1, r2, ASR #0x04]! ;r0->[r1+r2/16], r1+=r2/16
3
ARM 指令系统
MRS指令
MRS指令的格式为: MRS指令的格式为: 指令的格式为 MRS{条件 通用寄存器,程序状态寄存器(CPSR或SPSR) 条件} MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR) MRS指令用于将程序状态寄存器的内容传送到通用寄存器 MRS指令用于将程序状态寄存器的内容传送到通用寄存器 该指令一般用在以下几种情况: 中。该指令一般用在以下几种情况: 1. 当需要改变程序状态寄存器的内容时,可用MRS将程序状 当需要改变程序状态寄存器的内容时, 可用MRS将程序状 MRS 态寄存器的内容读入通用寄存器, 态寄存器的内容读入通用寄存器,修改后再写回程序状态 寄存器。 寄存器。 当在异常处理或进程切换时, 2. 当在异常处理或进程切换时,需要保存程序状态寄存器的 可先用该指令读出程序状态寄存器的值,然后保存。 值,可先用该指令读出程序状态寄存器的值,然后保存。 MRS MRS R0,CPSR R0, R0,SPSR
LDR LDRB LDRH STR STRB STRH LDM STM 字数据加载指令 字节数据加载指令 半字数据加载指令 字数据存储指令 字节数据存储指令 半字数据存储指令 批量数据加载指令 批量数据存储指令
6
ARM 指令系统
加载/存储指令(LDR/STR/LDM/STM)的寻址方式
LDR/STR:采用寄存器间接寻址 寄存器间接寻址和基变址寻址的方式 寄存器间接寻址 1. 零偏移; LDR r0, [r1] STR r0, [r1] 2. 程序相对偏移; LDR r0, =0x12345678 3. 后索引偏移; LDR r0, [r13], #0x04 STR r1, [r13], #0x04
12
ARM 指令系统
LDRSB指令
LDRSB指令的格式为: LDRSB指令的格式为: 指令的格式为 LDR{条件 条件}SB 目的寄存器, 存储器地址> LDR{条件}SB 目的寄存器,<存储器地址> LDRSB指令用于从存储器中将一个8 LDRSB指令用于从存储器中将一个8位的字节数据传送到目 指令用于从存储器中将一个 的寄存器中,同时将符号位扩展到高24位。该指令通常用 的寄存器中,同时将符号位扩展到高24位 24 于从存储器中读取8位的字节数据到通用寄存器, 于从存储器中读取8位的字节数据到通用寄存器,然后对 数据进行处理。当程序计数器PC作为目的寄存器时, PC作为目的寄存器时 数据进行处理。当程序计数器PC作为目的寄存器时,指令 从存储器中读取的字数据被当作目的地址, 从存储器中读取的字数据被当作目的地址,从而可以实现 程序流程的跳转。 程序流程的跳转。 LDRSB LDRSB R0, R0,[R1] R0,[R1,# ,#8] R0,[R1,#8]
10
ARM 指令系统
LDRB指令
LDRB指令的格式为: LDRB指令的格式为: 指令的格式为 LDR{条件 条件}B 目的寄存器, 存储器地址> LDR{条件}B 目的寄存器,<存储器地址> LDRB指令用于从存储器中将一个8 LDRB 指令用于从存储器中将一个8位的字节数据传送到目 指令用于从存储器中将一个 的寄存器中,同时将寄存器的高24位清零。该指令通常用 的寄存器中,同时将寄存器的高24位清零。 24位清零 于从存储器中读取8位的字节数据到通用寄存器, 于从存储器中读取 8 位的字节数据到通用寄存器 , 然后对 数据进行处理。当程序计数器PC作为目的寄存器时, PC作为目的寄存器时 数据进行处理。当程序计数器PC作为目的寄存器时,指令 从存储器中读取的字数据被当作目的地址, 从存储器中读取的字数据被当作目的地址,从而可以实现 程序流程的跳转。 程序流程的跳转。 LDRB LDRB R0, R0,[R1] R0,[R1,# ,#8] R0,[R1,#8]
13
ARM 指令系统
LDRSH指令
LDRSH指令的格式为: LDRSH指令的格式为: 指令的格式为 LDR{条件 条件}SH 目的寄存器, 存储器地址> LDR{条件}SH 目的寄存器,<存储器地址> LDRSH指令用于从存储器中将一个16位的半字数据传送到 LDRSH指令用于从存储器中将一个16位的半字数据传送到 指令用于从存储器中将一个16 目的寄存器中,同时将符号位扩展到高16位。该指令通常 目的寄存器中,同时将符号位扩展到高16位 16 用于从存储器中读取16位的半字数据到通用寄存器, 16位的半字数据到通用寄存器 用于从存储器中读取16位的半字数据到通用寄存器,然后 对数据进行处理。当程序计数器PC作为目的寄存器时, PC作为目的寄存器时 对数据进行处理。当程序计数器PC作为目的寄存器时,指 令从存储器中读取的字数据被当作目的地址, 令从存储器中读取的字数据被当作目的地址,从而可以实 现程序流程的跳转。 现程序流程的跳转。 R0, LDRSH R0,[R1] R0,[R1,# ,#8] LDRSH R0,[R1,#8] R0,[R1, LDRSH R0,[R1,R2]
9
ARM 指令系统
LDR指令
LDR指令的格式为: LDR指令的格式为: 指令的格式为 LDR{条件 目的寄存器, 存储器地址> 条件} LDR{条件} 目的寄存器,<存储器地址> LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中 指令用于从存储器中将一个32位的字数据传送到目的寄存器中。 LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。 该指令通常用于从存储器中读取32位的字数据到通用寄存器, 32位的字数据到通用寄存器 该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对 数据进行处理。当程序计数器PC作为目的寄存器时, PC作为目的寄存器时 数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中 读取的字数据被当作目的地址,从而可以实现程序流程的跳转。 读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指 令在程序设计中比较常用,且寻址方式灵活多样,请读者认真掌握。 令在程序设计中比较常用,且寻址方式灵活多样,请读者认真掌握。 LDR LDR LDR LDR R0, R0,[R1] R0,[R1, R0,[R1,R2] R0,[R1,# ,#8] R0,[R1,#8] R0,[R1, R0,[R1,R2] !
14
ARM 指令系统
STR指令
STR指令的格式为: STR指令的格式为: 指令的格式为 STR{条件 源寄存器, 存储器地址> 条件} STR{条件} 源寄存器,<存储器地址> STR指令用于从源寄存器中将一个32 STR 指令用于从源寄存器中将一个32位的字数据传送到存 指令用于从源寄存器中将一个32位的字数据传送到存 储器中。该指令在程序设计中比较常用, 储器中。该指令在程序设计中比较常用,且寻址方式灵活 多样,使用方式可参考指令LDR LDR。 多样,使用方式可参考指令LDR。 STR STR R0,[R1],#8 R0,[R1],#8 ,# R0,[R1,# ,#8] R0,[R1,#8]