这只是我学习ARM汇编的第二天,我陷入了STR出现分段错误的问题。
@P = Q+R+S
@Q=2, R=4, S=5
.global main
main:
adrl r4,vals
ldr r1,[r4,#Q] @load Q=2 into r1
ldr r2,[r4,#R]
ldr r3,[r4,#S]
add r0,r1,r2
add r0,r0,r3
str r0,[r4,#P]
mov r7,#1
svc 0
.equ P,0
.equ Q,4
.equ R,8
.equ S,12
vals: .space 4
.word 2
.word 4
.word 5
.align
.end
有人可以帮忙,为什么会崩溃?
编辑
我将变量添加到数据部分。
@P = Q+R+S
@Q=2, R=4, S=5
.data
vals: .space 4
.word 2
.word 4
.word 5
.align
.text
.global main
main:
adrl r4,vals
ldr r1,[r4,#Q] @load Q=2 into r1
ldr r2,[r4,#R]
ldr r3,[r4,#S]
add r0,r1,r2
add r0,r0,r3
@str r0,[r4,#P]
mov r7,#1
svc 0
.equ P,0
.equ Q,4
.equ R,8
.equ S,12
.end
如下所示进行编译和链接:
$ as -o main.o main.s
main.s: Assembler messages:
main.s:13: Error: symbol .data is in a different section
vals
默认情况下被组装到文本部分中,因此变得不可写。 解决方案是在数据部分中定义如下所示的vals
:
@P = Q+R+S
@Q=2, R=4, S=5
.data
vals: .space 4
.word 2
.word 4
.word 5
.align
.text
.global main
main:
ldr r4,=vals
ldr r1,[r4,#Q] @load Q=2 into r1
ldr r2,[r4,#R]
ldr r3,[r4,#S]
add r0,r1,r2
add r0,r0,r3
@str r0,[r4,#P]
mov r7,#1
svc 0
.equ P,0
.equ Q,4
.equ R,8
.equ S,12
.end
也将adrl r4,vals
替换为ldr r4,=vals
,因为adrl
不能用于引用不同部分中的标签,因为它可能会损坏。