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.
one thing not mentioned in the above link: C is free to use (and not save) ANY register it see fit. This may/will change with different releases and different optimizations. Thus so called "testting" to find which registers are affecter is worthless as "testing' often is. Thus you MUST code like this lcall Cfunct ; ALL REGISTRES INVALID AFTER CALL Erik
"Thus you MUST code like this lcall Cfunct ; ALL REGISTRES INVALID AFTER CALL" If the function returns a value, it will use registers as defined here: http://www.keil.com/support/man/docs/c51/c51_ap_funcret.htm
correct, but that register is still "destroyed" I once had to fix somebodys code that called C from assembly and, the C called only modified was it r4? under one particular condition and, of course you had the "monthly intermittent". So much about mixing C and assembler is done with assumptions and thus likely causes of "unexplained failure" Erik