C学习笔记(一) C语言和汇编语言的区别

Python017

C学习笔记(一) C语言和汇编语言的区别,第1张

C学习笔记(一) C语言汇编语言的区别

2016-07-11 09:43 162人阅读 评论(0) 收藏 举报

分类:

C学习笔记(13)

版权声明:本文为博主原创文章,未经博主允许不得转载。

C学习笔记(五) C语言和汇编语言的区别

C语言和汇编语言的区别:

汇编:效率高,对硬件的可操控性更强,体积小,不易维护,可移植性很差;

C:效率比较低,硬件可操控性比较差,目标代码体积大,容易维护,可移植性很好。

汇编语言运行效率高的原因:

1.  汇编语言实质上是机器语言的助记符。 CPU只能运行它所支持的指令集,而这些指令集当中的每条指令都是一些二进制数的序列,也就是“0”和“1”的有序组合;“0”和“1”的组合不便于程序员的记忆因此有了“MOV A 0x40”等这样的助记符。所以汇编语言编译成CPU可执行的机器语言其实只要做一个翻译的动作就好了。而C语言编写完程序后,需要通过编译器将C语言编译成与相应CPU指令集对应的机器语言。汇编语言与机器语言是一一对应的。但是C语言呢?当然没这么好事了。C语言的语法是固定的,C语言编写的程序要编译成CPU能读懂的机器语言指令没办法一一对应,因此需要有编译规则了,所以运行效率低一些。也可以说,C语言,是面向程序员的语言,而汇编语言是直接面向CPU的语言。

2.  汇编是直接面对CPU的语言,只要是在指令集支持的范围内,汇编语言可以直接而灵活地管理包括特殊功能寄存器、通用寄存器、存储单元的每一个字节,甚至是每一个bit。C语言对内存的使用及管理功能也是很强大的,但毕竟还是受制于语法。举个最简单的例子,C语言当中没有对应三字节或是五字节的变量类型,要么int型,要么long型,所以每次申请必须是固定的字节数,势必造成内存使用上的浪费。而大部份汇编语言根本没有这样的语法,在伪指令的帮助下(其实也只是提高可读性),汇编语言程序可以使用任意字节数的变量,当然处理起来比C语言麻烦得多,最终还是一个字节一个字节地拼接处理,而用C语言写程序就轻松了,不用管这些,最终编译器会搞定嘛。而轻松的代价就是造成了浪费。而内存使用效率不高同时也会影响到整个程序的整体效率。

C语言与汇编的不同适用场合

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

    2:若掺有复杂运算、浮点运算、非线性方程等,汇编难度很大,而C语言作为一种高级语言,有简洁紧凑,使用灵活的语法机制,编写复杂程序容易得多。 

    3:每一款处理器各自的汇编语法大都不一样,若仅使用汇编,可扩充性、可移植性都很差,用c就会好的多。 

    4:对硬件进行初始化的操作,使用汇编语言。

1.外部全局变量, 默认情况下所有的全局变量都是外部全局变量

什么事外部全局变量? 可以被其它文件访问的全局变量我们称之为外部全局变量

2.内部全局变量, 只要给全局变量加上static关键字就是内部全局变量

什么是内部全局变量? 只能被当前文件访问的全局变量我们称之为内部全局变量

可以定义同名的外部全局变量

多个同名的外部全局变量指向同一块存储空间

也可以定义多个同名的内部全局变量

多个同名的全局变量如果不在同一个文件中, 那么指向不同的存储空间

为了提高数据的安全性, 不让别人在其它文件中修改我们的全局变量, C语言提供了另外一个用于修改全局变量的关键字, static

只要用static修改的全局变量就是内部全局变量, 只能在当前文件中使用

这样就可以提高我们全局变量的安全性

如果多个文件中存在同名的内部全局变量, 相互不会影响

如果既有外部全局变量也有内部全局变量, 那么会优先访问内部全局变量

用于声明一个外部全局变量

声明只需要在使用变量之前声明就可以了

用于定义一个内部全局变量

声明和定义的区别:

声明不会开辟存储空间

定义会开辟存储空间