第4部分- Linux ARM彙編首個程序
首個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