GNU ARM汇编语法原理及操作解析
这篇文章主要介绍了GNUARM汇编语法原理及操作解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
ARM汇编源程序有两种风格:
- ARM官方推荐的风格,所有的指令都大写。常用在windows下的IDE中。
- GNU风格的汇编风格,所有的指令都小写。常用在与Linux相关的工具中。
注释符号:
GNUarm汇编所采用的注释符号是@符号,同样c语言中的//和/**/两种类型的注释方法在GNUarm汇编中也被支持。
宏定义:
在GNUarm汇编程序中可以使用伪操作.equ来定义宏,但是同样也支持c语言中的#define形式定义的宏。在实际编程中通常都采用#define来定义宏。除了支持#define宏之外,GNUarm汇编还支持条件编译和#include的用法。
标号:
在GNUarm汇编中以冒号结尾的符号称为标号。标号本质上代表着地址。
常用的伪操作:
- .global:用来将标号声明为外部链接属性,即可以被其他文件使用
- .extern:用来声明标号为外部标号,和c语言中的extern关键字是类似的
- .:用来代表当前指令的地址,常用于实现死循环中,如b.
- .ascii、.word、.short、.byte:用来定义数据,注意.ascii伪操作在定义字符串的时候需要在后面添加\0。
- .section:用来自定义段。GNUarm汇编预定义的段名有.text.data.bss
- .align:.alignn即采用2^n字节对齐方式。比如.align2即采用2^2=4字节对齐。具体是指.align后面的指令的地址需要进行2^n字节对齐。
- .balign[wl]:.balign[wl]n,0xXXXXXXXX即采用n字节对齐方式,并根据[wl]来决定采用几字节填充。如果没有w或l,则采用字节填充;如果是w,则采用双字节填充;如果是l,则采用4字节填充。
- .end:表示整个汇编程序结束
- .arm/.code32:表示采用的是ARM指令
- .thumb/.code16:表示采用的是Thumb指令
- .comm:用来在bss段中申请一段内存空间,也就是通过这个伪指令可以让bss段的大小可以不占用可执行文件的大小,只需利用.comm来记录需要多大的空间即可。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。