как хобби. Я пытаюсь научиться ARM-сборке, после того как я несколько лет назад видел ее в колледже.
Я изменил небольшую псевдо-программу Hello World (найденную в книге) следующим образом:
.global _start
_start: ldr R1,=msgtxt
mov R2,#11
bl v_asc
mov R0,#0
mov R7,#1
svc 0
.text
v_asc: mov R0,#1
mov R7,#4
svc 0
bx LR
.end
.data
msgtxt: .ascii "Yeah Baby!\n"
LD выдает следующую ошибку:
prog.o: в функции v_asc': (.text+0x1c): undefined
reference to
msgtxt '
Простое размещение раздела .data над .text заставляет его работать как шарм. Но тогда _start все еще выше .data :
.global _start
_start: ldr R1,=msgtxt
mov R2,#11
bl v_asc
mov R0,#0
mov R7,#1
svc 0
.data
msgtxt: .ascii "Yeah Baby!\n"
.text
v_asc: mov R0,#1
mov R7,#4
svc 0
bx LR
.end
Но меня это смущает:
Почему LD притворяется, что ссылка в v_asc, а в _start? Почему строка "ldr R1, = msgtxt" не выбрасывает неопределенную ссылку?
Заранее спасибо.