【摘要】:在线汇编的语法如下:asm;多个汇编声明可以被符号\n分隔成新的一行,“String”可以被用来指定多个声明,除了额外增加的ASM关键词。通常,使用在线汇编引用局部寄存器的能力是有限的。在这种情况下,将从汇编程序得到一个错误,那时也不能控制寄存器变量的分配,所以在线汇编指令很可能失败。作为例子,使用LDI指令需要使用R16~R31中的一个寄存器,但这里没有请求使用在线汇编,同样也没有引用上半部分的整数寄存器。
除了在汇编文件中写汇编函数外,在线汇编允许写汇编代码进C文件中(当然,在工程中使用汇编源文件作为一个部件是良好的)。在线汇编的语法如下:
asm("<string>");
多个汇编声明可以被符号\n分隔成新的一行,“String”可以被用来指定多个声明,除了额外增加的ASM关键词。为了在汇编声明中访问一个C的变量,可使用%<变量名>格式,如:
register unsigned char uc;
asm("mov %uc,R0\n""sleep\n");(www.xing528.com)
任意一个C变量都可以被引用。如果在汇编指令中需使用一个CPU寄存器,必须使用寄存器存储类(register)来强制分配一个局部变量到CPU寄存器中。
通常,使用在线汇编引用局部寄存器的能力是有限的。如果在函数中描述了太多的寄存器变量,就很可能没有寄存器可用。在这种情况下,将从汇编程序得到一个错误,那时也不能控制寄存器变量的分配,所以在线汇编指令很可能失败。作为例子,使用LDI指令需要使用R16~R31中的一个寄存器,但这里没有请求使用在线汇编,同样也没有引用上半部分的整数寄存器。
在线汇编可以被用在C函数的内部或外部,编译器将在线汇编的每行都分解成可读的,不像AVR汇编器,ImageCraft汇编器允许标签放置在任意地方,所以可以在在线汇编代码中创建标签。当汇编声明在函数外部时,可能得到一个警告,不要理睬这个警告。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。