Hi all, I want to call a C function (for example: func1() ) from my old assembly code. The problem is that if func1() calls another C function( func2() ), what will happen? How does the compiler pass parameters to the second function? If it also passes through R1-R7, does it destroy the parameters of func1()? Thanks for reading this topic.
To Andy Neil, I have read the manual, of course. But in the manual's example, it only calls one C function, and it doesn't save any registers!!! So I confuse that if the first C function calls another C function in it, does it save the registers? I also see that, in the Large Model Example, page 171, line 11:
MOV R0, #?_funtion?BYTE+3
MOV DPTR, #_?function?BYTE+3
"I confuse that if the first C function calls another C function" What happens inside the function is entirely irrelevant - See my original post. You just need to see the function as a "black box" - it has a defined interface, and what actually goes on inside the box is of no concern.
"I also see that, in the Large Model Example, page 171, line 11: MOV R0, #?_funtion?BYTE+3 I think it must be: MOV DPTR, #_?function?BYTE+3" Hmmm... I think you're right. Looks like a cut-and-paste error - they've copied the COMPACT example, and forgotten to change R0 to DPTR? You could check this by compiling an example yourself... also here: http://www.keil.com/support/man/docs/c51/c51_ap_largemodel.htm