c语言汇编混合编程方法,C语言和汇编语言混合编程方法

摘要: C语言是一种高级的面向过程的开发语言,汇编语言是一种低级的面向机器的编程语言。两者在程序设计开发方面各有优劣,目前两者的混合编程得到了广泛的应用。本文通过具体的实例,说明了混合编程的基本方法,为C语言应用开发人员提供方便。

关键词: C 语言;汇编语言;混合编程

中图分类号:TP313 文献标识码:A 文章编号:1006-4311(2014)24-0231-02

0 引言

汇编语言是一种面向机器的语言,其优点是运行速度快,占用存储空间小,可直接对硬件进行控制。缺点是编写、调试困难、移植性差。C语言简洁、灵活、库函数丰富、调试方便、移植性好,目前已被广泛地应用于系统软件和应用软件的开发中,为了发挥各自优势,取长补短,采用混合编程。大部分程序,如界面、人机接口(外壳程序)、数据处理等用C语言编写,以提高程序的开发效率。而某些程序,如需要缩短程序的运行时间,或需要对硬件进行直接操作,或需要利用操作系统的某些功能模块,或频繁使用的程序、或需要占用内存空间少的程序(内核程序),则用汇编编写,以提高程序的运行效率。

1 嵌入式汇编

嵌入式汇编也称行内汇编,源程序中直接插入汇编语句。汇编语句可直接访问C程序中定义的常量、变量、函数。不必考虑二者之间的接口,方便编程。

1.1 嵌入式汇编语句的格式

格式:asm操作码 操作数[;或换行]

其中:操作数可以是汇编语句中的立即数、寄存器、表达式等还可以是C中的常量、变量、标号等。分号;是汇编语句结束符,并非注解,要用注解,用C的注解。如下例

所示。

1.2 汇编语句访问C的数据

嵌入的汇编语句可以访问C语言程序中的任何标识符,包括变量、常量、标号、函数名、寄存器变量、函数参数等。如下例所示。

1.3 汇编语言与C语言接口规则

1.4 编译过程

命令行键入命令:TCC-B-Iinclude-Llib 文件名.c即可. TCC会自动调用TASM.EXE和TLINK.EXE,并且TLINK.EXE能正确的找到需要的.obj和.lib文件,要保证TC目录下存在TASM.EXE文件。如果单步编译,可能会碰到很多的问题,主要是TLINK.EXE不会自己去找.obj和.lib文件。该命令的功能是:.C编译TCC.ASM汇编TASM.OBJ连接TLINK.EXE。

2 Turbo C模块连接方式

C、汇编程序各自编程,各自编译,然后连接在一起。

2.1 汇编语言与C语言接口规则

①命名约定:汇编的名字前加一个下划线,C的名字前不加下划线(编译后内部自动加),以确保两个模块内部名字一致。

3 结语

混合编程,主要涉及接口,汇编调C的函数、全局变量。C调汇编的函数、变量。本文对此做了浅述。

参考文献:

[1]谭浩强.C语言程序设计[M].清华大学出版社,2004.

[2]丁爱萍.C语言程序设计实例教程[M].西安电子科技大学出版社,2006.

[3](美)布鲁姆著,马朝晖译.编语言程序设计[M].北京:机械工业出版社,2006.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF Slider设置整数

IsSnapToTickEnabled"True" 转载于:https://www.cnblogs.com/Fred1987/p/6038608.html

api代理提取_了解提取API

api代理提取Interested in learning JavaScript? Get my ebook at jshandbook.com有兴趣学习JavaScript吗? 在jshandbook.com上获取我的电子书 Since IE5 was released in 1998, we’ve had the option to make asynchronous network calls in the browser using X…

react.lazy 路由懒加载_React lazy/Suspense使用及源码解析

React v16.6.0已经发布快一年了,为保障项目迭代发布,没有及时更新react版本,最近由于开启了新项目,于是使用新的react版本进行了项目开发。项目工程如何搭建,如何满足兼容性要求,如何规范化等等这里不作为介…

Dart编程语言入门

Dart基础入门语法介绍,详细说明可以查看相关视频《Dart编程语言入门》。 变量与常量 变量 1.使用 var 声明变量,默认值为 null var a;//null a 10;2.显示类型声明 int a;//null a 10;3.使用 var 声明,可赋予不同类型的值 var a; //null a 10; //int a…

《PHP精粹:编写高效PHP代码》——1.1节为什么要使用面向对象编程

本节书摘来自华章社区《PHP精粹:编写高效PHP代码》一书中的第1章,第1.1节为什么要使用面向对象编程,作者:(美)  Davey Shafik,更多章节内容可以访问云栖社区“华章社区”公众号查看 1.1 为什…

c语言数据结构系统化,C语言数据结构+数据库+操作系统

http://cv.qiaobutang.com/post/55c419b20cf2009bd4607795第二部分是专业相关的C ,数据库,操作系统,数据结构。http://c.biancheng.net/cpp/u/shuju/数据(Data)是信息的载体,它能够被计算机识别、存储和加工处理。它是计算机程序加…

c语言判断一个序列是不是另一个的子序列

1 #include <stdio.h>2 #include <string.h>//添加字符串头文件3 4 int Subsequence(char s[], char t[]) 5 {6 int m,n,i,j;7 n strlen(s); //n表示序列S的长度8 m strlen(t); //m表示序列T的长度9 i0; 10 j0; 11 if (m>…

