C语言中的名称在汇编文件中是以下划线为前缀的,如函数main()在汇编模块中是以_main()引用的。名称的有效长度为32个字符,在名称后面加两个冒号(::),可以定义成一个全局变量,例如:
传递参数和返回值所使用的寄存器。第1个参数若是整型则通过R16/R17传递,第2个参数则通过R18/R19传递。如果参数是长整型或浮点数则通过R16/R17/R18/R19传递,其余参数通过软件堆栈传递。比如整型参数小的(如char)参数扩展成整型(int)长度传递,即使函数原型是可用的。如果R16/R17已传递了第1个参数,而第2个参数是长整型或浮点数,则第2个参数的低半部分通过R18/R19传递,而高半部分通过软件堆栈传递。
整型返回值是通过R16/R17返回,而长整型或浮点数返回则通过R16/R17/R18/R19返回。
在汇编函数中必须保护和恢复下列寄存器:R28/R29或Y,这是结构指针。R10/R11/R12/R13/R14/R15/R20/R21/R22/R23,这些寄存器是调用保护寄存器,这些寄存器的内容在被汇编语言函数调用后必须保持不变。(www.xing528.com)
别的寄存器如R0/R1/R2/R3/R4/R5/R6/R7/R8/R9/R24/R25/R26/R27/R30/R31、SREG可以在汇编语言函数中使用,而不被保护和恢复。这些寄存器是调用挥发寄存器,这些寄存器的内容在被函数调用后可以改变。
对于它的中断处理,这不同于普通的函数调用,在中断操作中必须保护和恢复它所使用的全部寄存器。如果使用C函数来描述中断处理,那么编译器有能力自动完成。如果使用汇编写中断处理,而它又调用了普通的C函数,那么汇编操作必须保护和恢复挥发性寄存器,普通C函数调用不保护它们。中断处理操作同普通程序操作是异步的,中断处理或它的函数调用不能改变任意一个MCU寄存器。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。