相关疑难解决方法(0)

什么寄存器保存在ARM C调用约定中?

自从我上次编写手臂汇编程序以来已经有一段时间了,我对细节有点生疏.如果我从arm调用C函数,我只需要担心保存r0-r3和lr,对吧?

如果C函数使用任何其他寄存器,它是否负责保存堆栈中的那些并恢复它们?换句话说,编译器会生成代码来为C函数执行此操作.

例如,如果我在汇编程序函数中使用r10,我不必将其值放在堆栈或内存中,并在C调用后弹出/恢复它,是吗?

这是针对arm-eabi-gcc 4.3.0.

c assembly arm calling-convention function-call

51
推荐指数
5
解决办法
6万
查看次数

"gcc链接"和"ld链接"之间的关系是什么?

据说linux加载器是/ usr/bin/ld,但通常我们使用gcc/g ++来链接库和可执行文件,我们几乎不使用"ld".

我最后一次手动使用"ld"是在学习linux程序集时,生成可执行文件的唯一方法是使用.d文件直接生成可执行文件而不需要任何库.

我的问题是,gcc/g ++是否包含一些"ld"的函数包装器,因为原始的"ld"太难用了?或者我们不应该明确地使用"ld"进行c/c ++程序链接,因为blablabla?

非常感谢.

c++ linux gcc ld

6
推荐指数
1
解决办法
2030
查看次数

如何在覆盆子pi汇编语言中使用"printf"

printf您可以打印的值的数量是否有限制?

这是我的代码.

.data
.balign 4       
   string: .asciz "\n%d %d %d %d\n"        
.text
.global main
.extern printf

main:
    push    {ip, lr}        @ push return address + dummy register
                            @ for alignment
    ldr     r0, =string     @ get address of string into r0
    mov     r1, #11
    mov     r2, #22
    mov     r3, #33
    mov     r4, #444
    bl      printf          @ print string and pass params
                            @ into r1, r2, and r3
    pop     {ip, pc}        @ pop return address into pc
Run Code Online (Sandbox Code Playgroud)

当我编译并执行此代码时,它打印出来:

11 22 33 …

assembly arm

1
推荐指数
1
解决办法
4021
查看次数

标签 统计

arm ×2

assembly ×2

c ×1

c++ ×1

calling-convention ×1

function-call ×1

gcc ×1

ld ×1

linux ×1