在Cmega8中将C代码转换为汇编代码

时间:2014-05-11 09:45:46

标签: c assembly avr atmega atmega16

我想用winAVR作为编译器在ATmega8中制作一个关于准确延迟库的代码,你有什么想法将下面的代码转换成汇编吗?我不知道转换代码,因为我不了解汇编。

这是代码。

static __inline__ void __variable_delay_cycles(unsigned long __count)
{
    if (__count>65535)
    {
        __count=(__count-13)/6;
        DelayCyclesUL(__count);
    }
    else
    {
        if (!__count)
            return;
        if (__count<10)
            __count=1;
        else 
            __count=(__count-6)/4;
        DelayCyclesUI(__count);
    }
}

DelayCyclesUI和DelayCyclesUL是用汇编代码编写的。 感谢。

2 个答案:

答案 0 :(得分:0)

将您的代码编译成可执行文件并在avr-studio中进行调试。切换到装配视图,您可以将已编译的代码复制并粘贴到您自己的asm文件中。 根据延迟的长度,您可能更好地考虑使用其中一个硬件计时器。

答案 1 :(得分:0)

编译器已将代码转换为机器级指令。它-S compiler option也会以汇编程序的形式输出生成的代码。

然而,ATmega8有三个硬件定时器,可以产生与代码无关的周期精确定时,以及具有不同选项的编译器转换的任何可变性。您应该使用硬件计时器而不是&#34;指令循环&#34;实施延误。