这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » Aq430,wrappers,for,assembly,coded,functi

共2条 1/1 1 跳转至

Aq430,wrappers,for,assembly,coded,functions Aq430 —— C wrappers for assembly cod

院士
2006-09-17 18:14:16     打赏
Aq430,wrappers,for,assembly,coded,functions Aq430 —— C wrappers for assembly coded functions



关键词: Aq430     wrappers     assembly     c    

院士
2006-12-22 22:43:00     打赏
2楼
问 If you want to write a C callable function in assembly code, it is often most convenient to code it as a C function whose body is a block of in-line code. The benefit is that, if you declare all variables to be used in C, then the compiler will look after saving/restoring register on entry/exit and will look after assigning register numbers. Such a function would have a structure like this:



int

f( register int x, register int y )

{

register int a, b, c;

/$

....assembly code using x, y, a, b, c

$/

return c;

}



In this case, only the declarations and return statement are in C; everything else is in assembler. Note that the code uses the register keyword in declarations in order to force the compiler to put them into registers, so that they CAN be used as registers in the in-line code.



If, in inline assembly code, you refer to a register directly (by using the name of the register), then you must save/restore it on entry/exit to/from the inline assembly code. The best way to avoid such concerns is to always declare your registers as C variables and then refer to them using name in the inline assembly code. If you want to use a scratch register (r12-r15) which is not being used to hold an incoming function argument, then you should bind the C variable to the scratch register directly. For instance, to bind a variable q to register R15, you would write



register int q R[15];



In general, if the wrapper function does not contain any function calls, then arguments passed in registers will be used as is. Otherwise, they will be copied to other, non-scratch registers. When in doubt, look at the assembly code output file generated by the compiler, as it will contain compiler generated comments indicating which register it is using for each register variable.

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]