高级语言、汇编语言、机器语言

高级语言是高度封装了的编程语言,与低级语言相对。它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示(例如汉字、不规则英文或其他外语),从而使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。如流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,易语言,中文版的C语言习语言等等,这些语言的语法、命令格式都不相同。

汇编语言(assembly language)亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。汇编语言是直接面向处理器(Processor)的程序设计语言。所操作的对象不是具体的数据,而是寄存器或者存储器,也就是说它是直接和寄存器和存储器打交道,这也是为什么汇编语言的执行速度要比其它语言快,但同时这也使编程更加复杂。再者,汇编语言指令是机器指令的一种符号表示,而不同类型的CPU 有不同的机器指令系统,也就有不同的汇编语言,所以,汇编语言程序与机器有着密切的关系。所以,除了同系列、不同型号CPU 之间的汇编语言程序有一定程度的可移植性之外,其它不同类型(如:小型机和微机等)CPU 之间的汇编语言程序是无法移植的。

机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。不同型号的计算机其机器语言是不相通的,按着一种计算机的机器指令编制的程序,不能在另一种计算机上执行。

预处理、编译、汇编、连接

源文件

预处理

编译

汇编


第一阶段预处理:预处理阶段的指令一般都是以#来开头的,所以我们编写的程序中像#include、#define等等都是在这一个阶段来完成的。这一阶段会把你所有引用的头文件打开来插入到我们本身的程序中;会把我们程序中的所有宏进行替换掉;去掉注释

第二阶段编译:编译器来检查一下你的程序是不是有问题是不是有一些语法错误。

第三阶段汇编,这一阶段就是把我们第二阶段生成的汇编代码变成我们的可执行文件,也就是把我们的汇编语言变成我们的机器可以执行的机器语言,这是每个程序必须经过的阶段,因为我们的C语言也好汇编也好各种各样的语言机器都是看不懂的。

第四阶段链接:我们当前的源文件引用了另外的头文件中的函数,这时候我们执行的时候如果不把他们链接起来的话,程序是不能够正确的执行的。

静态库和动态库

这里我们涉及到了一个新的概念就是函数库的链接,我们在刚刚的程序调用了printf函数,这个函数我们自己并没有实现但是却直接调用了,我们上边也讲到了原因是引用的头文件,但是为什么我们只是简单的写了一个#incldue<stdio.h>就直接把我们的printf函数引用过来了呢?原因是这些函数已经被写入到了一个库中,在没有进行特别指定的时候gcc会到某个默认的路径下去寻找这个库,也就是链接到这个库中去把这些文件变成一个整体然后再去执行就没有问题了。

函数库一般有两种:静态库和动态库。简单来说静态库就是当我用到这个库的时候,我会直接生硬的把库中的文件添加到你的源文件中,假如我们这个库里边有一百个函数,但是我这里只用了一个printf函数,程序也会把所有的函数都插入到你的程序中,在这种链接方式下,函数的代码将从其所在地静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。

但是动态链接就不一样,动态链接并没有说把库文件的代码插入到可执行文件中,而是在程序执行的时候由链接程序来加载库,这样可以节省大量的系统开销这种库的后缀一般是.so,使用动态链接能够使最终的可执行文件比较短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。在某些情况下动态链接可能带来一些性能上损害。静态链接的话代码的装载速度快,执行速度也较快,因为编译时它只会把你需要的那部分链接进去,应用程序相对比较大。但是如果多个应用程序使用的话,会被装载多次,浪费内存。

