c语言在线编译器_C语言和汇编语言是什么?他们之间可以有怎样的合作?为你解析...

022380d858edfed2e5ad4763940d3f28.png

什么是c语言:

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言;尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

什么是汇编语言:

汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。

汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。

b9e86741230d228a3946c69af7f3e779.png

在 C 言中怎样使用汇编语言呢?

这个问题在不同的编译器中,具体实现方法是不同的。但是在实现大方上也但是就是有两种,而且各种编译器的实现方法也是大同小异。一种是在 C 语言中嵌入汇编语言代码,另一种是让 C 语言从外部调用汇编。

首先,我们看一看在 C 语言中怎样嵌入汇编语言代码。在 C 语言中嵌入汇编语言代码,也有两种格式,一种是单句的,一种是模块的。 我们来看看一些简单的例子。

例子 1 : 单句格式的:

main () {

asm mov ah,2;

asm mov bh,0;

asm mov dl, 20;

asm mov dh,10;

asm int 10h; /* 调用 BIOS 中断配置光标位置 */

模块格式的:

main () {

asm {

mov ah,2

mov bh,0

mov dl, 20

mov dh,10

int 10h

} }

在这个小程式里面并没有突出 “ 嵌入 ” 二字。但是从这个程式中能够看出其基本格式。嵌入的各行代码前面加上 asm 关键字或把汇编语句放入 asm 代码块中,每行以分号或换行符结束,而注释必须是 C 语言格式的。

3c49aff839057a38a0ed3a13e0abf572.png

下面我们来看一个让 C 语言和汇编协作的例子:

例子 2 :

main()

{

char const *MESSAGE=”OutPut from asm.. \ n$”;

asm{

mov ah, 9

mov dx, MESSAGE

int 21h

}

}

上面这个例子十分的简单,他的纯 C 语言版本是:

# i nclude

main()

{

printf(“OutPut from asm.. \ n$”);

}

接下来我们看一看怎样让 C 语言调用汇编例程

还是一个简单的小程式:

C 语言部分如下:

extern cursor (int,int),

main()

{

cursor(15,12);

}

汇编语言部分如下:

.MODEL SMALL

.CODE

PUBLIC

_CURSOR PROC

PUSH BP

MOV BP,SP

MOV DH,[BP+4]

MOV DL,[BP+6]

MOV AH,02

MOV BH,00

INT 10H

POP BP

RET

_CURSOR ENDP

通过上面这个程式,您会看到调用汇编语言的关键就是怎样传递参数。

4a1027196ce5eaf8d650f4e2e5b000a7.png

C语言和汇编语言的优缺点:

以c来举例

优点:

1.c的运行效率高;

2.c可以实现硬件的直接访问;

3.c代码的移植性好;

缺点:

1.c的代码复用性差;

2.c的代码维护性差;

3.c的扩展性差,即如果想增加新功能,需要修改较多的代码;

4.c语言的可读性差;

至于汇编语言的优缺点基本和c的优缺点相反;

C和汇编的选择:

1.若只有较简单的逻辑操作、逻辑算法、简单运算,使用汇编会得到较为精准的代码,但用c也同样可以做到。

2.若掺有复杂运算、浮点运算、非线性方程等,汇编恐怕无能为力了(最起码难度很大)。

3.单片机种类繁多,各自的汇编语法大都不一样,若仅使用汇编,可扩充性、可移植性都很差,用c就会好的多。

简单地说,很小的程序,主要是硬件简单控制的可以用汇编,

稍微复杂一点尤其是牵涉到一些计算或者管理等方面的最好用c 。

而现在随着技术的发展,面向程序员的高级语言比面向CPU的汇编语言好用得,在硬件条件允许的情况下,程序员当然选择用高级语言编程,不旦提高了编程效率,也提高了代码的可维护性,并且十分有利于编写大型的工程。

e76260f43e7564fb3ec624d4564bf9cb.png

C语言中,程序员所定义的每一个变量,不管是基本类型(char,unsigned char,int unsigned int,short,unsigned short,long,unsigned long,double)的变量还是构造类型(数组,struct,enum,union,链表等)的变量,在编译之后都安排在了内存中的特定存储区域里面了, 每一个变量都对应特定的内存空间。

汇编语言中,根本就没有变量的说法,程序员所面对的就是赤裸裸的存储空间,可能是RAM,可能是EEPROM,还可能是FLASH,程序员需要自己给这些存储空间命名(相对于C语言,汇编语言完全需要自己分配内存),然后直接进行访问(读操作或者写操作)。

汇编语言是属于低级语言,也就是一种标记语言,标记一段0101001等这样的二进制代码。汇编语言不适合编写大型的项目,编写起来特别复杂,代码繁琐。现在主流一般不使用汇编语言开发大型程序,我们而是采用C/C++来开发软件,汇编语言主要用来操作少量硬件等底层。而C语言是一门高级语言,现在主流编程语言都是由C语言所衍生而来。

更多相关资讯和干货,关注公众号c语言进阶之路

与编程牛人大牛在线交流,点击下方【了解更多】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值