首页 > 解决方案 > 如果我尝试“手动”访问它们,我只打印部分字符串

问题描述

这不起作用:

.global main
.type main%function

main:
        ldr r4,[r1]
        mov r1,r4
        add r1,r1,#4    // I go to the next argv
        ldr r0,=message
        b printf
message:
        .asciz "%s\n"

但输出是:

$ ./a.out a b c
out

这虽然有效:

.global main
.type main%function

main:
        ldr r4,[r1,#4]    // this works, if I write #4 HERE
        mov r1,r4
        //add r1,r1,#4    // commented
        ldr r0,=message
        b printf
message:
        .asciz "%s\n"

输出:

$ ./a.out a b c
a

mov r1,r4另外,如果 MOV 只能移动 8 位立即数/数据,我不明白 MOV 怎么可能移动另一个寄存器(在行中)中的内存地址(32 位) ...

标签: assemblyarm

解决方案


推荐阅读