这仅仅是我学习手臂装配的第二天,我陷入了一个问题,我在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
发布于 2020-02-23 13:06:01
发生分段错误的原因是,默认情况下,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
不能用于引用另一节中的标签,因为它可能会中断。
https://stackoverflow.com/questions/60359889
复制相似问题