教授希望我们使用汇编代码的程序的一部分程序,然后他希望我们从C程序中调用这个代码,然后完成时,它跳回到C程序。我似乎无法找到任何文件。如果有问题,我正在使用使用68HC12的Dragon12板。这听起来不像他希望我们使用内联asm()函数。如何在CodeWarrior内的C文件中调用汇编代码?
1
A
回答
1
可以拨打装配只是定义在C任何正常功能(前提是你使用正确的调用约定)的函数,只要确定返回类型和参数匹配。例如,如果装配的样子:
extern int my_func();
// ...
int zero = my_func();
-1
找出调用你的函数的正确方法是最简单的方法就是写:
my_func:
; assembly code here
; some more assembly code
; etc.
xor ax, ax
ret
然后你可以在C如下叫它C语言中的函数具有相同的参数和返回值,在内部进行一些最小化的工作(访问每个参数,填充结果值)并编译为汇编程序。确定你感兴趣的每个操作是如何完成的,并且你已经设置好了。
0
的CodeWarrior开发套件10.5帮助菜单文档介绍了如何从C调用纯汇编语言函数/ C++代码如下:
在装配文件中定义的标签具有局部范围。要从其他文件(.c文件)访问它们,它们应该标记为全局。例如,.global _my_asm_func
。
为了说明,这里是一个例子的代码片断:
.global _my_asm_func
.text
_my_asm_func:
subq.l #4,a7
move.l d1,(a7)
add.l (a7),d0
addq.l #4,a7
rts
在您的C/C++代码,首先声明为函数的原型。例如,int my_asm_func(int a, int b);
。然后像任何其他C/C++函数一样调用该函数。例如,my_asm_func(5, 2);
。
注意,在汇编代码,该函数的前缀以下划线,但在C/C++事实并非如此。我不确定这是必需的,还是只是约定。
参数传递到连续的数据寄存器。在这种情况下,您会发现5
在D0
和2
在D1
。
0
很久以前的问题,但答案可能仍然有帮助。
对于Kinetis微控制器和gcc, 也许下面的代码片段可能说明了一个可能性。 (这是我的错误处理程序的一部分) 的下面,“PE_ISR”中断使用内联汇编程序调用FaultHandlerAsm 功能,这反过来也是内联汇编。 最后,它分支到一个c函数“faultHandlerC”,这不包括在这里。
void FaultHandlerAsm(void)
{
__asm volatile (
" movs r0,#4 \n"
" movs r1, lr \n"
" tst r0, r1 \n"
" beq _MSP \n"
" mrs r0, psp \n"
" b _HALT \n"
"_MSP: \n"
" mrs r0, msp \n"
"_HALT: \n"
" ldr r1,[r0,#20] \n"
" b FaultHandlerC \n"
//" bkpt #0 \n"
);
}
PE_ISR(Cpu_INT_Hard_FaultInterrupt)
{
__asm( " b FaultHandlerAsm \n");
}
相关问题
- 1. 如何在C++内联汇编代码中使用字符串?
- 2. 如何编写从汇编代码调用的C函数
- 3. 使用as88汇编器从汇编代码调用C函数
- 4. C++代码中的汇编代码
- 5. C++汇编代码
- 6. C代码如何调用汇编代码(例如,优化的strlen)?
- 7. GCC C++和内联汇编代码?
- 8. 汇编&C - 翻译C'S代码汇编
- 9. 从文档文件在Turbo C++ 3.0中创建内联汇编代码(TASM)
- 10. 写汇编代码的C++
- 11. 在gcc编译时如何在C++的汇编代码中使用C变量?
- 12. 如何从内核模块(* .c)生成汇编代码(* .s)文件?
- 13. 调试反汇编代码
- 14. C#在内存汇编到DLL文件
- 15. 从c反汇编代码#
- 16. C代码MIPS汇编
- 17. 从linux中的C文件生成汇编代码
- 18. 从C#代码生成汇编代码?
- 19. 汇编代码到C代码
- 20. 汇编代码的清单文件
- 21. 如何用C头文件和CUDA代码编译C代码?
- 22. 如何使用内联汇编在C/C++程序中调用DOS中断?
- 23. 在汇编代码中
- 24. ASM在C++项目......这个小汇编代码如何在C++
- 25. 在C/C++中使用内联汇编
- 26. 如何在汇编x86中用ml汇编多个文件?
- 27. 使用Kdbg调试汇编代码
- 28. 从汇编代码调用fgets
- 29. 如何使用GCC将C代码编译为8088汇编?
- 30. GCC汇编内联:与只有内联汇编代码
听起来好像他希望你编写汇编代码来为你的平台使用C调用约定,这样你就可以在C程序中声明它为外部函数。 – Neil 2013-03-02 19:59:18
关于这个问题有一个很好的技术说明,你应该在你的Codewarrior安装的某个地方把它作为pdf。否则,请在飞思卡尔网站上搜索它。 – Lundin 2013-03-07 13:35:33