ARM指令及汇编程序设计(I)

ARM指令及汇编程序设计(I)

ID:39302835

大小:377.10 KB

页数:30页

时间:2019-06-30

ARM指令及汇编程序设计(I)_第1页
ARM指令及汇编程序设计(I)_第2页
ARM指令及汇编程序设计(I)_第3页
ARM指令及汇编程序设计(I)_第4页
ARM指令及汇编程序设计(I)_第5页
资源描述:

《ARM指令及汇编程序设计(I)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ARM指令及汇编程序设计2Agenda寻址模式指令格式AAPCS规范寻址方式立即寻址SUBSR0,R0,#1;R0-1->R0MOVR0,#0xFF00;0xFF00->R0寄存器偏移寻址MOVR0,R2,LSL#3;R2的值左移3位,结果放入R0,即R0=R2*8寄存器间接寻址LDRR1,[R2];将R2中的数值作为地址,取出此地址中的数据保存在R1中基址寻址ImmediateOffset、RegisterOffsetScaledRegisterOffsetLDRR2,[R3,#0x0F];将R3中的数值加0x0F作为地址,取出此地址的数值保存在R2中多寄存器寻址LDMI

2、AR1!,{R2-R7,R12};将R1单元中的数据读出到R2-R7,R12,R1自动加1堆栈寻址STMFDSP!,{R1-R7,LR};将R1-R7,LR入栈。满递减堆栈块拷贝寻址STMIBR0!,{R1-R7};将R1-R7的数据保存到存储器中,存储器指针在保存第一个值之前增加,增加方向为向上增长相对寻址BLROUTE1;调用到ROUTE1子程序BEQLOOP;条件跳转到LOOP标号处...LOOPMOVR2,#2...ROUTE1...指令格式基本格式数据处理类{}{S},{,}内存访问类:

3、>{}{B}{T},<>内的项是必须的{}内的项是可选的opcode指令助记符,如LDR,STR等cond执行条件,如EQ,NE等S是否影响CPSR寄存器的值Rd目标寄存器Rn第一个操作数的寄存器operand2第二个操作数第二个操作数#immed_8r常数表达式,必须是一个8位常数的偶数次循环移位合法常量:0x3FC、0、0xF0000000、200、0xF0000001非法常量:0x1FE、511、0xFFFF、0x1010、0xF0000010ANDR1,R2,#0x0F;R2与0x0F,结果保存在R1LDRR0,

4、[R1],#-4;读取R1地址上的存储器单元内容,且R1=R1-4Rm寄存器方式,操作数位寄存器的数值SUBR1,R1,R2;R1-R2->R1MOVPC,R0;PC=R0,程序跳转到制定地址LDRR0,[R1],-R2;读取R1地址上的存储器单元内容并存入R0,且R1=R1-R2Rm,shift寄存器移位方式,将寄存器的移位结果作为操作数,但Rm值保持不变形式1:type#n其中type为ASR(算术右移)、LSL(逻辑左移)、ROR(循环右移)、RRX(带扩展的循环右移1位)中的一种ADDR1,R1,R1,LSL#3;R1=R1*8形式2:typeRs其中typeASR

5、(算术右移)、LSL(逻辑左移)、ROR(循环右移)中的一种;Rs是偏移量寄存器,低8位有效,若其值大于或等于32则第二个操作数的结果为0(ASR,ROR例外)ARM汇编程序设计文件格式汇编文件*.s引入文件*.INCC程序*.C头文件*.H汇编语句格式[标号]<指令

6、条件

7、S><操作数>[;注释]标号顶格写,指令不可顶格书写标号后没有:程序中可以有空行分行用(用于比较长的语句)常量数字常量十进制12,5,876,0十六进制0xFF,0x1N进制n-XXX,2-010111字符常量布尔常量段定义AREAHello,CODE,READONLYENTRYSTARTMOVR7,

8、#10MOVR6,#5ADDR6,R6,R7BENDARM汇编伪指令在ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,也就是不会生成机器码,仅仅是在编译器软件中起着格式化的作用,通常称这些特殊指令助记符为伪指令。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。         在ARM的汇编程序中,有如下几种伪指令:数据常量定义伪指令、数据变量定义伪指令、内存分配伪指令及其他伪指令。数据常量定义伪指令数据常量定义伪指令EQU用于为程序中的常量、标号等定

9、义一个等效的字符名称,类似于C语言中的#define。EQU语法格式:  名称EQU表达式{,类型};其中EQU可用“*”代替。         名称为EQU伪指令定义的字符名称,当表达式为32位的常量时,可以指定表达式的数据类型,可以有以下三种类型:CODE16、CODE32和DATA。数据变量定义伪指令(Cont.)数据变量定义伪指令用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。常见的数据变量定义伪指令有如下几种:    (1)GBLA、GBLL和GBLS语法格式:GBLA(GBLL或G

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。