- 1、本文档共146页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章 ARM体系结构与指令集 主要内容 ARM处理器的寻址方式 ARM指令集合 Thumb指令集合 伪指令 ARM处理器的寻址方式 寻址方式:根据指令编码中给出的地址码字段来寻找真实操作数的方式。 立即寻址 寄存器寻址 寄存器偏移寻址 寄存器间接寻址 基址加偏址寻址 多寄存器寻址 相对寻址 堆栈寻址 块拷贝寻址 (1).立即寻址 有效立即数问题 该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。 (2).寄存器寻址 (3).寄存器偏移寻址 第二操作数移位方式 LSL:逻辑左移,空出的最低有效位用0填充。 LSR:逻辑右移,空出的最高有效位用0填充。 (1).指令格式:第2个操作数 (4).寄存器间接寻址 (5).基址加偏址寻址 有三种加偏址的方式: 前变址模式(不修改基址寄存器): ——先基址+偏址,生成操作数地址,做指令指定的操作。 偏移地址 ——可以是一个立即数,也可以是另一个寄存器,并且在加到基址寄存器前还可以经过移位操作,如下所示: LDR r0,[r1,r2] ;r0—mem32[r1+r2] LDR r0,[r1,r2,LSL #2] ;r0—mem32[r1+r2*4] 常用的是立即数偏移的形式。 (6).多寄存器寻址 (7). 相对寻址 (8).堆栈寻址 (8).堆栈寻址 (8).堆栈寻址 (8).堆栈寻址 (9).块拷贝寻址 4 种寻址操作: LDMIA / STMIA Increment After(先传送,后地址加4) LDMIB / STMIB Increment Before(先地址加4 ,后传送) LDMDA / STMDA Decrement After (先传送,后地址减4) LDMDB / STMDB Decrement Before (先地址减4,后传送) (3). ARM存储器访问指令 ARM指令集合 (1).指令格式 LDR R0,[R1] ;读取R1地址上的存储器单元内容,执行条件为AL BEQ D1 ;分支指令,执行条件EQ,即相等则跳转到D1 ADDS R1,R1,#1 ;加法指令,R1+1=R1,影响CPSR;寄存器(S) (1).指令格式: (1).指令格式:第2个操作数 (1).指令格式:第2个操作数 (1).指令格式:第2个操作数 (2).条件码 2、ARM指令详解 数据处理指令; Load/Store指令; 程序状态寄存器处理指令; 跳转指令; 异常中断产生指令; 协处理器指令。 一、数据处理指令 ARM的数据处理指令主要完成寄存器中数据的算术和逻辑运算操作。 ARM数据处理指令的特点: 所有的操作数要么来自寄存器,要么来自立即数,不会来自存储器。 如果有结果,则结果一定是为32位宽,并且放在一个寄存器中,不会写入存储器。(有一个例外:长乘法指令产生64位结果) 每一个操作数寄存器和结果寄存器都在指令中独立指出,即:ARM指令采用3地址模式: Operation Rd, Rn, Rm ARM数据处理指令大致可分为6类: 算术运算指令: ADD ADC SUB SBC RSB RSC 逻辑运算指令: AND ORR EOR BIC 数据传送指令: MOV MVN 比较指令: CMP CMN 测试指令: TST TEQ 乘法指令:MUL MLA UMULL UMLAL SMULL SMLAL 上述指令只能对寄存器操作,不能针对存储器。 后缀s 数据处理指令可以选择s后缀,以影响状态标志。但是比较指令(cmp、cmn、tst和teq)不需要后缀s,它们总会直接影响cpsr中的状态标志。 在数据处理指令中,除了比较指令以外,其它的指令如果带有s后缀,同时又以pc为目标寄存器进行操作,则操作的同时从spsr恢复cpsr。比如: movs pc, #0xff /* cpsr = spsr; pc = 0xff */ adds pc, r1, #0xffffff00 /* cpsr = spsr; pc = r1 + 0xffffff00 */ ands pc, r1, r2 /* cpsr = spsr; pc = r1 r2; */ 如果在user或者system模式下使用带有s后缀的数据处理指令,同时以pc为目标寄存器,那么会产生不可预料的结果。因为user和system模式下没有spsr。 当选择后缀S时: 如果结果为负,则N标志位置1;否则清0。 如果结果为0,则Z标志位置1;否则清0。 如果是算术运算指令或比较指令时,C标志位设置为ALU的进位输出;否则设置
文档评论(0)