第4部分- Linux ARM汇编首个程序

本文详细介绍了在ARMv8服务器上创建首个64位AArch64汇编程序的过程,包括代码示例及编译运行说明。同时,针对32位ARM处理器,如树莓派3b,提供了首个32位汇编程序实例,并解释了关键指令的作用。文章还附带了一个Makefile,用于简化后续的编译工作。
该文章已生成可运行项目,

第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

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值