在ARM汇编中写入内存时遇到了问题。
我正在使用树莓派(Raspbian)和GNU汇编器。
first.s:
.global main
.func main
main:
ldr r5, =0x10000000
mov r1, #19
str r1, [r5]
bx lr
当我运行以上代码时:
pi@raspberrypi ~/assembly $ make first
as -o first.o first.s
gcc -o first first.o
pi@raspberrypi ~/assembly $ ./first ; echo $? > output.txt
Segmentation fault
正如您所看到的,出现了分段错误。输出文件output.txt保留了值139,我理解这是指分段错误。 难道内存地址无效吗? 我已经检查过数据手册,内存地址似乎没问题。
.lcomm myint, 4
,然后ldr r5,=myint
。 - Jesterextern int myint
,然后可以使用.comm
代替,并使其成为全局变量。当然,你也可以切换到.data
并使用各种数据定义指令之一,如果你将变量标记为.global
,或者在C代码中定义int并从汇编语言中引用它。 - Jester