常用ARMv4指令集与汇编

上传人:枫** 文档编号:563914989 上传时间:2023-10-25 格式:DOC 页数:91 大小:803.50KB
返回 下载 相关 举报
常用ARMv4指令集与汇编_第1页
第1页 / 共91页
常用ARMv4指令集与汇编_第2页
第2页 / 共91页
常用ARMv4指令集与汇编_第3页
第3页 / 共91页
常用ARMv4指令集与汇编_第4页
第4页 / 共91页
常用ARMv4指令集与汇编_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《常用ARMv4指令集与汇编》由会员分享,可在线阅读,更多相关《常用ARMv4指令集与汇编(91页珍藏版)》请在金锄头文库上搜索。

1、常用ARM v4指令集与汇编 / 前言零零散散用了大概一周的时间,在常用ARM指令集与汇编(2003年12月1日)的基础上,大致学习了一遍ARM指令集和汇编,看的过程当中更正了一些错误的地方,并结合其它资料适当添加了一些容,也做了一些删减,现分享出来,希望能帮助到需要的人。文中必然还有一些错误还有待改进,有些地方还需要解释的更加详细,本人精力有限,希望有心的读者,订正并增加注释,最好也分享出来,以方便大家对ARM指令的深入理解。作为刚入行的新手,不谦虚的推荐几本书:ARM体系结构与编程-杜春雷,嵌入式系统体系结构、编程与设计-Raj Kamal著,贾建斌译,嵌入式系统:采用公开源代码和Stro

2、ngARM_XScale处理器-毛德操。这几本书到底好不好,看个人需求和喜好吧,仁者见仁智者见智。最后,感常用ARM指令集与汇编的原作者和其它资料的作者让我有机会学习我不熟悉的东西,。learllp2015-11-09目录常用ARM v4指令集与汇编I前言II目录IIIARM v4指令集与汇编1一、ARM处理器寻址方式1寄存器寻址1立即寻址1寄存器偏移寻址2寄存器间接寻址2基址寻址3多寄存器寻址3堆栈寻址3块拷贝寻址4相对寻址4二、指令集介绍5ARM指令集5指令格式5基本格式5第2个操作数51.immed_8r常数表达式52.Rm 寄存器方式63.Rm,shift寄存器移位方式6条件码7ARM

3、 存储器访问指令8LDR和STR8LDM和STM11SWP14ARM 数据处理指令15数据传送指令15算术逻辑运算指令16比较指令18乘法指令19ARM 跳转指令21ARM 协处理器指令22ARM 杂项指令24ARM 伪指令26Thumb 指令集29Thumb 指令集与 ARM 指令集的区别29跳转指令29数据处理指令29单寄存器加载和存储指令29批量寄存器加载和存储指令30Thumb 存储器访问指令30伪指令31符号定义伪指令32数据定义伪指令34报告伪指令39汇编控制伪指令41杂项伪指令43AREA45CODE16 和 CODE3246END46ENTRY46EQU47EXPORT 和 G

4、LOBAL47IMPORT 和 EXTERN47GET 和 INCLUDE48INCBIN48KEEP49NOFP49REQUIRE49PEQUIRE8 和 PRESERVE849RN49ROUT50ARM 伪指令50ADR50ADRL50LDR51NOP51LDFD51LDFS51三、ARM汇编程序设计51文件格式51ARM 汇编的一些规52汇编语句格式52标号52基于PC 的标号53基于寄存器的标号53绝对地址53局部标号53符号54常量54数字常数54字符常量54布尔常量55段定义55宏定义与其作用55子程序的调用56数据比较跳转57循环57数据块复制57栈操作58特殊寄存器定义与应用5

5、8散转功能58查表操作58长跳转59对信号量的支持59伪指令使用59一个完整的例子59外围部件控制60四、C与汇编混合编程60嵌汇编60嵌汇编的指令用法62嵌汇编器与 armasm 汇编器的差异63嵌汇编注意事项63访问全局变量65C与汇编相互调用65寄存器的使用规则66堆栈使用规则66参数传递规则66C程序调用汇编程序67调用汇编的C函数:67汇编程序调用C程序68五、ARM 指令集列表69ARM存储器访问指令表列表69ARM数据处理指令列表70ARM乘法指令列表71ARM跳转指令列表72ARM协处理器指令列表73ARM杂项指令列表74ARM伪指令列表75六、Thumb 指令集列表120Th

6、umb存储器访问指令列表120Thumb数据处理指令列表121Thumb跳转指令与软中断指令列表122Thumb伪指令列表123七、汇编预定义变量与伪指令124预定义的寄存器和协处理器名124通用寄存器124程序状态寄存器124浮点数寄存器124协处理器与协处理器寄存器125八、置变量列表125九、伪指令列表126十、指令条件码列表128十一、CPSR和SPSR分配图129ARM v4指令集与汇编ARM 处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制较为简单,具有 32 位 ARM 指令集和 16 位 Thumb 指令集。ARM 指令集效率高,但是代码密度低,而 Th

