arm汇编编程(示例)
代码段和数据段。
使用示例:
AREAInit,CODE,READONLY
该伪指令定义了一个代码段,段名为Init,属性为只读
2)、ENTRY
格式:ENTRY
用于指定汇编程序的入口点。一个源文件里最多只能有一个ENTRY(可以没有)。
3)、END
格式:END
用于通知编译器已经到了源程序的结尾。
4)、CODE16、CODE32
格式:CODE16(或CODE32)
CODE16伪指令通知编译器,其后的指令序列为16位的Thumb指令。
CODE32伪指令通知编译器,其后的指令序列为32位的ARM指令。
在使用ARM指令和Thumb指令混合编程的代码里,可用这两条伪指令进行切换
示例:
AREAInit,CODE,READONLY
CODE32;通知编译器其后的指令为32位的ARM指令
LDRR0,=NEXT+1;将跳转地址放入寄存器R0
BXR0;程序跳转到新的位置执行,并将处理器切换到Thumb工作状态
……
CODE16;通知编译器其后的指令为16位的Thumb指令
NEXTLDRR3,=0x3FF
……
END;程序结束
5)、EXPORT(或GLOBAL)
格式:EXPORT标号
export伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。
6)、IMPORT
格式:IMPORT标号
IMPORT伪指令用于通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引用
如果当前源文件实际并未引用该标号,该标号也会被加入到当前源文件的符号表中。
7)、EXTERN
格式:EXTERN标号
EXTERN伪指令用于通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引用
如果当前源文件实际并未引用该标号,该标号就不会被加入到当前源文件的符号表中。
8)、GET(或INCLUDE)
格式:GET文件名
GET伪指令用于将一个源文件包含到当前的源文件中,并将被包含的源文件在当前位置进行汇编处理。
汇编程序中常用的方法是在某源文件中定义一些宏指令,用EQU定义常量的符号名称,用MAP和FIELD定义结构化的数据类型,然后用GET伪指令将这个源文件包含到其他的源文件中。使用方法与C语言中的"include"相似。
GET伪指令只能用于包含源文件,包含目标文件需要使用INCBIN伪指令
示例:
AREAInit,CODE,READONLY
GETa1.s;通知编译器当前源文件包含源文件a1.s
GETC:\a2.s;通知编译器当前源文件包含源文件C:\a2.s……
END
9)、INCBIN
格式:INCBIN文件名
INCBIN伪指令用于将一个目标文件或数据文件包含到当前的源文件中
示例:
AREAInit,CODE,READONLY
INCBINa1.dat;通知编译器当前源文件包含文件a1.dat
INCBINC:\a2.txt;通知编译器当前源文件包含文件C:\a2.txt……
END
10)、ROUT
格式:{名称}ROUT
ROUT伪指令用于给一个局部变量定义作用范围。
在程序中未使用该伪指令时,局部变量的作用范围为所在的AREA,
而使用ROUT后,局部变量的作为范围为当前ROUT和下一个ROUT之间。
11)、ALIGN
格式:ALIGN{表达式{,偏移量}}
ALIGN伪指令可通过添加填充字节的方式,使当前位置满足一定的对其方式
表达式的值用于指定对齐方式,可能的取值为2的幂,如1、2、4、8、16等。
偏移量也为一个数字表达式,若使用该字段,则当前位置的对齐方式为:2的表达式次幂+偏移量。
示例:
AREAInit,CODE,READONLY,ALIEN=3;指定后面的指令为8字节对齐。
五.ARM汇编伪指令(读取内存地址)
1)ADR及ADRL
将PC相对偏移的地址或基于寄存器相对偏移的地址值读取到寄存器中
格式:ADR(ADRL)寄存器,地址表达式
ADR小范围的地址读取伪指令,
ADRL中等范围的地址读取伪指令
例:
查表
ADRR0,D_TAB;加载转换表地址
LDRBR1,[R0,R2];使用R2作为参数,进行查表
……
D_TAB
DCB0xC0,0xF9,0xA4,0xB0,0x99,0x92
2)LDR
用于加载32位立即数或一个地址值到指定的寄存器,大范围的地址读取伪指令.
LDR通常都是作加载指令,但是它也可以作伪指令。作用是装载一个32bit常数和一个地址到寄存器。
格式:LDR寄存器,=地址表达式
COUNTEQU0x56000054;COUNT是一个变量,地址为0x56000054。
LDRR1,=COUNT;将COUNT这个变量的值(地址),也就是0x56000054放到R1中。
MOVR0,#0
STRR0,[R1];是一个典型的存储指令,将R0中的值放到以R1中的值为地址的存储单元去
;这三条指令是为了完成对变量COUNT赋值。
3)NOP
空操作伪指令,可用于延时操作
例:延时子程序
Delay
NOP;空操作
NOP
NOP
SUBSR1,R1,#1;循环次数减1
BNEDelay
MOVPC,LR
六、Thumb指令集
有兴趣的自学
//*arm体系结构第五天*
七、C语言与汇编混合编程
完全使用汇编语言来编写程序会非常的繁琐
通常,只是使用汇编程序来完成少量必须由汇编程序才能完成的工作,而其它工作则由C语言程序来完成。
(一)、ATPCS规则
混合编程中,双方都须遵守ATPCS规则。这些基本规则
arm汇编编 相关文章:
- ARM汇编编程基础之四-ARM汇编伪操作(11-27)
- ARM汇编编程基础之三-基本寻址方式与基本指令(11-27)
- ARM汇编编程基础之一-寄存器(11-27)
- ARM汇编编程基础之五-ADS开发环境的使用(11-27)
- ARM汇编编程基础之二-流水线对PC值的影响(11-27)
- ARM汇编编程基础之六-其它寻址模式与其它指令(11-27)