×
嵌入式 > 技术百科 > 详情

C语言中嵌入汇编语言在本论坛中的集锦

发布时间:2020-06-16 发布时间:
|
论坛中的一些个人看法,我收集了一下,对错的话,大家见仁见智啊

下面是一个简单的例子,具体参数传递等,看书
$NOMOD51
ACC DATA 0E0H

P_VM EQU 0DFE2H
P_PAGE EQU 0DFE0H
                NAME     VM
?C_VM?VM SEGMENT   CODE
                PUBLIC  C_VM
  MOV ACC,#00H
  PUSH ACC
  PUSH ACC
  MOV DPTR,#P_VM
  MOV A,#0CH
  MOVX @DPTR,A
  NOP
  RET
                END

 


看了KEIL-C的手册,介绍可以这样加入汇编
#pragma asm;
nop;
nop;
#pragma endasm;
在properties项使能对话框中的Generate Assembler SRC File和Assembler SRC File选项。
但为何我这样做一直编译通不过呢,它一直提示语法错误。请大虾指教

已经搞定,是我在开始处定义了一个NOP,所以在使用写ASM NOP时冲突才会报错。


请教:C语言调用汇编程序时,如何使"Assembly output file"项激活请教:C语言调用汇编程序时,创建汇编子程序框架时,需要在Workbench菜单Project中选择Option命令,并在其中的ICC430选项类中,对list设置:Assembly output file,可是这个选项时灰色的,如何才能激活??
C语言调用汇编程序不需要任何设置,只要将汇编的函数另外保存成一个独立的汇编文件,并把该文件添加到工程中。在C语言中要声明该汇编函数为外部函数,当然汇编的写法要注意一些事项,这要看一些相关的资料了。
我是想用c语言写个框架,自动生成汇编源程序,这样就需要设置以上的选项。不过可以自己写汇编的框架,就是以上你所说的办法,现在已经好了,谢谢你!

 


keil c能编译汇编程序吗?keil c能编译汇编程序吗?
当然可以了,内嵌汇编语句就可以了#pragma src命令

 


c语言和汇编语言怎么连接谁有c语言和汇编语言怎么连接的资料告诉我一下
建议: 用C语言做个框架,编译后改为汇编框架,填入汇编程序,一般可以保证和C语言兼容.注意格式
_asm
{
.......
........
......
}

如果你用KEIL C高版本的话可以分别编写C和汇编的模块,存成2个文件,分别添加到你的项目里,然后BUILD ALL就行了,系统集成环境回自动联接的。早期版本需要分别编译生成OBJ文件,然后联接就可以了。

用内联inline

请教keil c51中加入汇编我在网上下载了一段程序,可怎么也不懂,调了半天也没调通,请大家看看应该怎么用呀,程序中的shiftR1是干什么的,还有x,ruturn(x)返回什么值?
这是下载的程序://
#ifdef ASM
         unsigned long shiftR1(register unsigned long);
#else
         extern unsigned long shiftR1(register unsigned long);
#endif
//end of asm.h
//
#define ASM
#include
#include
#pragma OT(4,speed)
unsigned long    shiftR1(register unsigned long    x)
{
    #pragma asm
    clr c
    mov a,r4
    rrc a
    mov r4,a
    mov a,r5
    rrc a
    mov r5,a
    mov a,r6
    rrc a
    mov r6,a
    mov a,r7
    rrc a
    mov r7,a
    #pragma endasm
    return(x);
}
//end of asm.c

x=x*2;
x为4位长整型。
r4567是放x的


在C51中插入汇编问题!请教各位:
    1、我想在C51的程序中插入汇编程序,然后用KEIL编译。使用的格式是
       asm(" ljmp 8000h ");。但在用keil编译是提示有错。是否要include
       什么头文件。
    2、在C51的源程序中能否进行绝对地址的调用与跳转。如;LCALL 8000H
       LJMP  8000H。

1。混合编程我也想学哦,不过我用WAVE试过几次都不行,现在听说WAVE有指令能用了,不过我没试过哦!
2。好象没有哦,不如没必要有呀,因为有都没用!

KEILC51中是不能直接嵌入汇编,C196就可以。

{f2)我使用的是wave,可以先用c51编个子程序接口(定好接口变量),再在a51下用汇编编子程序。最后用L51把这两部分联结起来(注意用参数,避免程序重叠)。我没用过什么特殊的头文件,至于是否可以用长跳转语句不是很清楚。

绝对地址跳转应该不能用。

楼上的说的对,keilc51中要想嵌入汇编,必须单独写一汇编的程序文件,然后和c51的程序文件连接编译。其中还牵扯一些问题,参数、程序名等,去老古那里看看吧

KEILC51中是可以直接嵌入汇编,方法为#Pragma asm 汇编行 #pragma ,注意在写汇编之后要
记得加 END 这样子就OK了。( 这样我试过了,编译时时需要勾选SRC项,不过软仿真执行时遇到莫名其妙的问题。如整个程序不从MAIN处执行等,不知怎么回事?)

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
实时控制.安全.如何加速实现未来工厂落地?