发布
社区首页 >问答首页 >ARM组件中STR到标签指向内存位置时的分割故障

ARM组件中STR到标签指向内存位置时的分割故障
EN

Stack Overflow用户
提问于 2020-02-23 07:00:13
回答 1查看 277关注 0票数 1

这仅仅是我学习手臂装配的第二天,我陷入了一个问题,我在STR中遇到了分割错误。

代码语言:javascript
代码运行次数:0
复制
@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

有人能帮我解释一下它为什么会崩溃吗?

编辑

我将变量添加到数据部分。

代码语言:javascript
代码运行次数:0
复制
@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

汇编和链接如下:

代码语言:javascript
代码运行次数:0
复制
$ as -o main.o main.s
main.s: Assembler messages:
main.s:13: Error: symbol .data is in a different section
EN

回答 1

Stack Overflow用户

发布于 2020-02-23 13:06:01

发生分段错误的原因是,默认情况下,vals被组装到文本部分,因此变得不可写。

解决方案是在数据部分中定义vals,如下所示:

代码语言:javascript
代码运行次数:0
复制
@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,valsldr r4,=vals取代,因为adrl不能用于引用另一节中的标签,因为它可能会中断。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60359889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档