8051 C的问题 - 从C代码传递参数到ASM

M

mcoster

Guest
嗨,我正在开发一个程序,我决定在C的用户界面,因为它是更容易,在ASM的主要代码,因为它是时间紧迫。现在我面临一个问题!我不知道如何传递一个参数形式的C代码的一部分,到ASM代码的一部分。例如,我想提出在登记册或任何部分内存使用C其中一个值,然后使用ASM得到这个值。这样做的ASM部分很简单它只是一对夫妇MOV的命令,但如何将存储在RAM或使用C寄存器值是部分我不明白它!谁能帮助我吗?代码示例的main(){代码存放在R0的值0xC0}的#pragma ASM的检验手段为P0,R0中的#pragma ENDASM谢谢!
 
这是编译器特定的。有些编译器传递参数在栈中,有些是它在寄存器中。你有检查的编译器所使用的文档。有一个替代的方法来检查,这也。你可以写在C为extern无效ASMfunction funciton(无符号字符),然后从C中调用ASMfunction(参数)本,然后你可以检查汇编代码的C编译器生成的,看看参数传递
 
看看这个例子[网址] http://www.keil.com/support/man/docs/c51/c51_ap_at.htm [/网址] [乙]字符xdata文字[256] _at_ 0xE000 [/乙] * /数组xdata 0xE000 * /内主要功能:文字[0] ='一'; [/乙]后来在汇编代码部分,你可以这样做:选项 MOV的DPTR的,#E000h的MOVX阿,@ DPTR的[/乙];累积现在得到的'a'在C说我一直在努力遵循同样的程序,你所提到的布局为例。就像你说:“如何通过一个从C代码的一部分参数ASM代码的一部分”和“如何存储在RAM或寄存器使用C的价值”进行深入的解释多读Cx51用户指南:[网址] http://www.keil.com/support/man/docs/c51/c51_ap_ctoasm.htm [/网址]
 
您不能访问的寄存器C.您可以直接使用指针但是做到这一点。直接内存访问也取得了使用指针。但访问的指针寄存器是危险的。柯*金正日传递参数研究有相当好的文档。我觉得这样下去。对于单字节,它是通过R7和等。
 

Welcome to EDABoard.com

Sponsor

Back
Top