linux中python如何调用matlab的数据_特征锦囊:如何在Python中处理不平衡数据

今日锦囊特征锦囊&#xff1a;如何在Python中处理不平衡数据? Index1、到底什么是不平衡数据2、处理不平衡数据的理论方法3、Python里有什么包可以处理不平衡样本4、Python中具体如何处理失衡样本印象中很久之前有位朋友说要我写一篇如何处理不平衡数据的文章&#xff0c;整理…

源码安装zabbix遇到的报错集锦

报错1&#xff1a;checking for mysql_config... configure: error: MySQL library not found 解决办法&#xff1a;查找mysql_config #find / -name "mysql_config*" /usr/local/mysql/bin/mysql_config 在配置时将原有的 --with-mysql 改为 --with-mysql/usr/loca…

pso算法c++语言代码,一C++PSO(PSO)算法

收集和变化PSO算法&#xff0c;它可用于参考实施&#xff1a;#include #include #include #include #include #define rand_01 ((float)rand() / (float)RAND_MAX)const int numofdims 30;const int numofparticles 50;using namespace std;//typedef void (*FitnessFunc)(fl…

Hadoop不适合哪些场景 哪些场景适合?

Hadoop设计的目的主要包括下面几个方面&#xff0c;也就是所谓的适用场景&#xff1a; 1&#xff1a;超大文件 可以是几百M&#xff0c;几百T这个级别的文件。 2&#xff1a;流式数据访问 Hadoop适用于一次写入&#xff0c;多次读取的场景&#xff0c;也就是数据复制进去之后&a…

微服务 边界服务_遵循这些实用原则以获取精心设计的微服务边界

微服务 边界服务by Jake Lumetta杰克卢米塔(Jake Lumetta) 遵循这些实用原则以获取精心设计的微服务边界 (Follow these practical principles to get well-designed microservices boundaries) 如何避免使微服务太小和紧密耦合 (How to avoid making your microservices too …

ShareEntryActivity java.lang.ClassNotFoundException | Android类找不到问题

错误堆栈&#xff1a; Process: com.mci.smagazine, PID: 23265java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mci.smagazine/com.mci.smagazine.apshare.ShareEntryActivity}: java.lang.ClassNotFoundException: com.mci.smagazine.apshare…

阿里Android p6准备,项目经历准备篇——如何准备阿里巴巴P6/P7前端面试

项目经历准备篇——如何准备阿里巴巴P6/P7前端面试在上次的校招文章之后&#xff0c;有很多同学问有没有社招相关的东西可以写一篇&#xff0c;现在它来了。比起校招&#xff0c;社招更加看重项目经历项目经历反应的思考。本文针对的是想进入阿里的P6/P7同学&#xff0c;着重讲…

for in for of区别_Python 第4课:for…in循环黄金搭档之range()函数

乐学趣学Py● 04&#xff1a;for…in循环黄金搭档之range()函数●Python趣味小百科Python中的绘图模块为什么叫Turtle海龟&#xff0c;而不是cat ,dog,bird呢&#xff1f;原来Python引用了麻省理工大学教授开发的logo海龟制图语言,能通过绘图直观地教大家学习编程。实践是最好的…

《游戏设计师修炼之道:数据驱动的游戏设计》一3.8小结

3.8小结 在玩游戏期间使用的数学知识通常相当简单&#xff0c;尽管代码中使用的数学知识可能非常复杂。玩家不希望由于在玩游戏期间不得不处理许多数字而分心&#xff0c;因为他们的大脑必须从控制角色的动作转换到记住数字的含义。许多游戏回避了数字&#xff0c;而是通过像计…

ubuntu下安装配置nfs

sudo apt-get install nfs-kernel-server sudo /nfs_root vim /etc/exports 在这个文件末尾添加 /nfs_root *(rw,sync,no_root_squash) 保存退出 重启nfs服务 sudo /etc/init.d/rpcbind restart sudo /etc/init.d/nfs-kernel-server restart 测试 sudo mount 192.168.2.1:/nf…

使命愿景价值观_为什么在制作产品时应该专注于愿景,价值,风险和先例

使命愿景价值观by Steve史蒂夫(Steve) 为什么在制作产品时应该专注于愿景&#xff0c;价值&#xff0c;风险和先例 (Why you should focus on vision, value, risk, and precedent when making your product) 几周前&#xff0c;产品开发人员John Cutler发表了一篇出色的文章&…

安卓前端布局Android,Android开发的几种常见布局

目前正在从事iOS开发&#xff0c;对于安卓就是大学的时候自学了点&#xff0c;做过几个小的项目&#xff0c;软件外包大赛、计算机设计大赛、移动应用大赛都拿过奖项&#xff0c;呵呵。。。现在回想起来以前大学做的安卓比赛是多么的幼稚。 从现在开始我要从头一步一步回顾安卓…

《Cocos2D权威指南》——3.9 本章小结

3.9 本章小结 本章对Cocos2D中的几个核心类&#xff08;CCNode、CCScene、CCLayer、CCSprite&#xff09;进行了详细介绍&#xff0c;并且通过节点层级图让大家了解到Cocos2D游戏的基本组成&#xff1b;然后介绍了Cocos2D中的单例。通过完善第2章的游戏实例&#xff0c;大家对…