如何从C程序调用汇编函数?

如何从C程序调用汇编函数?,c,assembly,embedded,microcontroller,pic,C,Assembly,Embedded,Microcontroller,Pic,我对微控制器编程非常陌生,我正在使用MPLAB C18编译器。我正在阅读各种主题的数据表,如保存到内存或使用计时器。我注意到这些示例是用汇编语言编写的,但我对汇编语言的使用经验很少。在我的项目中有没有一种方法可以同时使用汇编和C的强大功能 我不太懂汇编语言,否则我会尝试将代码转换成C语言,在这种情况下,我宁愿只使用汇编代码,而不做什么更改 现在,有人能给我举个例子,说明如何在带有MPLAB C18编译器的C程序中使用汇编函数吗 汇编函数可以像hello world一样简单。我只需要理解在MPLA

我对微控制器编程非常陌生,我正在使用MPLAB C18编译器。我正在阅读各种主题的数据表,如保存到内存或使用计时器。我注意到这些示例是用汇编语言编写的,但我对汇编语言的使用经验很少。在我的项目中有没有一种方法可以同时使用汇编和C的强大功能

我不太懂汇编语言,否则我会尝试将代码转换成C语言,在这种情况下,我宁愿只使用汇编代码,而不做什么更改

现在,有人能给我举个例子,说明如何在带有MPLAB C18编译器的C程序中使用汇编函数吗

汇编函数可以像hello world一样简单。我只需要理解在MPLAB上梳理和使用两种不同语言的过程。我试图创建一个用于测试的快速函数,但我不知道将汇编代码放在哪里。部件代码是否需要在项目中包含自己的文件


我希望有人能用一个完整的简单例子来启发我,让我能够看到全局。我提前申请帮助,谢谢

有一种方法可以在C语言中使用asm,具体取决于您使用的编译器(在C语言中使用asm的能力不是标准的一部分)。每个编译器使用的语法不同。对于MPLAB C18,它是这样的:

void main()
{
     _asm
                movlw 0x57
                movwf PORTB
    _endasm
}

上面的例子就是这个例子,它将解释如何将asm与MPLAB C18一起在C中使用。

有一种方法可以在C语言中使用asm,具体取决于您使用的编译器(在C中使用asm的能力不是标准的一部分)。每个编译器使用的语法不同。对于MPLAB C18,它是这样的:

void main()
{
     _asm
                movlw 0x57
                movwf PORTB
    _endasm
}

上面的例子就是这个例子,它将解释如何在C语言中使用asm与MPLAB C18。

如果不访问编译器,我无法测试这一点,但我找到的MPLAB C18 C编译器用户指南和发行说明说明说明:

2.8.2直列式组件 MPLAB C18提供了一个内部汇编程序,其语法与MPASM类似 汇编程序。汇编代码块必须以
\u asm
开头,以
\u endasm
结尾。 块内的语法为:

[label:][[arg1[,arg2[,arg3]]]]

所以,在我看来,一种解决方案可能是在.C文件中嵌入类似的内容

void myAsmFunction()
{
  _asm
  // The asm code you've been looking at
  _endasm
}

然后在适当的地方调用myasm函数。如果您想要包含参数和返回值,那么它会变得有点棘手。

如果没有编译器的访问权限,我无法对此进行测试,但我找到的MPLAB C18 C编译器用户指南和发行说明说明说明:

2.8.2直列式组件 MPLAB C18提供了一个内部汇编程序,其语法与MPASM类似 汇编程序。汇编代码块必须以
\u asm
开头,以
\u endasm
结尾。 块内的语法为:

[label:][[arg1[,arg2[,arg3]]]]

所以,在我看来,一种解决方案可能是在.C文件中嵌入类似的内容

void myAsmFunction()
{
  _asm
  // The asm code you've been looking at
  _endasm
}

然后在适当的地方调用myasm函数。如果您想要包含参数和返回值,那么它会变得有点棘手。

在c中没有
\u asm
之类的东西,但是如果您有asm编译器,您可以创建asm库并使用它,就像这里描述的那样:您确定这不可能吗?我在读这篇文章,看起来你能做到。我试图实现这个例子,但还不能实现。我仍然在寻找一个简单的hello world示例。谢谢@Heather-在C标准中可能没有
\uu asm
这样的东西,但是当前大多数实际的C编译器确实实现了这种类型的东西,尽管语法会有所不同。这个问题不涉及C标准,而是一个特定的命名编译器。@ChrisStratton我不知道这一点。gcc可以做这样的事情吗?c中没有类似于
\uasm
的东西,但是如果你有asm编译器,你可以创建asm库并使用它,就像这里描述的那样:你确定这不可能吗?我在读这篇文章,看起来你能做到。我试图实现这个例子,但还不能实现。我仍然在寻找一个简单的hello world示例。谢谢@Heather-在C标准中可能没有
\uu asm
这样的东西,但是当前大多数实际的C编译器确实实现了这种类型的东西,尽管语法会有所不同。这个问题不涉及C标准,而是一个特定的命名编译器。@ChrisStratton我不知道这一点。gcc可以做类似的事情吗?相对的你可能会帮助。相对的你可能会帮助。相对的你可能会帮助。相对的你可能会帮助。相对的你可能会帮助。