7、umb 指令集具有更好的代码密度,却仍然保持 ARM 的大多数性能上的优势,它是 ARM 指令集的子集,主要用于编译器设计。所有 ARM 指令都是可以有条件执行的,而 Thumb 指令仅有一条指令具备条件执行功能。ARM 程序和 Thumb 程序可相互调用,相互之间的状态切换开销几乎为零。一、ARM处理器寻址方式寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,ARM 处理器有 9 种基本寻址方式。寄存器寻址操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值操作。寄存器寻址指令举例如下:MOVR1,R2;R2 - R1SUBR0,R1,R2

8、;R1 - R2-R0立即寻址立即寻址指令中的操作码字段后面的地址码部分就是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(立即数)。立即寻址指令举例如下:SUBS R0,R0,#1 ;R01 -R0MOVR0,#0xff00;0xff00 -R0立即数要以“”为前缀,表示 16 进制数值时以“0x”表示。寄存器偏移寻址寄存器偏移寻址是 ARM 指令集特有的寻址方式,当第 2 操作数是寄存器偏移方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器偏移寻址方式指令举例如下:MOVR0,R2,LSL #3;R2 的值左移 3 位,结果放入

9、 R0,即 R0 = R2 * 8 ANDS R1,R1,R2,LSL R3;R2 的值左移 R3 位,然后和 R1 相与操作,结果放入 R1 可采用的移位操作如下:LSL:逻辑左移(Logical Shift Left),寄存器中字的低端空出的位补 0。LSR:逻辑右移(Logical Shift Right),寄存器中字的高端空出的位补 0。ASR:算术右移(Arithmetic Shift Right),移位过程中保持符号位不变,即如果源操作数为正数,则字的高端空出的位补 0,否则补 1。ROR:循环右移(Rotate Right),由字的低端移出的位填入字的高端空出的位。RRX:带扩展

10、的循环右移(Rotate Right extended by 1place),操作数右移一位,高端空出的位用原 C 标志值填充。各移位操作如下图所示:寄存器间接寻址寄存器间接寻址指令中的地址码给出的是一个通用寄存器编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下:LDRR1,R2;将 R2 中的数值作为地址,取出此地址中的数据保存在 R1 中SWPR1,R1,R2;将如中的数值作为地址,取出此地址中的数值与 R1 中的值交换基址寻址基址寻址是将基址寄存器的容与指令中给出的偏移量相加,形成操作数的有效地址,基址寻址用于访问基址附近的存储

11、单元,常用于查表,数组操作,功能部件寄存器访问等。基址寻址指令举例如下:LDRR2,R3,#0x0F ;将R3中的数值加0x0F作为地址,将该地址保存在R2中STRR1,R0,#-2 ;将R0中的数值减2作为地址,把R1中的容保存到此地址多寄存器寻址多寄存器寻址就是一次可以传送几个寄存器值,允许一条指令传送 16 个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:LDMIA R1!,R2-R7,R12 ;将 R1 单元中的数据读出到 R2R7,R12,R1自动加 1STMIA R0!,R3-R6,R10;将R3-R6,R10中的数据保存到R0,R0自动加1 使用多寄存器寻址指令时,寄存

12、器子集的顺序由小到大的顺序排列,连续的寄存器可用“”连接,否则用“,”分隔书写。堆栈寻址堆栈是特定顺序进行存取的存储区,操作顺序分为“后进先出”和“先进后出”,堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元就是堆栈的栈顶。存储器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈。向下生长:向低地址方向生长,称为递减堆栈。堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个要放入的空位置,称为空堆栈。这样就有 4种类型的堆栈表示。满递增:堆栈通过递增存储器的地址向上增长,堆栈指针指向堆栈含有效数据项的最高地址。指令如 LD

13、MFA,STMFA 等。空递增:堆栈通过递增存储器的地址向上增长,堆栈指针指向堆栈的第一个空位置。指令如 LDMEA,STMEA 等。满递减:堆栈通过递减存储器的地址向下增长,堆栈指针指向堆栈含有效数据项的最低地址。指令如 LDMFD,STMFD 等。空递减:堆栈通过递减存储器的地址向下增长,堆栈指针指向堆栈下的第一个空位置。指令如 LDMED,STMED 等。堆栈寻址指令举例如下:STMFDSP!,R1-R7,LR;将 R1R7,LR 入栈LDMFDSP!,R1-R7,LR;数据出栈,放入 R1R7,LR 寄存器块拷贝寻址多寄存器传送指令用于一块数据从存储器的某一位置拷贝到另一位置。块拷贝寻

14、址指令举例如下:STMIAR0!,R1-R7;将 R1R7 的数据保存到存储器中,存储器指针在保存第一;个值之后增加,增长方向为向上增长STMIBR0!,R1-R7;将 R1R7 的数据保存到存储器中,存储器指针在保存第一;个值之前增加,增长方向为向上增长STMDAR0!,R1-R7;将 R1R7 的数据保存到存储器中,存储器指针在保存第一;个值之后增加,增长方向为向下增长STMDBR0!,R1-R7;将 R1R7 的数据保存到存储器中,存储器指针在保存第一;个值之前增加,增长方向为向下增长相对寻址相对寻址是基址寻址的一种变通,由程序计数器 PC 提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:BLROUTE1;调用 ROUTE1 子程序BEQLOOP;条件跳转到 LOOP 标号处LOOPMOV R2,#2ROUTE1二、指令集介绍ARM指令集指令格式基本格式opcod

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号