汇编中定义一个函数 ,type,func都可以,一般可以借助于global 设置全局属性,供外部c代码进行调用
第一种,使用伪指令
.func xx
MRS X0, SCTLR
RET
endfunc
atf例子
其中func ,endfunc 是一个宏
第二种,使用type
type 用于设置符号的类型, set the type of a symbol.
官方介绍:
格式 :
.type fun_name, @function //@function可以是%function
fun_name:
#content
ret
.type指令指定fun_name为其它汇编程序调用此函数时的地址。
fun_name也为函数名。
@function表示函数内容开始。
ret指令表示函数结束,返回到父函数调用子函数处。
global 使用方法,
.global symbol, .globl symbol
.global makes the symbol visible to ld. If you define symbol in your partial program,
its value is made available to other partial programs that are linked with it. Otherwise,
symbol takes its attributes from a symbol of the same name from another file linked into
the same program.
Both spellings (‘.globl’ and ‘.global’) are accepted, for compatibility with other assemblers.
.global <symbol> This directive gives the symbol external linkage (similar to EXPORT in armasm).
例子
.global func1
.type func1 %function
func1:
MRS X0,ICC_XX
ret
第三种,使用macro 宏定义定义函数及参数
.macro <name> {<arg_1} //name必须,后面参数可选
{,<arg_2>} ... {,<arg_N>} 看这个例子就行了
.macro SHIFTLEFT a, b
.if \b < 0
MOV \a, \a, ASR #-\b
.exitm
.endif
MOV \a, \a, LSL #\b
.endm
宏可以嵌套,宏里面可以调用另外一个宏
atf的例子