第3 ARM寻址方式与指令系统 13 14节_第1页
第3 ARM寻址方式与指令系统 13 14节_第2页
第3 ARM寻址方式与指令系统 13 14节_第3页
第3 ARM寻址方式与指令系统 13 14节_第4页
第3 ARM寻址方式与指令系统 13 14节_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会计学1第3ARM寻址方式与指令系统1314节§3.3ARM指令集-数据处理5、例如:(1)、R0=0X12345678ANDR0,R0,#5

结果:

R0<=0x00000000

第1页/共69页§3.3ARM指令集-数据处理十六、ORR或指令1、格式:

ORR{<cond>}{s}<Rd>,<Rn>,<OP2>2、功能

RnORROP2Rd3、格式说明

Rd:寄存器

Rn:寄存器

OP2:寄存器,立即数,寄存器移位4、注意:按位进行或操作第2页/共69页§3.3ARM指令集-数据处理4、ORR运算规则

OP1运算符(或∨)OP2

=RESULT0∨

0=00∨

1=11∨

0=11∨

1=1第3页/共69页§3.3ARM指令集-数据处理5、例如:(1)、R0<=0X12345678ORRR0,R0,#5

结果:

R0<=0x1234567D

第4页/共69页§3.3ARM指令集-数据处理十七、EOR异或指令1、格式:

EOR{<cond>}{s}<Rd>,<Rn>,<OP2>2、功能

RnEOROP2Rd3、格式说明

Rd:寄存器

Rn:寄存器

OP2:寄存器,立即数,寄存器移位4、注意:按位进行异或操作第5页/共69页§3.3ARM指令集-数据处理4、EOR运算规则

OP1运算符(异或⊕

)OP2

=RESULT0⊕

0=00⊕

1=11⊕

0=11⊕

1=0第6页/共69页§3.3ARM指令集-数据处理5、例如:(1)、R0=0X12345678EORR0,R0,#5

结果:

R0<=0x1234567D

第7页/共69页§3.3ARM指令集-数据处理十八、BIC位清除指令1、格式:

BIC{<cond>}{s}<Rd>,<Rn>,<OP2>2、功能

RnAND(!OP2)Rd3、格式说明

Rd:寄存器

Rn:寄存器

OP2:寄存器,立即数,寄存器移位第8页/共69页§3.3ARM指令集-数据处理4、例如:R0=#0X12345678BICR0,R0,#5

结果:(1)!#5=>#0xFFFFFFFA(2)R0AND#0xFFFFFFFAR0

R0<=#0x1234567A第9页/共69页§3.3ARM指令集-数据处理十九、CMP比较指令1、格式:

CMP{<cond>}<RD>,<OP1>2、功能

RN-OP1结果影响CPSR(N,Z,C,V)

注意:指令后无S,影响状态标志位3、格式说明

RD:寄存器

OP1:寄存器,立即数,寄存器移位第10页/共69页§3.3ARM指令集-数据处理4、如何影响标志位-执行CMP前

第11页/共69页§3.3ARM指令集-数据处理4、如何影响标志位-执行CMP后

第12页/共69页ARM状态下CPSR寄存器第13页/共69页§3.3ARM指令集-数据处理5、例如:(1)、R0=#0x05相等

CMPR0,#5ADDGTR0,R0,#5;GT有符号大于(Z=0)AND(N=V)(2)、R0=#0x06大于

CMPR0,#5ADDGTR0,R0,#5(3)、R0=#0x03小于

CMPR0,#5ADDGTR0,R0,#5

第14页/共69页§3.3ARM指令集-数据处理二十、CMN反值比较指令1、格式:

CMN{<cond>}<RD>,<OP1>2、功能

RN-(-OP1)结果影响CPSR

注意:指令后无S,但影响状态标志位3、格式说明

RD:寄存器

OP1:寄存器,立即数,寄存器移位第15页/共69页§3.3ARM指令集-数据处理5、例如:与负数的绝对值比较(1)、R0=#0x05相等CMNR0,#5(2)、R0=#0x06大于CMNR0,#5(3)、R0=#0x03小于CMNR0,#5

第16页/共69页§3.3ARM指令集-数据处理二十一、TST位测试指令1、格式:

TST{<cond>}<RD>,<OP1>2、功能

RdANDOP1不保存结果,影响CPSR标志位

注意:指令后无S,但影响状态标志位3、格式说明

RD:寄存器

