我在将值从寄存器移动到内存位置时遇到问题。这很简单。我首先将格式字符串和值abc
移动到正确的位置,然后调用printf
。下一个街区是我遇到问题的地方。我致电adr r1, abc
将abc
的位置转换为r1
。然后我将寄存器r4
初始化为10.当我尝试将r4
的值存储到r1
的位置(abc
所在的位置)时,我得到一个段错误。我真的不知道出了什么问题。我觉得abc
的地址是错误的,因为它是分段的,但我不能说。
代码如下:
.section .text
.global main
main:
push {lr}
ldr r1, abc
ldr r0, =print_str
bl printf
adr r1, abc
mov r4, #10
str r4, [r1]
ldr r1, abc
ldr r0, =print_str
bl printf
pop {lr}
bx lr
print_str: .asciz "%d\n"
abc: .word 400
答案 0 :(得分:0)
输出是否低于您要查找的内容? 不确定你的编程的目的。 下面的代码进行了一些修改,以减轻seg故障,但这就是它。
.data
print_str: .asciz "%d\n" abc: .word 400
.text
.global main
main:
push {lr}
ldr r1,=abc
ldr r0, =print_str
bl printf
ldr r1,=abc
mov r4, #10
str r4, [r1]
ldr r1,=abc
ldr r0,=print_str
bl printf
pop {lr}
bx lr
输出:
$ ./T94j0
132600
132600