论坛名称:714电子实验室 网址:http://www.714e.com/bbs/
  714电子实验室提供电子技术书籍教程,电子技术视频教程,EDA软件及教程下载~
  • C语言中嵌入汇编语言在本论坛中的集锦 作者:xilinxue 时间:2008-5-22 15:25:07
  • C语言中嵌入汇编语言在本论坛中的集锦
    论坛中的一些个人看法,我收集了一下,对错的话,大家见仁见智啊
    下面是一个简单的例子,具体参数传递等,看书
    $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)返回什么值?
    这是下载的程序://<asm.h>
    #ifdef ASM
             unsigned long shiftR1(register unsigned long);
    #else
             extern unsigned long shiftR1(register unsigned long);
    #endif
    //end of asm.h
    //<asm.c>
    #define ASM
    #include <asm.h>
    #include <reg52.h>
    #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处执行等,不知怎么回事?)


Google
 

欢迎光临714电子实验室 网址:http://www.714e.com/bbs/
推荐网站:
714电子实验室http://www.714e.com/