OP1:寄存器,立即数,寄存器移位第17页/共69页§3.3ARM指令集-数据处理5、例如R0=#0x1FA423E4TSTR0,#5;用于测试R0中位2,0是否为0R0AND#5=>#4AND#5=>0b0100AND0b0101=0b0100CPSR中Z=0结果不为0R0中位2,0不全为0第18页/共69页§3.3ARM指令集-数据处理二十二、TEQ相等测试指令1、格式:

TEQ{<cond>}<RD>,<OP1>2、功能

RN⊕

OP1不保存结果,影响CPSR标志位

注意:指令后无S,但影响状态标志位3、格式说明

RD:寄存器

OP1:寄存器,立即数,寄存器移位第19页/共69页§3.3ARM指令集-数据处理5、例如R0=#0x1FA423E4TEQR0,#5(1)R0EOR#50x00000005EOR0x1FA423E4=0x1FA423E4CPSR中Z=0结果不为0,不相等第20页/共69页§3.3ARM指令集-跳转指令功能1、实现程序跳转(1)、跳转指令:跳转空间依据指令确定(2)、向程序指针寄存器PC(R15)写入目标地址:在4GB空间任意跳转2、程序状态切换(ARM状态、Thumb状态)第21页/共69页§3.3ARM指令集-跳转指令一、B跳转指令1、格式

B{<cond>}<ADDR>;2、功能:

跳转到地址ADDR处,继续执行程序

注意:ADDR是相对于PC的一个偏移量,而不是绝对值(物理地址)3、跳转范围ADDR

ADDR为24位有符号偏移量,±32M地址范围

第22页/共69页§3.3ARM指令集-跳转指令4、目标地址计算方法(1)、24位有符号数据扩展到32位

±8M一个数字表示一条指令,总指指令数(2)、左移2位(X4)(一个字的地址->4字节地址)

±32M存储空间(3)、扩展后的偏移量+PC=PC5、例如(类似8086JMP)

Bexit;….exit第23页/共69页§3.3ARM指令集-跳转指令二、BL带返回的跳转指令1、格式

BL{<cond>}<ADDR>;2、功能:用于子程序调用

(1)、跳转到地址ADDR处,继续执行程序(2)、PC=LR(R14),用于子程序返回(LRPC)

注意:ADDR是相对于PC的一个偏移量,而不是绝对值(物理地址)3、跳转范围ADDR

ADDR为24位有符号偏移量,±32M地址范围

第24页/共69页§3.3ARM指令集-跳转指令4、目标地址计算方法(1)、24位有符号数据扩展到32位

±8M一个数字表示一条指令,指令数(2)、左移2位(X4)(一个字的地址)

±32M存储空间(3)、+PC=PC5、例如(类似8086JMP)

BLfunc;….func

movR15,R14子程序返回

第25页/共69页§3.3ARM指令集-跳转指令三、BLX带返回和状态切换的跳转指令1、格式

BLX{<cond>}<ADDR>;

BLX{<cond>}<Rn>;2、功能:用于子程序调用和状态切换

(1)、跳转到地址ADDR处或以Rn内容为地址处,继续执行程序(2)、PC=LR(R14),用于子程序返回(LRPC)(3)、目标地址处为Thumb指令,则从ARM状态转为Thumb状态3、跳转范围ADDR

ADDR为24位有符号偏移量,±32M地址范围

第26页/共69页§3.3ARM指令集-跳转指令第27页/共69页§3.3ARM指令集-跳转指令4、目标地址计算方法(1)、24位有符号数据扩展到32位

±8M一个数字表示一条指令,指令数(2)、左移2位(X4)(一个字的地址)

±32M存储空间(3)、+PC=PC5、例如

BLXT16;….T16;Thumb指令

第28页/共69页§3.3ARM指令集-跳转指令四、BX带状态切换的跳转指令1、格式BX{<cond>}<Rn>;2、功能:用于子程序调用和状态切换

(1)、跳转到地址ADDR处或以Rn内容为地址处,继续执行程序(2)、目标地址处为Thumb指令,则从ARM状态转为Thumb状态3、跳转范围ADDR

ADDR为24位有符号偏移量,±32M地址范围

第29页/共69页§3.3ARM指令集-跳转指令第30页/共69页§3.3ARM指令集-跳转指令4、目标地址计算方法(1)、24位有符号数据扩展到32位

±8M一个数字表示一条指令,指令数(2)、左移2位(X4)(一个字的地址)

±32M存储空间(3)、+PC=PC5、例如

LDRR0,exit;目标地址exit装入R0BXR0;转到Exit处执行,状态切换第31页/共69页§3.3ARM指令集-LOAD/STORE指令一、功能寄存器与存储器之间传送数据二、分类1、单一数据传送指令

