1 数据类型伪指令
数据类型伪指令 | 说明 |
.byte | .把8位数当成数据插入汇编代码中 |
.hword和.short | 16位数 |
.long和.int | 32位数 |
.word | 32位数 |
.quad | 64位数 |
.float | 浮点数 |
.ascii和.string | 不包含结束符'\0',需要自行添加 |
.asciz | 在string后面自动插入结束符'\0' |
.rept和.endr | 重复执行伪操作 |
.equ | .equ symbol, experssion //给符号赋值 |
.rept 3
.long 0
.endr
// 上述.rept伪操作会重复‘.long 0’ 的指令3次
.equ my_data1, 200 //为my_data1符号赋值200
2 函数相关伪指令
| |
.global: | |
.include: | |
.if, .else, .endif: | 控制语句 |
ifdef symbol: | |
ifndef symbol: | |
ifc string1, string2: | 判断字符串string1,string2是否相等 |
.ifeq expression: | 判断expression的值是否为0 |
.ifeqs string1,string2: | 等同ifc |
.ifge experssion | 判断expression的值是否>=0 |
.ifle experssion | 判断expression的值是否<=0 |
.ifne experssion | 判断expression的值是否不为0 |
| |
3 段、宏相关伪指令
.section | .section name, "flags" //表示接下来汇编链接到某个段,flags表示段的属性,比如: w 可写属性; x 可执行属性;a 可分配属性;。。。 |
.pushsection和.popsection | 通常配对使用,把代码链接插入到指定的段,而其他代码还保留在原来段中 |
| |
.macro | .macro macroname args ... //宏的名称,宏的参数 |
| |
.macro add_1 p1:req p2 //:req表示必须传递一个值
mov x7, \p1
mov x8, \p2
add x1, x7, x8
.endm // 表示宏定义结束
.macro kernel_entry el, label, regsize = 64
b el\()\el\()_\label
.endm
global main
main:
add_1 x2, x3 //调用宏
kernel 1,irq //执行b el1_irq