每个汇编代码都有分段错误

时间:2017-07-13 15:48:39

标签: assembly raspberry-pi arm

我正试图在树莓派上学习装配。但是我无法上手,我编写的每个代码都会出现“分段错误”。

.text
.global _start
_start:
   MOV R0, #2
   SWI 0

此代码会出现分段错误。即使我删除了MOV行,也会出现分段错误。

2 个答案:

答案 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

某些版本使用swisvc使用ld作为链接器取得了成功。如果使用gcc作为链接器,则lr寄存器将返回OS。请务必将lr寄存器保存在代码的开头,并在bx lr之前将其恢复。有关详细信息,请参阅Using C functions with ARM assembly