ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:22.19KB ,
资源ID:9402647      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-9402647.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ARM处理器寄存器和汇编指令系统.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

ARM处理器寄存器和汇编指令系统.docx

1、ARM处理器寄存器和汇编指令系统ARM处理器寄存器和汇编指令系统 1.ARM的处理器模式ARM体系结构支持7种处理器模式,分别是:用户、FIQ、IRQ、管理、中止(abort)、未定义和系统模式。除了用户模式外,其余都称之为特权模式。除了用户和系统模式外,其余都称之为异常模式。2.ARM的存储器组织ARM处理器总共有37个寄存器:包括31个通用寄存器、包括程序计数器(PC)、和6个状态寄存器。这些寄存器在不同模式下,不能被同时看到,有些名称是重叠的。分为三类:不分组寄存器,分组寄存器和程序计数器1)不分组寄存器R0R7所有的处理模式下、它们都是访问同一个寄存器,因此只有8个不分组寄存器。2)分

2、组寄存器R8R14每一个访问的物理寄存器取决于当前的处理器模式,有些是共用的,而有些事分离的。具体可以查询相关资料。R13就是堆栈寄存器SP,而R14就是链接寄存器LR3)程序计数器R15在ARM状态PC的位1:0为0,而在Thumb状态,位0为0.4)程序状态寄存器CPSR和程序状态保存寄存器SPSRCPSR只有一个,代表了当前的程序状态。而每个异常模式都有独立的一个SPSR,用于保存CPSR的状态。131302928 8765 4 32102NZCVDNM(RAZ)IFTM4M3 M2M1M03.ARM的常用汇编指令1)基本寻址方式包括有寄存器寻址、立即寻址、寄存器移位寻址、寄存器间寻址、

3、变址寻址、多寄存器寻址、堆栈寻址、块复制寻址和相对寻址2)条件执行几乎所有的ARM指令都可以包含一个可选的条件码,句法中以cond来标识。可用的条件码如下面所示。几乎所有的ARM数据处理指令均可以根据执行结果来选择是否更新条件码标志,即在指令中包含后缀S。1操作码31:28助记符后缀标志 含义20000EQ Z置位 相等30001 NE Z清零 不等40010 CS/HS C置位 大于或等于(无符号=)50011 CC/LO C清零 小于(无符号)111001 LS C清零或Z置位小于或等于(无符号=131011 LT N和V不同 带符号151101 LE Z置位或N和V不同带符号=16111

4、0 AL 任何 总是(通常省略)3)存储器访问指令3.1)LDR和STR(字与无符号字节)语法如下1opcondBTRd,Rn2opcondBRd,Rn,Flexoffset! /前索引偏移3opcondBRd,label4opcondBTRd,Rn,Flexoffset /后索引偏移其中:op 是操作码即指令LDR或STR。cond 就是上面所说的条件码,因此指令可以变成LDREQ或STRNE类似的名称,表示满足某些条件时该条指令才会执行。B 可选后缀,表示传送Rd的最低有效字节,就是所谓的无符号字节传送,字节加载的时候是用0来扩展到32位的。T 可选后缀,即使处理器是在特权模式下,存储系统

5、也将访问看成是处理器在用户模式下。不能和前索引偏移一起使用。Rd 用于加载或存储的ARM寄存器Rn 存储器的基址寄存器。若指令是带写回的前索引或后索引(后索引都是写回的),则Rd和Rn不能相同Flexoffset 加到Rn上的灵活的偏移量label 程序相对偏移表达式。label必须是当前指令的+-4KB范围内! 可选后缀,前索引写回标志,若Rn是R15,则不能用后缀!Flexoffset的句法包括下面两种1#expr2-Rm,shift -是可选符号,表示从Rn中减去偏移量,否则是加 expr表达式,取值范围-4095+4095的整数 Rm内含偏移量的寄存器。Rm不允许是R15 shiftR

6、m的可选移位方法,可以是下列形式的任何一种 ASRn算术右移n位(1=n=32) LSLn逻辑左移n位(0=n=31) LSRn逻辑右移n位(1=n=32) RORn循环右移n位(1=n=31) RRX循环右移1位,带扩展3.2)LDR和STR(半字和带符号字节)语法如下:1opcondtypeRd,Rn2opcondtypeRd,Rn,offset!3opcondtypeRd,label4opcondtypeRd,Rn,offset其中:type 必须是以下所列其中之一 SH 对带符号半字(仅LDR) H 对无符号半字 SB 对带符号字节(仅LDR)label 程序相对偏移表达式。必须是当前

