全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版

C语言中嵌入汇编语言集锦

[复制链接]
5489 4

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
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处执行等,不知怎么回事?)

举报

回复

4 个评论

风***  新手上路  发表于 2010-11-19 04:16:25  | 显示全部楼层
很好的东西 谢谢楼主了
david***  新手上路  发表于 2010-12-15 23:19:03  | 显示全部楼层
谢谢分享,是好东西啊

beijid***  新手上路  发表于 2012-2-21 23:04:25  | 显示全部楼层
谢谢分享,,
yyz***  新手上路  发表于 2012-9-8 15:00:15  | 显示全部楼层
很有启发,感谢无私奉献
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表