ARM STR转换为.data中的变量

时间:2018-10-21 01:40:28

标签: assembly arm

我在理解为什么无法将在.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

0 个答案:

没有答案