7、指令+-255字节范围offset 加在Rn上的偏移量,可以是以下两种形式之一 #expr /值为+-255范围内的整数。 - Rm3.3)LDR和STR(双字)加载两个相邻的存储器和存储两个相邻的寄存器,语法如下:1opcondDRd,Rn2opcondDRd,Rn,offset!3opcondDRd,label4opcondDRd,Rn,offset其中:Rd 加载或存储寄存器其中一个,另一个是R(d+1)。但Rd必须是偶数寄存器,且不能是R14。Rn 除非指令为零偏移,或不带写回的前索引,否则Rn不允许与Rd和R(d+1)相同offset 加在Rn上的偏移量label 程序相对偏移表达式

8、。必须是当前指令+-255字节范围3.4)LDM和STM 加载多个寄存器或存储多个寄存器,可以传送R0R15的任何组合1opcondmodeRn!,reglist其中:mode是下列情况中之一: IA 每次传送后地址加1 IB 每次传送前地址加1 DA 每次传送后地址减1 DB 每次传送前地址减1 FD 满递减堆栈 ED 空递减堆栈 FA 满递增堆栈 EA 空递增堆栈Rn 基址寄存器,传送数据的初始地址。不允许是R15! 可选后缀。若有!,则最后的地址写回Rnreglist 加载或存储的寄存器列表 可以写出如下形式 R0, R2, R9 R3-R6, R11, R12 R0, R4-R7, L

9、R3.4) SWP在寄存器和存储器之间进行数据交换。1SWPcondBRd,Rm,Rn其中:B 可选后缀。若有B,则是交换字节,否则交换字Rd 数据从存储器加载到RdRm Rm的内容存储到存储器。如果Rm和Rd的相同,则是交换寄存器和存储器的内容Rn Rn的内容指定要进行数据交换的存储器的地址。 Rn必须和Rm和Rd不同4)ARM数据处理指令4.1)灵活的第二操作数,在数据处理指令中会经常出现第二操作数,即Operand2,它有如下的两种可能形式。1#immed_8r2Rm,shift其中:immed_8r 取值为数字常量的表达式。常量必须对应8位位图在32位字中被循环移位偶数位(0,2,4,

10、6,.,28,30)后的值 合法的常量有:0xFF,0x104,0xFF0,0xFF000,0xF0000000F等 非法的常量有:0x101,0x102,0xFF1,0xFF04等Rm 存储第二操作数数据的寄存器,可以用各种方法对寄存器中的位图进行移位或循环移位,操作结果用于Operand2 但Rm本身不改变。shift 对Rm的可选移位方法,可以是以下方法的任何一种 ASRn算术右移n位(1=n=32) LSLn逻辑左移n位(0=n=31) LSRn逻辑右移n位(1=n=32) RORn循环右移n位(1=n=31) RRX循环右移1位,带扩展 type Rs 其中type为上面ASR、LS

11、L、LSR、ROR中的一种;Rs为提供移位量的寄存器,仅使用最低有效字节4.2)ADD、SUB、RSB、ADC、SBC和RSC1opcondSRd,Rn,Operand2其中:op 是上面众多指令中的一个S 可选后缀,会根据结果来更新条件码标志Rd 结果寄存器Rn 保存第一操作数的寄存器Operand2 第二操作数ADD 表示Rn加Operand2的值存到RdSUB 表示Rn减去Operand2RSB 表示Operand2减去RnADC 将Rn和Operand2相加后再加上进位标志SBC 从Rn的值中减去Operand2的值,若进位标志是清零的,则结果减去1RSC 从Operand2中减去Rn

12、的值,若进位是清零的,则结果减去14.3)AND、ORR、EOR和BIC1opcondSRd,Rn,Operand2其中:AND是与、ORR是或、EOR是异或和BIC是位清零都是Rn和Operand2中的值做处理,然后结果保存在Rd中BIC 用于将Rn中的位于Operand2中相应位的反码,进行与操作。4.3)MOV和MVN 传送与传送非1MOVcondSRd,Operand22MVNcondSRd,Operand2MOV将Operand2中的值拷贝到Rd中而MVN将Operand2的值进行按位逻辑非之后再传送到Rd4.4)CMP和CMN 比较与比较反值1CMPcondRn,Operand22

