|
|||||||||||
|
Technical Support Support Resources
Product Information |
Technical SupportC51: CALLING ASSEMBLY ROUTINES FROM CInformation in this article applies to:
QUESTIONIn the C51 compiler manual, there is example of an assembly module calling a C function. Is there any example of a C program calling an assembly routine? ANSWERThere are no examples in the book, but it is easy to create your own. The asm routine must know how parameters are passed, values returned, and the naming conventions of segments. The steps you must follow to create an example are outlined below:
For example, the following code
#pragma SRC
unsigned char my_assembly_func (
unsigned int argument)
{
return (argument + 1); // Insert dummy lines to access all args and retvals
}
when compiled generates the following assembly SRC file.
NAME TESTCODE
?PR?_my_assembly_func?TESTCODE SEGMENT CODE
PUBLIC _my_assembly_func
; #pragma SRC
; unsigned char my_assembly_func (
RSEG ?PR?_my_assembly_func?TESTCODE
USING 0
_my_assembly_func:
;---- Variable 'argument?040' assigned to Register 'R6/R7' ----
; SOURCE LINE # 2
; unsigned int argument)
; {
; SOURCE LINE # 4
; return (argument + 1); // Insert dummy lines to access all args and retvals
; SOURCE LINE # 5
MOV A,R7
INC A
MOV R7,A
; }
; SOURCE LINE # 6
?C0001:
RET
; END OF _my_assembly_func
END
MORE INFORMATION
SEE ALSOATTACHED FILESRequest the files attached to this knowledgebase article. FORUM THREADSThe following Discussion Forum threads may provide information related to this topic. Last Reviewed: Monday, November 26, 2012 | ||||||||||
|
|||||||||||