如何使用GCC在程序中添加汇编代码前缀?

如何使用GCC在程序中添加汇编代码前缀?,gcc,Gcc,假设我编写了一些c代码,它生成了如下所示的程序集: .text main: mvs $r3, $sp addi $r3, $r3, -16 mvs $sp, $r3 mvs $r3, $sp addi $r3, $r3, 3 shri $r3, $r3, 2 shai $r3, $r3, 2 call __main sti 8($r3), 25 sti 4($r3), 23 sti ($r3), 43

假设我编写了一些c代码,它生成了如下所示的程序集:

.text main: mvs $r3, $sp addi $r3, $r3, -16 mvs $sp, $r3 mvs $r3, $sp addi $r3, $r3, 3 shri $r3, $r3, 2 shai $r3, $r3, 2 call __main sti 8($r3), 25 sti 4($r3), 23 sti ($r3), 43 L2: ld $r4, 8($r3) ld $r5, 4($r3) add $r4, $r4, $r5 st 8($r3), $r4 ld $r4, 8($r3) ld $r5, 4($r3) sub $r4, $r4, $r5 st ($r3), $r4 jmp L2 .文本 主要内容: mvs$r3$sp 加上$r3,$r3,-16 mvs$sp$r3 mvs$r3$sp 附加$r3,$r3,3 shri$r3,$r3,2 shai$r3,$r3,2 呼叫主站 sti 8($r3),25 sti 4($r3),23 sti($r3),43 L2:ld$r4,8($r3) ld$r5,4($r3) 加上$r4、$r4、$r5 st 8($r3),r4 ld$r4,8($r3) ld$r5,4($r3) 低于$r4、$r4、$r5 南非兰特($r3),$r4 jmp-L2 如何在main:和第一行之间注入更多的汇编代码? 目标是在运行通过gas从c代码生成的任何汇编代码之前,将所有寄存器设置为0。这样做是为了默认寄存器的值,这是我正在使用的特定处理器所需要的

我曾考虑过使用gcc链接器和一个自定义对象文件,用前面的自定义代码来组装项目,但我不知道我是否具有这种链接器功能

我考虑使用CRTNEX.ASM,但我认为这实际上是支持C++构造函数/解构主义的。所以这对我一点帮助都没有


有什么想法吗?

您可以在main()定义之后使用内联汇编,
asm(“…”
)。然而,这实际上可能在GCC设置堆栈指针之后出现

另一个选项是将程序集文件传递给链接器。确保在链接时将其作为第一个对象传递

把这样的东西放进去:

// Clear registers
move 0, $r0
move 0, $r1

// Jump to main
jsr main

我确切地知道如何做到这一点:


目标\ ASM \函数\序言将在发出任何其他代码之前,将您想要的任何代码粘贴到main中。我将此答案留在这里,以便搜索此问题的任何其他人都可以得到答案。:)

将其作为内联汇编代码插入C代码文件中是否有效?或者这必须在
main
函数启动之前发生吗?理想情况下,它应该发生在主函数内部,但在生成的代码之前。我发现您可以使用:TARGET\u ASM\u FILE\u START插入代码,但它也发生在.text之前,我认为这是错误的。这是事实,不幸的是,即使在设置堆栈指针之前,需求也需要这样做。