如何打印 argv 参数?

How to print argv arguments?

.global main

main:
    ldr r0, =message_format
    b   printf

message_format:
    .asciz "argv: %s\n"

如果我执行它,我会得到这个:

# ./a.out 7
argv: ^?~^?~

我如何“传递”给 printf 我的 argv?

argv 是指向长度为 argc + 1 的参数字符串指针列表的指针,其中最后一个元素是 NULL 指针。

ldr r1, [r1,#4] 会将 argv (argv[1]) 的第二个元素加载到 r1。这是指向程序名称后的第一个参数字符串的指针。 (一般)

您将此字符串指针作为整数传递给 printf,这是不正确的,并且会导致它打印似乎是任意值的内容。

所有 argv 元素都是字符串,因此不需要额外的转换。您只需要通过将 "%i" 更改为 "%s".

来告诉 printf 期望字符串而不是整数

请注意,这仅在您确定有第二个元素时才有效。在访问 argv[1] 之前,您应该始终检查 argv[0] 是否为非 NULL 或者 argc 是否大于 0。然后,在访问 argv[1].

指向的字符串之前,您还应该检查 argv[1] 是否为非 NULL 或者 argc 是否大于 1