版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ARM汇编语言编程汇编语言编程主要内容主要内容n数据处理指令数据处理指令n数据传送指令数据传送指令n控制流指令控制流指令n指示符与伪指令指示符与伪指令n汇编语言的程序结构汇编语言的程序结构第一节第一节数据处理指令数据处理指令n功能:完成寄存器数据的算术和逻辑操作功能:完成寄存器数据的算术和逻辑操作n原则:原则:操作数操作数32位,来自寄存器或者指令中的立即数位,来自寄存器或者指令中的立即数如果有结果,结果也如果有结果,结果也32位宽,存放于寄存器中位宽,存放于寄存器中每个操作数寄存器与结果寄存器在指令中单独每个操作数寄存器与结果寄存器在指令中单独指定,采用指定,采用3地址模式地址模式数据处理指
2、令数据处理指令n简单的寄存器操作简单的寄存器操作ADD r0,r1,r2;r0:=r1+r2将将r1与与r2相加后结构存放于相加后结构存放于r0中中操作数的顺序:操作数的顺序:n第一个为结果寄存器第一个为结果寄存器r0n第二个为第一操作数第二个为第一操作数r1n第三个为第二操作数第三个为第二操作数r2数据处理指令数据处理指令n算术操作算术操作n对两个对两个32位操作数进行二进制算术操作位操作数进行二进制算术操作ADD r0,r1,r2 ;r0:=r1+r2ADC r0,r1,r2 ;r0:=r1+r2+CSUB r0,r1,r2 ;r0:=r1-r2SBC r0,r1,r2 ;r0:=r1-r
3、2+C-1RSB r0,r1,r2 ;r0:=r2-r1RSC r0,r1,r2 ;r0:= r2-r1+C-1数据处理指令数据处理指令n按位逻辑操作按位逻辑操作n对输入操作数的对应位进行指定的布尔逻对输入操作数的对应位进行指定的布尔逻辑操作辑操作AND r0,r1,r2;r0:=r1 and r2ORR r0,r1,r2;r0:=r1 or r2EOR r0,r1,r2;r0:=r1 xor r2BIC r0,r1,r2;r0:=r1 and not r2数据处理指令数据处理指令n寄存器传送操作寄存器传送操作n将第二操作数将第二操作数(或者按位取反或者按位取反)传送到指定的传送到指定的目的寄
4、存器目的寄存器MOV r0,r2;r0:=r2MVN r0,r2;r0:=not r2数据处理指令数据处理指令n比较操作比较操作n不产生结果,仅根据所选择的操作设置不产生结果,仅根据所选择的操作设置CPSR中的条件代码位中的条件代码位CMP r1,r2;根据;根据r1-r2的结果设置的结果设置ccCMN r1,r2;根据;根据r1+r2的结果设置的结果设置ccTST r1,r2;根据;根据r1 and r2的结果设置的结果设置ccTEQ r1,r2;根据;根据r1 xor r2的结果设置的结果设置cc数据处理指令数据处理指令n立即数操作立即数操作ADD r3,r3,1;r3:=r3+1AND
5、r8,r7,&ff;r8:=r77:0n立即数通过立即数通过“”表示,且在表示,且在32位指令中位指令中编码,编码方式为:编码,编码方式为:立即数(立即数(0255)22n0n12n12数据处理指令数据处理指令n寄存器移位操作寄存器移位操作ADD r3,r2,r1,LSL 3;r3:=r2+8r1n移位指令与移位指令与ALU操作合并在一个指令周期操作合并在一个指令周期里进行里进行数据处理指令数据处理指令数据处理指令数据处理指令n移位操作包括:移位操作包括:操作码操作码说明说明操作码操作码说明说明ASR #n算术右移算术右移n位位ROR #n循环右移循环右移n位位LSL #n逻辑左移逻辑
6、左移n位位RRX带扩展的循环右移带扩展的循环右移1位位LSR #n逻辑右移逻辑右移n位位Type RsType为移位的一种类型,为移位的一种类型,Rs为偏移量寄存器,低为偏移量寄存器,低8位有效。位有效。LSLLSL移位操作:移位操作:0LSRLSR移位操作:移位操作:0ASRASR移位操作:移位操作:RORROR移位操作:移位操作:RRXRRX移位操作:移位操作:C数据处理指令数据处理指令数据处理指令数据处理指令n条件码设置与使用条件码设置与使用p任何数据处理指令都能设置条件码(任何数据处理指令都能设置条件码(N,Z,C,V)p通过带通过带“S”操作码指明操作码指明两个两个64位数的加法:位
7、数的加法:ADDS r2,r2,r0;低低32位相加,进位输出位相加,进位输出CADC r3,r3,r1;再加到高再加到高32位中位中p比较操作只设置条件码,没有数据结果比较操作只设置条件码,没有数据结果p条件码还可以用于条件转移指令来控制程序流条件码还可以用于条件转移指令来控制程序流第二节第二节数据传送指令数据传送指令数据传送指令数据传送指令n功能:完成寄存器数据与存储器数据的传送功能:完成寄存器数据与存储器数据的传送n包括三种基本的数据传送指令:包括三种基本的数据传送指令:单寄存器单寄存器Load/StoreLoad/Store指令指令多寄存器多寄存器Load/StoreLoad/Stor
8、e指令指令单寄存器交换(单寄存器交换(SWPSWP)指令)指令数据传送指令数据传送指令n单寄存器单寄存器Load/StoreLoad/Store指令指令支持的寻址方式:支持的寻址方式:n寄存器间接寻址寄存器间接寻址n基址偏移寻址基址偏移寻址n基址变址寻址基址变址寻址后两种基于第一种寻址方式后两种基于第一种寻址方式LDR r0,r1LDR r0,r1;r0:=mem32r1r0:=mem32r1STR r0,r1STR r0,r1;mem32r1:=r0mem32r1:=r0数据传送指令数据传送指令n单寄存器单寄存器Load/StoreLoad/Store指令指令考虑一个程序,完成从考虑一个程序
9、,完成从TABLE1TABLE1向向TABLE2TABLE2拷贝数据:拷贝数据:COPYCOPYADRADRr1,TABLE1r1,TABLE1;r1r1指向指向TABLE1TABLE1ADRADRr2,TABLE2r2,TABLE2;r2r2指向指向TABLE2TABLE2LOOPLOOPLDRLDRr0r0,r1r1;取;取TABLE1TABLE1第一个数据第一个数据STRSTRr0r0,r2r2;拷贝到;拷贝到TABLE2TABLE2ADDADDr1,r1,#4r1,r1,#4;r1r1进一个字进一个字ADDADDr2,r2,#4r2,r2,#4;r2r2进一个字进一个字?;拷贝多字,返
10、回;拷贝多字,返回LOOPLOOPTABLE1TABLE1;数据源;数据源TABLE2TABLE2;目标;目标数据传送指令数据传送指令n单寄存器基址偏移寻址单寄存器基址偏移寻址Load/StoreLoad/Store指令指令前变址寻址前变址寻址 LDRLDRr0r0,r1r1,44; r0:r0:mem32r1mem32r144 LDR LDRr0r0,r1r1,44!; r0:r0:mem32r1mem32r144 ; r1:r1:r1r14 4采用带采用带“!”实现基址寄存器的自动变址,减实现基址寄存器的自动变址,减小了代码长度和指令执行时间小了代码长度和指令执行时间数据传送指令数据传送指
11、令n单寄存器基址偏移寻址单寄存器基址偏移寻址Load/StoreLoad/Store指令指令后变址寻址后变址寻址 LDRLDRr0r0,r1r1,4 4; r0:r0:mem32r1mem32r1 ; r1:r1:r1r14 4不再采用不再采用“!”,因为立即数偏移量的惟一用,因为立即数偏移量的惟一用途就是实现基址寄存器的自动变址途就是实现基址寄存器的自动变址数据传送指令数据传送指令n单寄存器单寄存器Load/StoreLoad/Store指令指令考虑一个程序,完成从考虑一个程序,完成从TABLE1TABLE1向向TABLE2TABLE2拷贝数据:拷贝数据:COPYCOPYADRADRr1,T
12、ABLE1r1,TABLE1;r1r1指向指向TABLE1TABLE1ADRADRr2,TABLE2r2,TABLE2;r2r2指向指向TABLE2TABLE2LOOPLOOPLDRLDRr0r0,r1r1,4 4;取;取TABLE1TABLE1第一个数据第一个数据STRSTRr0r0,r2r2,4 4;拷贝到;拷贝到TABLE2TABLE2?;拷贝多字,返回;拷贝多字,返回LOOPLOOPTABLE1TABLE1;数据源;数据源TABLE2TABLE2;目标;目标代码长度减小,指令执行速度更快代码长度减小,指令执行速度更快数据传送指令数据传送指令n多寄存器多寄存器Load/StoreLoad
13、/Store指令指令 LDMIA r1LDMIA r1,r0,R2,R5r0,R2,R5 ;r0:r0:mem32r1mem32r1 ;r2:r2:mem32r1mem32r144 ;r5:r5:mem32r1mem32r188p传输次序按照传输次序按照r0-r15r0-r15增大顺序增大顺序p可以用一条指令同时存取多个寄存器可以用一条指令同时存取多个寄存器p寻址模式更加有限寻址模式更加有限数据传送指令数据传送指令n多寄存器多寄存器Load/StoreLoad/Store指令两种最有用的寻址指令两种最有用的寻址方式:方式:堆栈寻址堆栈寻址 堆栈是一种后进先出的存储形式,支持动堆栈是一种后进先出
14、的存储形式,支持动态存储器分配态存储器分配块拷贝寻址块拷贝寻址 把一个数据块从存储器一个位置拷贝到另把一个数据块从存储器一个位置拷贝到另一个位置一个位置可以组合出四种类型的堆栈方式:可以组合出四种类型的堆栈方式:满递增满递增:堆栈向上增长,堆栈指针指向内含有效数据项:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如的最高地址。指令如LDMFA、STMFA等;等; 空递增空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如空位置。指令如LDMEA、STMEA等;等; 满递减满递减:堆栈向下增长,堆栈指针指向内含有效数据项:堆栈向下增长
15、,堆栈指针指向内含有效数据项的最低地址。指令如的最低地址。指令如LDMFD、STMFD等;等;空递减空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如位置。指令如LDMED、STMED等。等。 堆栈寻址堆栈寻址 多寄存器传送指令用于将一块数据从存储多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。器的某一位置拷贝到另一位置。STMIA R0!,R1-R7;将将R1R7的数据保存到存储器中。的数据保存到存储器中。;存储指针在保存第一个值之后增加,存储指针在保存第一个值之后增加,;增长方向为向上增长。增长方向为向上增长。STMIB
16、R0!,R1-R7;将将R1R7的数据保存到存储器中。的数据保存到存储器中。;存储指针在保存第一个值之前增加,存储指针在保存第一个值之前增加,;增长方向为向上增长。增长方向为向上增长。 块拷贝寻址块拷贝寻址 增加增加 之前之前STMIBSTMFALDMIBLDMED 之后之后STMIASTMEALDMIALDMFD 减少减少 之前之前LDMDBLDMEASTMDBSTMFD 之后之后LDMDALDMFASTMDASTMED 向上生长向上生长 向下生长向下生长 满满 空空 满满 空空 增长的方向增长的方向增长的先后增长的先后多寄存器传送指令映射多寄存器传送指令映射第三节第三节控制流指令控制流指令
17、控制流指令控制流指令n功能:使指令执行切换到不同的地址功能:使指令执行切换到不同的地址n按照切换方式可以分为:按照切换方式可以分为:永久转移转移指令(永久转移转移指令(B B)保存返回地址以恢复原来的执行顺序(保存返回地址以恢复原来的执行顺序(BLBL)陷入系统代码(陷入系统代码(SWISWI)控制流指令控制流指令n转移指令(转移指令(BranchBranch)B LabelB LabelLabelLabel p使处理器由顺序执行指令转移到使处理器由顺序执行指令转移到LabelLabel处的指令,处的指令,利用的寻址方式是利用的寻址方式是PCPC相对寻址。相对寻址。p转移可以有条件进行条件转移
18、:通过转移可以有条件进行条件转移:通过CPSRCPSR条条件码判断转移条件是否满足。件码判断转移条件是否满足。控制流指令控制流指令n条件转移条件转移一个典型的循环控制指令序列:一个典型的循环控制指令序列:MOV r0MOV r0,0 0;计数器初始化;计数器初始化LOOPLOOPADD r0,r0,#1ADD r0,r0,#1;循环计数器加;循环计数器加1 1CMP r0,#10CMP r0,#10;循环条件比较;循环条件比较BNE LOOPBNE LOOP;不相等,返回;不相等,返回;否则循环中止;否则循环中止条件助记符条件助记符标志标志含义含义BEQZ=1相等相等BNEZ=0不相等不相等B
19、CS/BHSC=1无符号数大于或等于无符号数大于或等于BCC/BLOC=0无符号数小于无符号数小于BMIN=1负数负数BPLN=0正数或零正数或零BVSV=1溢出溢出BVCV=0没有溢出没有溢出BHIC=1,Z=0无符号数大于无符号数大于BLSC=0,Z=1无符号数小于或等于无符号数小于或等于BGEN=V有符号数大于或等于有符号数大于或等于 BLTN!=V有符号数小于有符号数小于 BGTZ=0,N=V有符号数大于有符号数大于 BLEZ=1,N!=V有符号数小于或等于有符号数小于或等于 BAL/B任何任何无条件执行无条件执行 (指令默认条件指令默认条件) 转移条件控制流指令控制流指令CMP r0
20、,#5CMP r0,#5BEQ BYPASSBEQ BYPASSADD r1ADD r1,r1r1,r0r0 SUB r1SUB r1,r1r1,r2r2BYPASSBYPASSn条件执行所有条件执行所有ARMARM指令可以条件执行指令可以条件执行CMP r0,#10CMP r0,#10ADDNE r1ADDNE r1,r1r1,r0r0 SUBNE r1SUBNE r1,r1r1,r2r2新的指令短小又快速新的指令短小又快速控制流指令控制流指令if(a=b)&(c=d) e+;if(a=b)&(c=d) e+;CMP r0CMP r0,r1r1 CMPEQ r2CMPEQ r
21、2,r3r3ADDEQ r4ADDEQ r4,r4r4,1 1n巧妙利用条件执行的例子巧妙利用条件执行的例子控制流指令控制流指令n转移和链接指令转移和链接指令在转移到子程序的同时,保存返回地址在转移到子程序的同时,保存返回地址r14r14BL SUBRBL SUBR;转移到;转移到SUBRSUBR;返回到这里;返回到这里SUBRSUBR;子程序入口;子程序入口MOV pc,r14MOV pc,r14;返回;返回如果存在子程序嵌套,则必须先保存好如果存在子程序嵌套,则必须先保存好r14r14,否,否则会被新的调用覆盖则会被新的调用覆盖控制流指令控制流指令n子程序的返回指令子程序的返回指令n从叶子
22、程序返回从叶子程序返回 MOV pc,r14MOV pc,r14n从一般程序返回:从一般程序返回:利用堆栈多寄存器操作指令利用堆栈多寄存器操作指令LDMLDMSUB1SUB1STMFD r13STMFD r13!,!,r0-r2,r14 r0-r2,r14 ;保存工作寄存器和链接;保存工作寄存器和链接BL SUB2BL SUB2LDMFD r13LDMFD r13!,!,r0-r2,pc r0-r2,pc ;恢复工作寄存器并返回;恢复工作寄存器并返回nSWISWI软件中断软件中断处理器进入管理(监控)模式,从固定向量地处理器进入管理(监控)模式,从固定向量地址址0 x000000080 x00
23、000008取指取指通过特定的监控调用才能访问系统级函数,实通过特定的监控调用才能访问系统级函数,实现受控的保护机制现受控的保护机制这些函数包括对外界硬件寄存器的访问,大量这些函数包括对外界硬件寄存器的访问,大量的的I/OI/O操作操作控制流指令控制流指令第四节第四节指示符与伪指令指示符与伪指令n指示符主要包括:指示符主要包括:p符号定义(符号定义(Symbol Definition)指示符)指示符p数据定义(数据定义(Data Definition)指示符)指示符p汇编控制(汇编控制(Assembly Control)指示符)指示符指示符与伪指令指示符与伪指令符号定义指示符符号定义指示符符号
24、定义指示符用于定义符号定义指示符用于定义ARM汇编程序中的变量、对变量汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。赋值以及定义寄存器的别名等操作。 常见的符号定义指示符有如下几种:常见的符号定义指示符有如下几种:p定义全局变量定义全局变量 GBLA、GBLL和和GBLSp定义局部变量定义局部变量 LCLA、LCLL和和LCLSp对变量赋值对变量赋值 SETA、SETL、SETSDCB (Distribute Continuous Byte)语法语法标号标号 DCB 表达式表达式 作用作用 分配一片连续的字节存储单元并用指示符中指分配一片连续的字节存储单元并用指示符中指定的表达式初始
25、化。其中,表达式可以为定的表达式初始化。其中,表达式可以为0255的数字或字符串。的数字或字符串。DCB也可用也可用“=”代替。代替。 实例实例 Str DCB “This is a test!”DCW语法语法 标号标号 DCW 表达式表达式 作用作用 分配一片连续的半字存储单元并用指示符中指分配一片连续的半字存储单元并用指示符中指定的表达式初始化。其中,表达式可以为程序标定的表达式初始化。其中,表达式可以为程序标号或数字表达式。号或数字表达式。 实例实例 DataTest DCW 1, 2, 3DCD语法语法标号标号 DCD 表达式表达式 作用作用 分配一片连续的字存储单元并用指示符中指定分
26、配一片连续的字存储单元并用指示符中指定的表达式初始化。其中,表达式可以为程序标号的表达式初始化。其中,表达式可以为程序标号或数字表达式。或数字表达式。DCD也可用也可用“&”代替。代替。实例实例 DataTest DCD 4, 5, 6SPACE语法语法 标号标号 SPACE 表达式表达式 作用作用 分配一片连续的存储区域并初始化为分配一片连续的存储区域并初始化为0。其中,。其中,表达式为要分配的字节数。表达式为要分配的字节数。SPACE也可用也可用“”代代替。替。 实例实例DataTest SPACE 100AREA语法语法AREA段名段名属性属性1, 属性属性2, 作用作用 用于定
27、义一个代码段或数据段。用于定义一个代码段或数据段。段名若以数字开头,则该段名需用段名若以数字开头,则该段名需用“|”括起来,如括起来,如|1_test| 。属性字段表示该代码段(或数据段)的相关属性,属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。多个属性用逗号分隔。AREA常用的属性如下:常用的属性如下:CODE 定义代码段定义代码段DATA 定义数据段定义数据段READONLY 指定本段为只读,代码段默认为指定本段为只读,代码段默认为READONLY READWRITE 指定本段为可读可写,数据段的默认为指定本段为可读可写,数据段的默认为READWRITEALIGN语法语法
28、ALIGN表达式表达式,偏移量,偏移量 作用作用 通过添加填充字节的方式,使当前位置满足一定通过添加填充字节的方式,使当前位置满足一定的对齐方式。其中,表达式的值用于指定对齐方式,的对齐方式。其中,表达式的值用于指定对齐方式,可能的取值为可能的取值为2的幂,如的幂,如1、2、4、8、16等。若未等。若未指定表达式,则将当前位置对齐到下一个字的位置。指定表达式,则将当前位置对齐到下一个字的位置。偏移量也为一个数字表达式,若使用该字段,则当偏移量也为一个数字表达式,若使用该字段,则当前位置的对齐方式为:前位置的对齐方式为:2的表达式次幂的表达式次幂+偏移量。偏移量。 实例实例 AREA Init,
29、CODE,READONLY ALIGN ENTRY语法语法ENTRY 作用作用指定汇编程序的入口点指定汇编程序的入口点实例实例 AREAInit,CODE,READONLY ENTRY END语法语法END 作用作用 通知编译器已经到了源程序的结尾通知编译器已经到了源程序的结尾实例实例 AREAInit,CODE,READONLY END EQU语法语法名称名称 EQU 表达式表达式, 类型类型 作用作用为程序中的常量、标号等定义一个等效的字符为程序中的常量、标号等定义一个等效的字符名称。其中名称。其中EQU可用可用“*”代替。名称为代替。名称为EQU指示指示符定义的字符名称。符定义的字符名称
30、。 实例实例 Test EQU 50EXPORT(或(或GLOBAL)语法语法EXPORT 标号标号 作用作用声明一个全局的标号,该标号可在其他的文件声明一个全局的标号,该标号可在其他的文件中引用。标号在程序中区分大小写。中引用。标号在程序中区分大小写。实例实例 AREAInit,CODE,READONLY EXPORTStestIMPORT语法语法IMPORT 标号标号 作用作用 通知编译器要使用的标号在其他的源文件中定通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引用。而且无论当前源文义,但要在当前源文件中引用。而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件
31、是否引用该标号,该标号均会被加入到当前源文件的符号表中。件的符号表中。 实例实例 AREAInit,CODE,READONLY IMPORTmainEXTERN语法语法EXTERN 标号标号作用作用 通知编译器要使用的标号在其他的源文件中定义,通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引用,如果当前源文件实际并但要在当前源文件中引用,如果当前源文件实际并未引用该标号,该标号就不会被加入到当前源文件未引用该标号,该标号就不会被加入到当前源文件的符号表中。的符号表中。实例实例AREAInit,CODE,READONLY EXTERNmain ARMARM伪指令不属于伪指令不属于
32、ARMARM指令集中的指令,是为指令集中的指令,是为了编程方便而定义的。伪指令可以像其它了编程方便而定义的。伪指令可以像其它ARMARM指指令一样使用,但在编译时这些指令将被等效的令一样使用,但在编译时这些指令将被等效的ARMARM指令代替。指令代替。 ARM伪指令有四条:伪指令有四条:p ADR伪指令伪指令p ADRL伪指令伪指令p LDR伪指令伪指令p NOP伪指令伪指令伪指令伪指令伪指令:伪指令:ADR小范围地址读取伪指令小范围地址读取伪指令 ADR ADR伪指令将基于伪指令将基于PCPC相对偏移的地址值或基于寄存器相对偏移的地址相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中
33、。在汇编编译器编译源程序时,值读取到寄存器中。在汇编编译器编译源程序时,ADRADR伪指令被编译器替伪指令被编译器替换成一条合适的指令。通常,编译器用一条换成一条合适的指令。通常,编译器用一条ADDADD指令或指令或SUBSUB指令来实现该指令来实现该ADRADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。ADRcond register,exprADRADR伪指令格式伪指令格式指令执行的条件码指令执行的条件码加载的目标寄存器加载的目标寄存器地址表达式地址表达式 地址表达式地址表达式exprexpr的取指范围:的取指范围:
34、当地址值不是字对齐时,其取指范围为当地址值不是字对齐时,其取指范围为-255-255255255;当地址值是字对齐时,其取指范围为当地址值是字对齐时,其取指范围为-1020-102010201020;当地址值是当地址值是1616字节对齐时,其取指范围将更大。字节对齐时,其取指范围将更大。 伪指令举例如下:伪指令举例如下:LOOP MOV R1,#0 xF0 ADR R2,LOOP ;将;将LOOP的地址放人的地址放人R2 ADR R3,LOOP + 4 ;将;将LOOP+4的地址放人的地址放人R3 ADRLADRL伪指令将基于伪指令将基于PCPC相对偏移的地址值或基于寄存器相对偏移的地相对偏移
35、的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比址值读取到寄存器中,比ADRADR伪指令可以读取更大范围的地址伪指令可以读取更大范围的地址 。在汇编编。在汇编编译器编译源程序时,译器编译源程序时,ADRLADRL伪指令被编译器替换成两条合适的指令。若不伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。能用两条指令实现,则产生错误,编译失败。ADRLcond register,exprADRLADRL伪指令格式伪指令格式指令执行的条件码指令执行的条件码加载的目标寄存器加载的目标寄存器地址表达式地址表达式 地址表达式地址表达式exprexpr的取指范围:的取指范
36、围:当地址值不是字对齐时,其取指范围为当地址值不是字对齐时,其取指范围为-64K-64K64K64K;当地址值是字对齐时,其取指范围为当地址值是字对齐时,其取指范围为-256K-256K256K256K;当地址值是当地址值是1616字节对齐时,其取指范围将更大。字节对齐时,其取指范围将更大。伪指令伪指令:ADRL中等范围的地址读取中等范围的地址读取伪指令举例如下:伪指令举例如下:ADRL R0,DATABUFADRL R1,DATABUF+80DATABUFSPACE 100 ;定义;定义100字节缓冲区字节缓冲区 可以用可以用ADRL加载地址,实现程序跳转加载地址,实现程序跳转 LDRLDR
37、伪指令用于加载伪指令用于加载3232位的立即数或一个地址值到指定寄存器。在汇位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,编编译源程序时,LDRLDR伪指令被编译器替换成一条合适的指令。若加载的伪指令被编译器替换成一条合适的指令。若加载的常数未超出常数未超出MOVMOV或或MVNMVN的范围,则使用的范围,则使用MOVMOV或或MVNMVN指令代替该指令代替该LDRLDR伪伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDRLDR指指令从文字池读出常量。令从文字池读出常量。LDRcond register,=ex
38、prLDRLDR伪指令格式伪指令格式指令执行的条件码指令执行的条件码加载的目标寄存器加载的目标寄存器基于基于PCPC的地址表达式的地址表达式或外部表达式或外部表达式伪指令伪指令: LDR大范围的地址读取大范围的地址读取伪指令举例如下:伪指令举例如下:LDR R0,=0 x12345678 ;加载;加载32位立即数位立即数0 x12345678LDR R0,=DATA_BUF+60 ;加载;加载DATA_BUF地址地址+60LTORG ;声明文字池;声明文字池伪指令伪指令: LDR大范围的地址读取大范围的地址读取注意注意:1.从指令位置到文字池的偏移量从指令位置到文字池的偏移量必须小于必须小于4
39、KB;2.与与ARM指令的指令的LDR相比,伪指相比,伪指令的令的LDR的参数有的参数有“=”号。号。 NOP伪指令在汇编时将会被替代成ARM中的空操作,比如可能为“MOV R0,R0”指令等。NOPNOP伪指令格式:伪指令:NOP空操作伪指令空操作伪指令第五节第五节汇编语言的程序结构汇编语言的程序结构n简单的简单的ARM程序程序;文件名:文件名:TEST1.S ;功能:实现两个寄存器相加功能:实现两个寄存器相加 ;说明:使用说明:使用ARMulate软件仿真调试软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段声明代码段Example1 ENTRY ;标识程序入口标识程序入口 CODE32 ;声明声明32位位ARM指令指令START MOVR0,#0 ;设置参数设置参数 MOVR1,#10LOOPBLADD_SUB ;调用子程序调用子程序ADD_SUB BLOOP ;跳转到跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回子程序返回
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年钢结构厂房租赁合同模板下载3篇
- 2024年购物中心物业管理合同
- 2024年龙门吊销售协议:固定式起重机购销协议版B版
- 2024版煤炭经营场地租赁合同范文
- 《协议遗失证明:2024年作废协议补充协议》版
- 2024某企业与某大学关于共建实验室的校企合作协议
- 2025年度船舶租赁与船舶拆解回收合同样本3篇
- 2024春季建筑钢材交易协议一
- 幼儿园工作总结希望与信任
- 2024零售业销售协议标准化文本版B版
- 汽车OTS工程样件认可流程课件
- 物流公司出纳年终工作总结
- 明细账(三栏式)模板
- 三年级数学思维训练【奥数举一反三】附部分答案解析
- 2023年数学竞赛AMC8真题A卷(含答案)
- 审计控制活动方案
- 单位洗车房管理制度
- 2023年医疗软件实施工程师年度总结及下年规划
- 广西壮族自治区钦州市浦北县2022-2023学年七年级上学期期末英语试题
- 化验员绩效考核细则
- 动力学全套课件
评论
0/150
提交评论