【问题标题】:ARMv8 Printing Multiple Strings with Same Number ReferenceARMv8 打印具有相同编号参考的多个字符串
【发布时间】:2016-11-29 23:25:58
【问题描述】:

这是我的代码,在我解释我的问题之前:

顺便说一句,我是 ARM 的新手,所以我是一个超级新手。现在,我只是删除了代码中不必要的部分。 x0 - x7 是“参数”寄存器,x29 是帧指针,x30 是链接寄存器。 x19 和 x20 只是被调用者保存的寄存器。

string1:        .string "constant = %d   low value = %d \n\n"
string2:        .string "constant = %d \n"


                .balign 4
                .global main

main:           stp     x29,    x30,    [sp,    -16]!
                mov     x29,    sp

                mov     x20,    -1000         // Setting values
                mov     x19,    5

print:          adrp    x0,    string1
                add     x0,    x0,     :lo12:string1
                mov     x1,    x19
                mov     x2,    x20
                bl      printf

print2:         adrp    x0,    string2
                add     x0,    x0,     :lo12:string2
                mov     x3,    x19
                bl      printf


done:           mov x0, 0

end:            ldp     x29,   x30,   [sp],   16
                ret

现在由于某种原因,在“打印”期间,它打印出“常量 = 5”就好了。但是,当它转到“print2”时,它会打印出“constant = 0”。发生了什么,为什么即使我还没有操作寄存器 x19,它也不会打印到 5?我没有完全掌握这些是如何工作的。

结果:

  constant = 5    low value = -1000

  constant = 0

谢谢

【问题讨论】:

  • 您使用的是mov x3, x19 而不是mov x1, x19
  • 哇。没看到。谢谢!

标签: assembly printing arm arm64


【解决方案1】:

如果您想创建常规函数,与在主代码部分的主体中插入此类函数相比,这里有一些用于启动 ARMv8 泵的代码。我的 .include 仅适用于我的宏(即 push2 和 pop2 等);这与您使用的代码相同。

 .data
        string1:        .string "constant = %d low value = %d\n\n"
        string2:        .string "constant = %d \n"
.text
        .global main
        .include "mymac_armv8.s"        // for push2, pop2, and _exit macros

main:
        movn x20, 1000
        mov x19, 5

        bl write1
        bl write2

_exit

write1:
        push2 x29, x30
        push2 x1, x2
        ldr x0,=string1
        mov x1, x19
        mov x2, x20
        bl printf
        pop2 x1, x2
        pop2 x29, x30
        ret

write2:
        push2 x29, x30
        push2 x1, x2
        ldr x0,=string2
        mov x1, x19
        mov x2, x20
        bl printf
        pop2 x1, x2
        pop2 x29, x30
        ret

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多