我在理解为什么无法将在.data节中创建的变量初始化为0时遇到问题。我还将其与printf的GCC链接
示例:
#include <iostream>
#include <iomanip>
void printInfo(int spaces)
{
std::cout << "name\n";
}
void printMemberInfo()
{
std::cout << std::setw(5) << ' ';
printInfo();
}
void printMember()
{
std::cout << std::setw(3) << ' ';
printInfo();
}
int main()
{
printMemberInfo();
printMember();
}
输出:
.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
如果有人可以解释我在做错什么,因为我试图进行搜索,但是所有示例似乎都在做我做的事情。
谢谢。
更新:
我已经在@jasonharper的帮助下解决了这个问题。
寄存器x1中%d的值必须是 ACTUAL 值,而不是内存地址。
因此,我总是打印出地址而不是实际值。
解决方案:
Value: 4264119
Value: 4264119