У меня проблема с пониманием, почему я не могу инициализировать переменную, которую я сделал в разделе .data, на 0. Я также связываю это с GCC для printf
Пример:
.data
length: .space 8
ls: .asciz "Value: %d\n"
.text
.global main
main: ldr x0, =ls //Set x0 to memory address of string to print
ldr x1, =length //Loads memory address of length value as %d
bl printf //This prints out 4264119 which I assume is what is there
mov x0, #0 //Sets register 0 to the value 0
ldr x1, =length //Loads the address of variable length
str x0, [x1] //I attempt to store the value 0 in the variable length
ldr x0, =ls
ldr x1, =length
bl printf //I print out length but it is still 4264119 somehow
Вывод:
Value: 4264119
Value: 4264119
Если кто-то может объяснить, что я делаю неправильно, потому что я попытался найти это, но все примеры, кажется, делают то, что я делаю.
Спасибо.
ОБНОВЛЕНИЕ:
Я решил проблему с помощью @ jasonharper.
Значение% d в регистре x1 должно быть ACTUAL значение не адрес памяти.
Таким образом, я всегда печатал адрес, а не фактическое значение.
Решение:
ldr x0, =ls
ldr x2, =length //Load memory address of length into x2
ldr x1, [x2] // Load value in memory address of length into x1
bl printf //Print out the actual value and not the memory address