假设我写一些C代码,并生成一些组件是这样的:如何使用GCC将汇编代码前缀到程序上?
.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
我怎么能注入更多的汇编代码,就在主之间:和第一线? 目标是在运行通过c代码生成的任何汇编代码之前,将所有寄存器设置为0。这是为了默认寄存器的值,这是我正在使用的特定处理器所需的。
我想过使用gcc链接器和一个自定义对象文件来组装我的自定义代码在前面的项目,但我不知道我是否有与链接器的那种能力。
我曾考虑过使用crtbegin.asm,但我认为这实际上意味着支持C++构造函数/解构器。所以这根本不会帮助我。
任何想法?
它会工作,只是将其作为内联汇编代码插入C代码文件中?或者甚至在'main'函数启动之前就必须发生? –
理想情况下,它应该发生在主函数内部,但在生成的代码之前。我发现你可以使用以下代码注入代码:TARGET_ASM_FILE_START,但它也发生在.text之前,我认为这是错误的/错误的。 – RGroppa