程序猿理论系列整理:高级语言、汇编语言、机器语言相关推荐

  1. 程序猿理论系列整理:计算机基础硬件

    冯·诺依曼体系结构 数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑.程序存储执行以及计算机由五个部分组成(运算器.控制器.存储器.输入设备.输出设备),这套理论被称为冯·诺依曼体系结 ...

  2. android程序员手机壁纸,ASCII码壁纸-程序猿不务正业系列

    3岁酷龄未发表过文章,竟是瞻仰大神了.借着毕业,寝室的最后时光,做两张壁纸玩玩. 本人程序猿一只,大家就文明围观一下吧,壁纸上面放的是一些ASCII码(American Standard Code f ...

  3. 高级语言 汇编语言 机器语言 (为什么要使用这些语言)

    目录 高级语言: 汇编语言: 机器语言: 总结: 高级语言: 是一种指令集的体系.这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据)而言.是高度封装了的编程语言,与低级 ...

  4. mysql中括号_【Java程序猿必备系列】MySQL知识点总结

    点击 隔壁王小猿 关注公众号获取更多精彩JAVA文章 1.数据库的组成 2.MySQL数据类型 MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 2.1 数值类型 My ...

  5. 高级语言.汇编语言和机器语言

    机器语言 <![endif]> (Machine language) 机器语言Machine Language(低级语言) 机器语言是计算机唯一能接受和执行的语言.机器语言由二进制码组成, ...

  6. 汇编语言机器语言c语言区别,高级语言和汇编语言_机器语言的区别

    描述 高级语言简介 高级语言,它是在低级语言的基础上,采用接近于人类自然语言的单词和符号来表示一组低级语言程序,使编程变得更加简单,易学,且写出的程序可读性强. 高级语言的优点 1.高级语言接近算法语 ...

  7. 程序员进阶系列:年少不懂爱家家,懂了已是猿中人。

    正式分享之前,先回忆一下作者年少时的一次真实的面试囧途. 经验老道的面试官: 先问个简单的问题,i++ 与 ++i 有啥区别? 年少懵懂的攻城狮: i++ 先把操作数加 1,然后把操作数放入表达式中运 ...

  8. AI:一个20年程序猿的学习资料大全—结构分析软件/办公软件/电气制造控制/高级语言编程/平面三维设计/视频编辑/FQ格式转换软件——只有你不想要的,没有你找不到的

    AI:一个20年程序猿的学习资料大全-结构分析软件/办公软件/电气制造控制/高级语言编程/平面三维设计/视频编辑/FQ格式转换软件--只有你不想要的,没有你找不到的 目录 (有偿提供,替朋友转载,扫描 ...

  9. 【如何使用高级语言在机器语言层面提高程序运行效率】

    如何使用高级语言在机器语言层面提高程序运行效率 ==基础编码原则== 利用局部性原理减少过程调用 利用局部性原理消除不必要的内存引用 ==低级优化== 指令级并行 寄存器重命名 循环展开 利用多个累计 ...

最新文章

  1. 数据结构 -- 图与图存储
  2. html textarea换行和dom换行
  3. mysql客户端hang_MySQL所有操作hang住了,怎么破?
  4. 又来Hello World了,Hello Python
  5. hashset去重原理_9道Java集合面试题,搞定了再去投简历吧!
  6. Windows10/Servers 2016的TrustedInstaller权限获取(及乱改System后救砖
  7. 容器技术Docker K8s 7 容器服务ACK集群
  8. php 检查货币类型_PHP如何获取货币汇率-百度经验
  9. 斐讯K1路由器刷入openwrt及通过netkeeper连接校园网
  10. 计算机二级msoffice操作题如何评分,计算机二级MSOffice操作题及答案解析
  11. Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) F. Beautiful fountains rows
  12. pl/sql Developer 1303注册码
  13. 压缩视频 HandBrake软件
  14. swagger ui 怎么输入对象_java swagger ui 添加header请求头参数的方法
  15. Aandroid最简单最全面的热修复
  16. 大型连锁药店管理系统源码
  17. 百世集团公布2020年第一季度业绩 国际业务收入增长近两倍
  18. 【gdoi2018 day1】小学生图论题
  19. 30大优秀logo设计详解
  20. kali系统AOSP源码编译

热门文章

  1. java+jsp基于ssm的智慧医疗系统医院挂号就诊系统-计算机毕业设计
  2. python分组统计数据_数据分组统计
  3. HTML+CSS+JavaScript实现的动态爱心,超简单直接用!
  4. 3.7 pipeline syntax 7
  5. 计算机专业助我成长作文600,资助助我成长作文
  6. 绕过安卓的唯一机会,可能是利用EMUI中沉睡的AI藏宝图
  7. 灵性图书馆:好书推荐-《灵性开悟不是你想的那样》
  8. pythonurllib新浪微博_Python登陆新浪微博
  9. 服务器H330阵列卡不建议做Raid5
  10. 翻译Prism4碰到生单词