我正试图在树莓派上学习装配。但是我无法上手,我编写的每个代码都会出现“分段错误”。
.text
.global _start
_start:
MOV R0, #2
SWI 0
此代码会出现分段错误。即使我删除了MOV行,也会出现分段错误。
答案 0 :(得分:3)
在Raspberry Pi使用的EABI中,SWI 0
只是系统调用条目。您仍然需要使用r7
指定所需的功能。所以,这样的事情应该有效:
.text
.global _start
_start:
MOV R0, #2
MOV R7, #1 ; sys_exit
SWI 0
答案 1 :(得分:2)
尝试:
bx lr @ Exit if use gcc as linker
或
mov r7, #1 @ Exit if use ld as linker
svc #0 @ Exit if use ld as linker
某些版本使用swi
,svc
使用ld
作为链接器取得了成功。如果使用gcc
作为链接器,则lr
寄存器将返回OS。请务必将lr寄存器保存在代码的开头,并在bx lr
之前将其恢复。有关详细信息,请参阅Using C functions with ARM assembly。