第4部分- Linux ARM彙編首個程序

第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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章