2016-09-30 7 views
-1

Я запускаю код сборки ARM для инициализации массива a. Я получаю сообщение об ошибке неопределенной ссылкой на `a '. Я использую GCC для компиляции Вот кодОшибка сборки сборки ARM Неопределенная ссылка на `a '

.text 
.global main 
main: 
     ldr r0, addr_of_a // r1 = *a 
     mov r1, #0   // Index i 
loop: str r1, [r0]   // a[i] = i 
     add r0, r0, r0, lsl #2 // Increment address by 4 bytes 
     add r1, r1, #1  // r1 = r1 + 1 
     cmp r1, #100 
     bne loop 
end: 
     mov r0, r1 
     bx lr 
addr_of_a: .word a 
+2

Так где _is_ 'a' определено? (предполагая, что на самом деле это не означает постоянную 0xa). То, что у вас есть, есть эффективно (в C) 'int ** addr_of_a = & a', поэтому линкеру необходимо знать значение символа' a' (то есть его адрес), чтобы инициализировать слово в 'addr_of_a'. Несмотря на то, что код заранее предполагает, что 'addr_of_a' на самом деле является массивом ... на самом деле не совсем ясно, что должно происходить здесь. – Notlikethat

ответ

0

В + Notlikethat указано, ваш «а» нет.

Вы можете добавить его соответствующим образом, как в примерах ниже:

.data 
     a:  .asciz "deadcode\n" 

или

.data 
     a:  .word 3,1,4,1,5,9 
Смежные вопросы