13、CMNcondRn,Operand2CMP比较大小,从Rn中减去Operand2的值,但丢弃结果,更新标志位,指令的主要目的是更新标志位CMN是将Rn和Operand2相加,丢弃结果再更新标志位。4.5)TST和TEQ 测试和测试相等1TSTcondRn,Operand22TEQcondRn,Operand2TST对Rn和Operand2的值进行按位与操作,更新标志位,丢弃结果TEQ对Rn和Operand2的值进行异或操作,更新标志位,丢弃结果4.6)CLZ 前导零计数1CLZcondRd,RmRd 结果寄存器,不允许是R15Rm 操作数寄存器。CLZ对Rm中的前导零的个数进行计数,结果放在R

14、d中,若Rm全为0,则结果为32 若位31是1,则结果为04.7)MUL和MLA 乘法和乘加运算1MULcondSRd,Rm,Rs2MLAcondSRd,Rm,Rs,Rn其中:Rd 结果寄存器,不能使R15Rm,Rs,Rn 操作寄存器,不能是R15,Rd不能和Rm相同MUL 将Rm和Rs相乘,并将最低有效32位结果放在Rd中MLA 将Rm和Rs相乘,再加上Rn的值,将最低有效32位结果放在Rd中4.8)UMULL、UMLAL、SMULL和SMLAL 无符号和带符号长整数乘法和乘加,结果是64位1opcondSRdLo,RdHi,Rm,Rs其中:RdLo和RdHi 是结果寄存器Rm和Rs 是操作

15、数寄存器UMULL 将Rm和Rs中的值解释为无符号整数。将两数相乘,并将结果的最低32位放RdLo中,高32位放RdHi中UMLAL 将Rm和Rs中的值解释为无符号整数。将两数相乘,并将结果加回到RdLo和RdHi的64位无符号整数上。SMULL 将Rm和Rs中的值解释为有符号补码整数。将两数相乘,并将结果的最低32位放RdLo中,高32位放RdHi中SMLAL 将Rm和Rs中的值解释为有符号补码整数。并将结果加回到RdLo和RdHi的64位无符号整数上。5)ARM转移指令5.1)B和BL 跳转指令1Bcondlabel2BLcondlabel其中:label 是程序相对偏移表达式。两条指令都

16、会令程序转移到label上,而BL还会将原来的下一条指令地址保存在R14上6)ARM协处理指令7)其他指令7.1)SWI 软件中断7.2)MRS 将CPSR或SPSR的内容保存到寄存器中1MRScondRd,psr其中:Rd 目标寄存器,Rd不允许为R15psr CPSR或SPSR7.3)MSR 将立即数或通用寄存器的内容加载到CPSR或SPSR的指定区域1MSRcond_,#immed_8r2MSRcond_,Rm其中:psr即是CPSR或SPSRfileds是制定传送区域,可以是 c 控制域屏蔽字节(PSR7:0) x 扩展域屏蔽字节(PSR15:8) s 状态域屏蔽字节(PSR23:16

17、) f 标志域屏蔽字节(PSR31:24)8)伪指令8.1)ADR 将程序的相对偏移或寄存器相对偏移地址加载到寄存器中1ADRcondregister,expr其中:register 是加载的寄存器expr 是程序相对偏移或寄存器相对偏移表达式,取值可以是非字节对齐地址-255255 字节对齐地址-10201020请注意,这条指令是用来获取相对偏移地址的。即是用当前PC的值,去减去某一个适当的值(编译器自动计算),从而得到expr这个标号的相对地址,将这个标号的相对于当前pc的偏移地址存储到register中。正是因为这样,这条指令才是一条伪指令,这样的好处是可以绕过程序入口地址的影响,而始终能跳转到准确的地址,因为B这样的跳转指令是跳转到绝对地址上的,而ADR可以获取到一个相对于当前PC的地址,所以用处非常大。8.2)LDR 用常量或地址加载寄存器1LDRcondregister,=expr|label-expr其中:register 加载寄存器expr 赋值成数字常量label-expr 程序相对偏移或外部表达式汇编器可自动识别数字常量,从而完成对register赋值的操作。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2