首个64位汇编
我们先创建第一个AArch64上的首个汇编程序,这个64位代码是我在一个ARMv8服务器上运行的。有国产的华为鲲鹏/飞腾,非国产的也可以是安培或者Cavium。
first64.s
.arch armv8-a .global _start .text _start: mov x8, 93 svc 0 复制代码
编译:
as -g -o first64.o first64.s
ld -o first64 first64.o
在armv8机器上可以运行,当然没有什么输出的,可以通过echo $?来观看执行结果。
首个32位汇编
以树莓派3b为环境,这个是一个32位的ARM处理器,后面32位的代码都在我这个树莓派中运行的。
第一个程序如下:
.global main /* 'main' is our entry point and must be global */ main: /* This is main */ mov r0, #2 /* Put a 2 inside the register r0 */ bx lr /* Return from main */ 复制代码
as -o first.o first.s 复制代码
gcc -o first first.o 复制代码
然后执行:
./first
通过echo查看执行结果
$echo $?
2
这里bx是branch and exchange。分支意味着我们将改变指令执行的流程。该指令只是离开了主要功能,从而有效地结束了我们的程序。
这个代码在amrv8上是不能编译通故宫的,找不到bx指令。
Makefile
为了后续编译方便制作Makefile如下:
# Makefile all: first first: first.o gcc -o $@ $+ first.o : first.s as -o $@ $< clean: rm -vf first *.o