ArmGNU汇编&Arm汇编
arm芯片做汇编开发有两种汇编形式可以选择,1.arm汇编2.arm gnu汇编
两者用的都是汇编指令,不同在于两者的伪指令、伪操作不一样。
arm汇编用的是arm的编译器,而armgnu的汇编用的是arm–gcc编译器。
GNU-ARM的注释
代码中的注释可以是@,整段注释/…/
整行注释符号#
语句分隔符;
立即数的前缀#或者$。
Linux的汇编语句格式:
结构如下:
[label:][instruction/directive/pseudo-instruction}@comment
label:标号,gnu汇编中任何以冒号结尾的都被视为一个标号,不一定在一行的开始。
instruction指令,directive伪操作,pseudo-instruction伪指令
.section伪指令,可以通过.section来定义一个段。.section也有格式要求。
gnuarm预定义的段名:
.text代码段
.data数据段
.bss未初始化段
.sdata
.sbss
gnu汇编语句入口点:
汇编语句缺省入口是:_start
.global用来让某一符号对链接可见,.global _start让start对链接可见,告诉连接器从什么地方开始start执行。
gnu汇编的宏定义:
格式如下:
.macro 宏名参数名列表 @伪指令 .macro定义了一个宏
宏主题
.endm @.endm表示结束宏。
gnu汇编中的常数:
1.十进制以非0的数字开始
2.二进制以0b开始,其中字母无大小写区别
3.八进制以0开始。
4.十六进制以0x开始,
5.字符串常量用双引号,中间也可以用转义字符。
6.当前地址以.表示,gnu汇编中以.表示当前指令的地址。
函数的定义:
函数名:
函数体
返回语句
函数的编写遵循的规则:
1.参数、结果暂存到r0-r3中,
2.函数值返回≯一个字的值,应该把这个字放到r0中,
3.函数中如果改动了sp/r13堆栈指针、fp/r11框架指针、sl/r10堆栈限制、lr/r14链接寄存器、r4-r11函数结束时要回复这些寄存器的值。
4. .global/.globl:用来定义一个全局的符号,格式如下: .global/.globl symbol,
一般的,函数如果需要在其他文件中调用,需要用到.global 伪操作将函数声明
为全局函数;
来源:CSDN
作者:E-C-E
链接:https://blog.csdn.net/weixin_42050661/article/details/104011452