inline-assembly

    4热度

    3回答

    我想实现上下文切换使用gcc的m68k处理器。我需要使用内联汇编保存所有寄存器d0,d1 ... d7和a0,... a7。我想知道是否可以在我的内联gcc中使用一个循环,这将允许我保存这些寄存器,而不是为每个寄存器写一行代码。 例如。 move.l%D0,温度 pcb.cpuregs.d0 =临时 我要让0内部就像一个循环计数器D0。

    46热度

    4回答

    我记得在与老的Borland DOS编译器的一天,你可以做这样的事情: asm { mov ax,ex etc etc... } 现在是否有做到这一点半独立于平台的方式?我需要进行BIOS调用,所以如果有一种方法可以在不使用asm代码的情况下执行此操作,那对我来说同样有用。

    8热度

    2回答

    默认情况下,GCC工具链使用AT & T汇编程序语法,但通过.intel_syntax指令支持英特尔语法。 此外,无论是在& T和Intel语法处于prefix和noprefix版本,这无论它们是否需要对前面加上%印记注册名称不同可用。 根据存在哪些指令,地址常量的格式会发生变化。 让我们考虑下面的C代码 *(int *)0xdeadbeef = 0x1234; 使用objdump -d,我们

    3热度

    3回答

    将程序集代码嵌入到C/C++程序中时,可以通过使用推送指令(或指定编译器支持的clobber列表支持它)来避免使用clobbering寄存器。 如果你包含内联程序集,并且希望避免推送和弹出clobbered寄存器的开销,有没有办法让gcc为你选择寄存器(例如,它知道没有有用的信息)。

    4热度

    3回答

    我现在愿意用-std=c99来编译我的项目,而且我正面临一个我目前不理解的错误。这条线: my_type* td = ({ register kmy_type* arg0 asm("eax"); arg0; }); 给我下面的错误只在C99: warning: ISO C forbids nested functions error: syntax error before ‘asm’ e