LDR/STR2、多数据传送指令LDM/STM3、数据交换指令SWP/SWPB第32页/共69页§3.3ARM指令集-单一数据传送指令一、LDR字数据加载指令1、格式

LDR{<cond>}<Rd>,<addr>2、功能

addr地址内字数据=〉Rd3、指令:Rn基址寄存器

Rm变址寄存器

Index12位立即数第33页/共69页常数一、立即寻址指令格式立即数组成二、常数;一个32位常数用12编码表示,符合以下规则才是合法常数常数=immed_8循环右移(2Xrotate_imm)

31-2827-2524-212019-1615-1211-0condopcodesRnRdOp2立即数11-87-0循环部分立即数部分Rotate_immImmed_8第34页/共69页常数三、例如汇编指令movr0,#0x0000f200机器指令0xe3a00cf2,其中0xcf2为立即数Immed_8=0xF2rotate_imm=0x0c常数(循环右移动24位)0x0000F200=0xF2循环右移(2X(0x0C))第35页/共69页§3.3ARM指令集-单一数据传送指令3、指令(1)LDRRd,[Rn]Rn内容为存储器地址此地址内一个字Rd寄存器间接寻址

(2)LDRRd,[Rn,Rm]Rn+Rm为存储器地址此地址内一个字Rd基址+变址寻址第36页/共69页§3.3ARM指令集-单一数据传送指令(3)LDRRd,[Rn,#index]Rn+#index为存储器地址此地址内一个字Rd基址+变址寻址(4)LDRRd,[Rn,RmLSL#5]Rn+RmX32为存储器地址此地址内一个字Rd基址+变址寻址第37页/共69页§3.3ARM指令集-单一数据传送指令(5)LDRRd,[Rn,Rm]!Rn+Rm为存储器地址此地址内一个字RdRn+RmRn基址+变址寻址(6)LDRRd,[Rn,#Index]!Rn+#Index为存储器地址此地址内一个字RdRn+#index=Rn基址+变址寻址第38页/共69页§3.3ARM指令集-单一数据传送指令(7)LDRRd,[Rn,Rm,LSL#5]!Rn+RmX32为存储器地址此地址内一个字RdRn+RmX32Rn基址+变址寻址(8)LDRRd,[Rn],RmRn内容为存储器地址此地址内一个字RdRn+Rm=Rn寄存器间接寻址第39页/共69页§3.3ARM指令集-单一数据传送指令(9)LDRRd,[Rn],#indexRn内容为存储器地址此地址内一个字RdRn+#indexRn寄存器间接寻址(10)LDRRd,[Rn],RmLSL#5Rn内容为存储器地址此地址内一个字RdRn+RmX32=Rn寄存器间接寻址第40页/共69页§3.3ARM指令集-单一数据传送指令4、例如LDRR0,[R1,R2,LSL#5]!第41页/共69页§3.3ARM指令集-单一数据传送指令二、LDRB字节数据加载指令1、格式

LDR{<cond>}B<Rd>,<addr>2、功能(1)addr地址内字节数据=〉Rd(2)Rd高24位清零

第42页/共69页§3.3ARM指令集-单一数据传送指令三、LDRBT用户模式下的字节读取指令1、格式

LDR{<cond>}BT<Rd>,<addr>2、功能:同LDRB3、注意:

不管当前是什么模式,都作为用户模式下的存储器操作第43页/共69页§3.3ARM指令集-单一数据传送指令四、LDRH半字数据加载指令1、格式

LDR{<cond>}H<Rd>,<addr>2、功能(1)addr地址内半字数据=〉Rd(2)Rd高16位清零3、例如

LDRHR0,[R1];第44页/共69页§3.3ARM指令集-单一数据传送指令五、LDRSB有符号的字节数据加载指令1、格式

LDR{<cond>}SB<Rd>,<addr>2、功能(1)addr地址内字节数据=〉Rd(2)Rd高24位按字节符号位扩展3、例如R1=0x10000000[0x10000000]=0x93

LDRSBR0,[R1]结果R0=0xFFFFFF93第45页/共69页§3.3ARM指令集-单一数据传送指令六、LDRSH有符号的半字数据加载指令1、格式

LDR{<cond>}SH<Rd>,<addr>2、功能(1)addr地址内半字数据=〉Rd(2)Rd高16位按字节符号位扩展3、例如R1=0x10000000[0x10000000]=0x933D

LDRSHR0,[R1]结果R0=0xFFFF933D第46页/共69页§3.3ARM指令集-单一数据传送指令七、LDRT用户模式下的字读取指令1、格式

LDR{<cond>}T<Rd>,<addr>2、功能:同LDR3、注意:

不管当前是什么模式,都作为用户模式下的存储器操作第47页/共69页§3.3ARM指令集-单一数据传送指令八、STR字数据存储指令1、格式

STR{<cond>}<Rd>,<addr>2、功能:

Rd(寄存器)数据==地址Addr中3、例如R1=0x40003000R0=0x1A27E4F3STRR0,[R1,#4]!(1)存储器地址=R1+#4=0x40003000+#4=0x40003004(2)R0[0x40003004]=0x1A27E4F3(3)

修改R1R1+#4R1=0x40003004第48页/共69页§3.3ARM指令集-单一数据传送指令九、STRB字节数据存储指令1、格式

STR{<cond>}B<Rd>,<addr>2、功能:

Rd数据最低字节==地址Addr中3、例如R1=0x40003000R0=0x1A27E4F3STRBR0,[R1,#4]!(1)存储器地址=R1+#4=0x40003000+#4=0x40003004(2)R0[0x40003004]=0xF3(3)

修改R1R1+#4R1=0x40003004第49页/共69页§3.3ARM指令集-单一数据传送指令十、STRBT用户模式下的字节数据存储指令1、格式

STR{<cond>}BT<Rd>,<addr>2、功能:

Rd数据最低字节==地址Addr中3、注意:不论当前处于何种模式,都以用户模式访问内存第50页/共69页§3.3ARM指令集-单一数据传送指令十一、STRH半字数据存储指令1、格式

STR{<cond>}H<Rd>,<addr>2、功能:

Rd数据低2字节==地址Addr中3、例如R1=0x40003000R0=0x1A27E4F3STRHR0,[R1,#4]!(1)存储器地址=R1+#4=0x40003000+#4=0x40003004(2)R0[0x40003004]=0xE4F3(3)

修改R1R1+#4R1=0x40003004第51页/共69页§3.3ARM指令集-单一数据传送指令十二、STRT用户模式下字存储指令1、格式

STR{<cond>}T<Rd>,<addr>2、功能:同STR3、注意:不论当前处于何种模式,都以用户模式访问内存第52页/共69页§3.3ARM指令集-批数据传送指令一、LDM批数据加载指令1、格式

LDM{<cond>}{<Type>}<Rn>!,<reg>{^}2、功能:连续存储单元==〉寄存器(多个)3、格式说明Rn:内存地址(存储器)

Reg:寄存器列表!后缀:指令执行后,将最后地址写入基址寄存器^后缀:Regs无PC时,指令中的寄存器为用户模式下寄存器

否则:将SPSR=>复制CPSR第53页/共69页§3.3ARM指令集-批数据传送指令TYPE:IA传送后地址+4FD满递减堆栈

IB传送前地址+4ED空递减堆栈DA传送后地址-4FA满递增堆栈

DB传送前地址-4EA空递增堆栈

满栈:堆栈指针指向上次写入的最后一个单元

空栈:堆栈指针指向第一个空闲单元

第54页/共69页§3.3ARM指令集-批数据传送指令4、例如AREAWord,CODE,READONLYT1EQU0x40001000;ENTRYstartLDRR0,=T1;0x40001000=>R0MOVR13,R0;R13SP

LDMFDR13!,{R0,R1};从左至右END

第55页/共69页§3.3ARM指令集-批数据传送指令执行LDMFD前寄存器值,内存数据第56页/共69页§3.3ARM指令集-批数据传送指令第57页/共69页§3.3ARM指令集-批数据传送指令执行LDMFD后寄存器第58页/共69页§3.3ARM指令集-批数据传送指令执行:(1)执行LDMFDr13!,{r0,r1}前sp=0x40001000[sp]=0xE7FF0010[sp+4]=0xE800E800(2)执行LDMFDr13!,{r0,r1}后[sp]=>R0=0xE7FF0010Sp=Sp+4=0x40001004[sp]=>R1=0xE800E800Sp=Sp+4=0x40001008

出栈次序:从左---〉右满递减堆栈

第59页/共69页§3.3ARM指令集-批数据传送指令二、STM批数据存储指令1、格式

STM{<cond>}{<Type>}<Rn>!,<reg>{^}2、功能:连续存储单元寄存器(多个)3、格式说明

与LDM一致第60页/共69页§3.3ARM指令集-批数据传送指令4、例如AREAWord,CODE,READONLY;T1EQU0x11223344;T2EQU0x88776655;T3EQU0x40001000;ENTRY;startLDRR0,=T3;;R0=0x40001000MOVR13,R0;;Sp=R13=0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论