计算机语言分为三种:机器语言、汇编语言和高级语言
计算机语言有哪几种?
计算机语言分为三种:机器语言、汇编语言和高级语言
1.机器语言
机器语言是用二进制代码表示计算机能直接识别和执行的一种机器指令的集合,它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。
优点:灵活、直接执行、速度快等
缺点:不同型号的计算机的机器语言是不相通的
难于辨别和记忆,编程人员要熟记所用计算机的全部指令代码和代码的含义
编写程序花费时间太长,是运行时间的几十倍和几百倍
编出的程序全是些0和1的指令代码,不方便阅读和修改还容易出错
简单来说,机器语言就是用一堆0或1构成的语言,基于机器语言的这么多的缺点,除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。
2.汇编语言
百度百科上是这么说的:汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
机器语言是用二进制代码也就是0或1用于程序设计,汇编语言就是用助记符等一些符号代替二进制代码。这里就有一个问题了,计算机能读懂的只有机器指令,也就是二进制代码,那么计算机如何能理解用汇编语言编写的程序呢?这时,就需要一个能够将汇编指令转换成机器指令的翻译程序---编译器,程序员用汇编语言写出源程序,在用汇编编译器将其编译为机器指令,由计算机最终执行。
3.高级语言
高级语言相对于机器语言,是一种指令集的体系,是高度封装了的编程语言,与低级语言相对。
它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示(例如汉字、不规则英文或其他外语),从而使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。
小编有话说:汇编语言在机器语言的基础上引入了助记符,但是这些助记符量大难记,因此,我们又有了高级语言。定义上很清楚的表达了高级语言,他以人类日常语言为基础,这样的话,更易于编写,而且有较高的可读性。
工业机器人用什么语言编程的
20世纪80年代初,美国Automatix公司开发了RAIL语言,该语言可以利用传感器的信息进行零件作业的检测。同时,麦道公司研制了MCL语言,这是一种在数控自动编程语言——APT语言的基础上发展起来的一种机器人语言。MCL特别适用于由数控机床、机器人等组成的柔性加工单元的编程。
机器人语言品种繁多,而且新的语言层出不穷。这是因为机器人的功能不断拓展,需要新的语言来配合其工作。另一方面,机器人语言多是针对某种类型的具体机器人而开发的,所以机器人语言的通用性很差,几乎一种新的机器人问世,就有一种新的机器人语言与之配套。
机器人语言可以按照其作业描述水平的程度分为动作级编程语言、对象级编程语言和任务级编程语言三类。
动作级编程语言
动作级编程语言是最低一级的机器人语言。它以机器人的运动描述为主,通常一条指令对应机器人的一个动作,表示从机器人的一个位姿运动到另一个位姿。动作级编程语言的优点是比较简单,编程容易。其缺点是功能有限,无法进行繁复的数学运算,不接受浮点数和字符串,子程序不含有自变量;不能接受复杂的传感器信息,只能接受传感器开关信息;与计算机的通信能力很差。典型的动作级编程语言为VAL语言,如AVL语言语句“MOVETO(destination)”的含义为机器人从当前位姿运动到目的位姿。
动作级编程语言编程时分为关节级编程和末端执行器级编程两种。
关节级编程
关节级编程是以机器人的关节为对象,编程时给出机器人一系列各关节位置的时间序列,在关节坐标系中进行的一种编程方法。对于直角坐标型机器人和圆柱坐标型机器人,由于直角关节和圆柱关节的表示比较简单,这种方法编程较为适用;而对具有回转关节的关节型机器人,由于关节位置的时间序列表示困难,即使一个简单的动作也要经过许多复杂的运算,故这一方法并不适用。
关节级编程可以通过简单的编程指令来实现,也可以通过示教盒示教和键入示教实现。
末端执行器级编程
末端执行器级编程在机器人作业空间的直角坐标系中进行。在此直角坐标系中给出机器人末端执行器一系列位姿组成位姿的时间序列,连同其他一些辅助功能如力觉、触觉、视觉等的时间序列,同时确定作业量、作业工具等,协调地进行机器人动作的控制。
这种编程方法允许有简单的条件分支,有感知功能,可以选择和设定工具,有时还有并行功能,数据实时处理能力强。
机器人编程语言(二)
对象级编程语言
所谓对象即作业及作业物体本身。对象级编程语言是比动作级编程语言高一级的编程语言,它不需要描述机器人手爪的运动,只要由编程人员用程序的形式给出作业本身顺序过程的描述和环境模型的描述,即描述操作物与操作物之间的关系。通过编译程序机器人即能知道如何动作。
这类语言典型的例子有AML及AUTOPASS等语言,其特点为:
(1)具有动作级编程语言的全部动作功能。
(2)有较强的感知能力,能处理复杂的传感器信息,可以利用传感器信息来修改、更新环境的描述和模型,也可以利用传感器信息进行控制、测试和监督。
(3)具有良好的开放性,语言系统提供了开发平台,用户可以根据需要增加指令,扩展语言功能。
(4)数字计算和数据处理能力强,可以处理浮点数,能与计算机进行即时通信。
对象级编程语言用接近自然语言的方法描述对象的变化。对象级编程语言的运算功能、作业对象的位姿时序、作业量、作业对象承受的力和力矩等都可以以表达式的形式出现。系统中机器人尺寸参数、作业对象及工具等参数一般以知识库和数据库的形式存在,系统编译程序时获取这些信息后对机器人动作过程进行仿真,再进行实现作业对象合适的位姿,获取传感器信息并处理,回避障碍以及与其他设备通信等工作。
任务级编程语言
任务级编程语言是比前两类更高级的一种语言,也是最理想的机器人高级语言。这类语言不需要用机器人的动作来描述作业任务,也不需要描述机器人对象物的中间状态过程,只需要按照某种规则描述机器人对象物的初始状态和最终目标状态,机器人语言系统即可利用已有的环境信息和知识库、数据库自动进行推理、计算,从而自动生成机器人详细的动作、顺序和数据。例如,一装配机器人欲完成某一螺钉的装配,螺钉的初始位置和装配后的目标位置已知,当发出抓取螺钉的命令时,语言系统从初始位置到目标位置之间寻找路径,在复杂的作业环境中找出一条不会与周围障碍物产生碰撞的合适路径,在初始位置处选择恰当的姿态抓取螺钉,沿此路径运动到目标位置。在此过程中,作业中间状态作业方案的设计、工序的选择、动作的前后安排等一系列问题都由计算机自动完成。
任务级编程语言的结构十分复杂,需要人工智能的理论基础和大型知识库、数据库的支持,目前还不是十分完善,是一种理想状态下的语言,有待于进一步的研究。但可以相信,随着人工智能技术及数据库技术的不断发展,任务级编程语言必将取代其他语言而成为机器人语言的主流,使得机器人的编程应用变得十分简单。
一般用户接触到的语言都是机器人公司自己开发的针对用户的语言平台,通俗易懂,在这一层次,每一个机器人公司都有自己语法规则和语言形式,这些都不重要,因为这层是给用户示教编程使用的。在这个语言平台之后是一种基于硬件相关的高级语言平台,如C语言、C++语言、基于IEC61131标准语言等,这些语言是机器人公司做机器人系统开发时所使用的语言平台,这一层次的语言平台可以编写翻译解释程序,针对用户示教的语言平台编写的程序进行翻译解释成该层语言所能理解的指令,该层语言平台主要进行运动学和控制方面的编程,再底层就是硬件语言,如基于Intel硬件的汇编指令等。
商用机器人公司提供给用户的编程接口一般都是自己开发的简单的示教编程语言系统,如KUKA、ABB等,机器人控制系统提供商提供给用户的一般是第二层语言平台,在这一平台层次,控制系统供应商可能提供了机器人运动学算法和核心的多轴联动插补算法,用户可以针对自己设计的产品应用自由的进行二次开发,该层语言平台具有较好的开放性,但是用户的工作量也相应增加,这一层次的平台主要是针对机器人开发厂商的平台,如欧系一些机器人控制系统供应商就是基于IEC61131标准的编程语言平台。最底层的汇编语言级别的编程环境我们一般不用太关注,这些是控制系统芯片硬件厂商的事。
各家工业机器人公司的机器人编程语言都不相同,各家有各家自己的编程语言。但是,不论变化多大,其关键特性都很相似。比如Staubli机器人的编程语言叫VAL3,风格和Basic相似;ABB的叫做RAPID,风格和C相似;还有AdeptRobotics的V+,Fanuc,KUKA,MOTOMAN都有专用的编程语言,但是大都是相似.而由于机器人的发明公司Unimation公司最开始的语言就是VAL,所以这些语言结构都有所相似。VAL语言是美国Unimation公司于1979年推出的一种机器人编程语言,主要配置在PUMA和UNIMATION等型机器人上,是一种专用的动作类描述语言。
VAL语言是在BASIC语言的基础上发展起来的,所以与BASIC语言的结构很相似。在VAL的基础上Unimation公司推出了VALⅡ语言;而后来staubli收购了Unimation公司后,又发展起来了VAL3的机器人编程语言。
学习的话,一般来说各家机器人的官方网站都会有这些介绍资料,但是详细的资料就会比较欠缺。
如果您问“机器人的最佳编程语言是什么?
计算机视觉程序员会给出不同于认知机器人的答案。每个人都不同意什么是“最好的编程语言”,语言首先学习,即使这是最现实的答案,因为它取决于您要开发的应用程序类型以及您正在使用的系统。
机器人十大流行编程语言
世界上有超过1500种编程语言,这是目前机器人技术中十种最流行的编程语言。每种语言对机器人有不同的优势:
10.BASIC/帕斯卡
BASIC和Pascal,它们是几种工业机器人语言的基础,如下所述。BASIC是为初学者设计的(它代表初学者通用符号指令代码),这使它成为一个非常简单的语言开始。帕斯卡尔旨在鼓励良好的编程习惯小号,并介绍构造,如指针,它一个很好的“敲门砖”,从普通版使一个更复杂的语言。这几天,这两种语言都有点过时,有利于“日常使用”。但是,如果要进行大量的低级编码,或者想要熟悉其他工业机器人语言,可以学习它们。
9.工业机器人语言
几乎每个机器人制造商都开发了自己的专有机器人编程语言。您可以通过学习Pascal熟悉其中的几个。但是,您每次开始使用新的机器人时,仍然需要学习新的语言。
ABB拥有RAPID编程语言。Kuka有KRL(KukaRobotLanguage)。Comau使用PDL2,安川使用INFORM和川崎使用AS。然后,Fanuc机器人使用Karel,Stäubli机器人使用VAL3和UniversalRobots使用UR。
近年来,像ROSIndustrial这样的编程选项开始为程序员提供更多的标准化选项。但是,如果您是技术人员,则您更有可能使用制造商的语言。
8.LISP
LISP是世界上第二大最古老的编程语言(FORTRAN年龄较大,但只有一年)。它不像这个列表上许多其他编程语言那么广泛使用;然而,在人工智能编程中仍然非常重要。ROS的一部分是用LISP编写的,尽管你不需要知道使用ROS。
7.硬件描述语言(HDL)
硬件描述语言基本上是描述电子设备的编程方式。这些语言对于一些机器人专家来说是相当熟悉的,因为它们用于编程现场可编程门阵列(FPGA)。FPGA允许您开发电子硬件,而无需实际生产硅芯片,这使得它们成为更快更容易的一些开发选择。
如果你不是电子原型,你可能永远不会使用HDL。即使如此,重要的是知道它们存在,因为它们与其他编程语言完全不同。一方面,所有操作都是并行执行的,而不是依照基于处理器的语言进行。
6.装配
大会允许您以“一级和零级”进行编程,这是最低级别(或多或少)的编程,最近大多数低级别的电子设备都需要编程,随着Arduino等的兴起微控制器,您现在可以使用C/C++轻松地在这个级别进行编程,这意味着大部分机器人可能不那么必要。
5.MATLAB
MATLAB及其开放源码的亲戚,如Octave,是非常受欢迎的一些机器人工程师分析数据和开发控制系统。还有一个非常受欢迎的机器人工具箱用于MATLAB。我知道使用MATLAB开发整个机器人系统的人。如果要分析数据,生成高级图形或实现控制系统,您可能需要学习MATLAB。
4.C#/.NET
C#是Microsoft提供的专有编程语言。我在这里包括C#/.NET,主要是因为使用它作为主要语言的MicrosoftRoboticsDeveloperStudio。如果你要使用这个系统,你可能要使用C#。但是,首先学习C/C++可能是长期发展编码技巧的好选择。
3.Java
一些计算机科学学位将Java教学作为他们的第一种编程语言。Java从程序员“隐藏”底层的内存功能,这使得它比C更容易编程,但这也意味着你对代码实际做的不太了解。如果您从计算机科学的背景(许多人,特别是在研究中)来到机器人,你可能已经学会了Java。像C#和MATLAB一样,Java是一种解释语言,这意味着它不会被编译成机器代码。相反,Java虚拟机在运行时解释指令。使用Java的理论是,由于Java虚拟机,您可以在许多不同的机器上使用相同的代码。在实践中,这并不总是奏效,有时会导致代码运行缓慢。然而,Java在机器人的某些部分非常受欢迎,因此你可能需要它。
2.Python
Python近年来尤其在机器人技术方面出现了巨大的复苏。其中一个原因可能是Python(和C++)是ROS中发现的两种主要的编程语言。像Java一样,它是一种解释语言。与Java不同,语言的主要重点是易用性。许多人都认为这样做非常好。
Python节省了许多常规的事情,这些事情在编程中花费时间,例如定义和转换变量类型。此外,还有大量免费的图书馆,这意味着当您需要实现一些基本功能时,您不必“重新发明”。并且由于它允许使用C/C++代码进行简单的绑定,这意味着代码的性能很重的部分可以用这些语言来实现,以避免性能下降。
1.C/C++
最后,我们达到机器人技术的第一编程语言!许多人都同意C和C++是新机器人的好起点。为什么?因为很多硬件库都使用这些语言。它们允许与低级硬件进行交互,允许实时性能和非常成熟的编程语言。这些天,您可能会使用C++多于C,因为该语言具有更多的功能。C++基本上是C的扩展。首先学习至少一点C可能是有用的,以便您可以在找到以C编写的硬件库时识别它。C/C++并不像以前那样简单,比如Python或者MATLAB。使用C实现相同的功能可能需要相当长的时间,并且需要更多的代码行。然而,由于机器人非常依赖于实时性能,
机器人的主要特点之一是其通用性,是机器人具有可编程能力是实现这一特点的重要手段。机器人编程必然涉及机器人语言。机器人语言是使用符号来描述机器人动作的方法,它通过对机器人的描述,使机器人按照编程者的意图进行各种操作。
器人语言的产生和发展是与机器人技术的发展以及计算机编程语言的发展紧密相关的。编程系统的核心问题是操作运动控制问题。
机器人编程系统以及方法
机器人编程是机器人运动和控制问题的结合点,也是机器人系统最关键的问题之一。当前实用的工业机器人常为离线编程或示教,在调试阶段可以通过示教控制盒对编译好的程序一步一步地进行,调试成功后可投入正式运行。
机器人语言操作系统包括3个基本的操作状态:
监控状态:用来进行整个系统的监督控制。
编辑状态:提供操作者编制程序或编辑程序
执行状态:用来执行机器人程序
把机器人源程序转换成机器码,以便机器人控制柜能直接读取和执行,编译后的程序运行速度将大大加快。
根据机器人不同的工作要求,需要不同的编程。编程能力和编程方式有很大的关系,编程方式决定着机器人的适应性和作业能力。随着计算机在工业上的广泛应用,工业机器人的计算机编程变得日益重要。
编程语言也是多种多样的,目前工业机器人的编程方式有以下几种:
顺序控制的编程在顺序控制的机器中,所有的控制都是由机械或者电气的顺序控制来实现,一般没有程序设计的要求。顺序控制的灵活性小,这是因为所有的工作过程都已编辑好,由机械挡块,或其他确定的办法所控制。大量的自动机都是在顺序控制下操作的,这种方法的主要优点是成本低、易于控制和操作。
示教方式编程目前,大多数工业机器人都具有采用示教方式来编程的功能。示教方式编程一般可分为手把手示教编程和示教盒示教编程两种方式:
1、手把手示教编程:主要用于喷漆、弧焊等要求实现连续轨迹控制的工业机器人示教编程中。具体的方法是利用示教手柄引导末端执行器经过所要求的位置,同时由传感器检测出工业机器人个关节处的坐标值,并由控制系统记录、存储下这些数据信息。实际工作中,工业机器人的控制系统会重复再现示教过的轨迹和操作技能。
手把手示教编程也能实现点位控制,与CP控制不同的是它只记录个轨迹程序移动的两端点位置,轨迹的运动速度则按各轨迹程序段应对的功能数据输入。
2、示教盒示教编程方式是人工利用示教盒上所具有的各种功能的按钮来驱动工业机器人的各关节轴,按作业所需要的顺序单轴运动或多关节协调运动,完成位置和功能的示教编程。示教盒示教一般用于大型机器人或危险条件作业下的机器人示教。
3、脱机编程或预编程
脱机编程和预编程的含义相同,它是指用机器人程序语言预先用示教的方法编程,脱机编程的优点:编程可以不使用机器人,可以腾出机器人去做其他工作可预先优化操作方案和运行周期以前完成的过程或子程序可结合到代编的程序中去可以用传感器探测外部信息,从而使机器人做出相应的响应。这种响应使机器人可以在自适应的方式下工作控制功能中,可以包含现有的计算机辅助设计(CAD)和计算机辅助制造(CAM)的信息可以用预先运行程序来模拟实际运动,从而不会出现危险,以在屏幕上模拟机器人运动来辅助编程对不同的工作目的,只需替换一部分待定的程序在非自适应系统中,没有外界环境的反馈,仅有的输入是关节传感器的测量值,从而可以使用简单的程序设计手段。
4、对机器人的编程要求
5、机器人编辑语言的类型
转自:返回搜狐,查看更多
机器语言、汇编语言(低级语言)、高级语言
机器语言、汇编语言(低级语言)、高级语言【原文:https://zhuanlan.zhihu.com/p/37524989】
编程语言的机器级表示:机器语言、汇编语言、高级语言
首先下面一张图是C语言、汇编语言以及翻译过的机器语言,大家可以先有个大概的眼熟。
1、机器语言计算机是不能直接识别我们所编写的C程序或者Java程序的。它只能识别机器语言,而机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统令的集合。
早期计算机就是指可以执行机器指令,进行运算的机器。在我们常用的PC机中,有一个芯片,就是我们常说的CPU(CentralProcessingUnit,中央处理单元)可以完成前面所说的计算机的功能,但是每一种这样的微处理器(CPU)由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自己的机器指令集,也就是机器语言。
早期的程序设计均使用机器语言。程序员们将用0,1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。
用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍,而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。
那么该怎么办呢?这时候汇编语言便产生了。
需要注意的是现在除了计算机生产厂家的专业人员外,一般是不需要学习机器语言了。
2、汇编语言是一种用于电子计算机、微处理器、微控制器,或其他可编程器件的低级语言。在不同的设备中,汇编语言对应着不同的机器语言指令集。一种汇编语言专用于某种计算机系统结构,而不像许多高级语言,可以在不同系统平台之间移植。汇编语言的主体是汇编指令,汇编语言是二进制指令的文本形式,与指令是一一对应的关系。比如,加法指令00000011写成汇编语言就是ADD。
比如下面将寄存器BX的内容发送到AX上:
操作:寄存器BX的内容送到AX中1000100111011000机器指令movax,bx汇编指令我们能很明显的从上面两条指令看出区别,汇编指令相对于机器指令是很容易记住的。
可能有人会问,我们用汇编语言编写程序,可是计算机只认识机器指令,那该怎么办?这时候就需要一个能将汇编语言转换成机器指令的工具,我们称其为汇编器(有别于编译器)。程序员用汇编语言写出源代码,再用汇编汇编器将其编译为机器码,最后由计算机执行。
汇编语言是直接面向处理器(Processor)的程序设计语言。处理器是在指令的控制下工作的,处理器可以识别的每一条指令称为机器指令。每一种处理器都有自己可以识别的一整套指令,称为指令集。处理器执行指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变自己内部的工作状态,也能控制其它外围电路的工作状态。
汇编语言的另一个特点就是它所操作的对象不是具体的数据,而是寄存器或者存储器,也就是说它是直接和寄存器和存储器打交道,这也是为什么汇编语言的执行速度要比其它语言快,但同时这也使编程更加复杂,因为既然数据是存放在寄存器或存储器中,那么必然就存在着寻址方式,也就是用什么方法找到所需要的数据。例如上面的例子,我们就不能像高级语言一样直接使用数据,而是先要从相应的寄存器AX、BX中把数据取出。这也就增加了编程的复杂性,因为在高级语言中寻址这部分工作是由编译系统来完成的,而在汇编语言中是由程序员自己来完成的,这无异增加了编程的复杂程度和程序的可读性。
再者,汇编语言指令是机器指令的一种符号表示,而不同类型的CPU有不同的机器指令系统,也就有不同的汇编语言,所以,汇编语言程序与机器有着密切的关系。所以,除了同系列、不同型号CPU之间的汇编语言程序有一定程度的可移植性之外,其它不同类型(如:小型机和微机等)CPU之间的汇编语言程序是无法移植的,也就是说,汇编语言程序的通用性和可移植性要比高级语言程序低。
总结起来就是三个特点:机器相关性、高速度和高效率、编写和调试复杂(相对于高级语言)。
3、高级语言前面的机器语言和汇编语言我们都有一定了解了,汇编语言也是和机器语言一样,都是直接对硬件进行操作,但是汇编语言指令采用了英文缩写的标识符,更容易识别和记忆。但是说起来更容易识别和记忆,也只是相对于机器语言而言的。在实际编程中,汇编语言源程序也是十分复杂和冗长的,这时候高级语言产生了。
高级语言并不是指一种语言,而是包括很多编程语言,比如Java、C、C++、C#、python等等,是高度封装的编程语言。高级语言与计算机的硬件结构和指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。
汇编语言和高级语言最后都得转换成机器语言,但是高级语言由于高度封装,相同的实现下,高级语言转换成机器语言的执行步数通常都比汇编语言多,这也是为啥高级语言一般都比汇编语言性能差的原因。
从最开始我们给出的一张图也可以看出,C语言写出的短短几行代码,翻译成汇编语言会多很多,更不用说变成机器语言了。
机器语言
机器语言-MachineLanguage定义机器语言指的是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合;它是计算机设计者通过计算机的硬件结构赋予计算机的操作功能,所以不同型号计算机的机器语言是不相通的;其编码称为:机器码(MachineCode)/原生码(NativeCode);使用者:计算机/CPU生产厂家的专业人员,绝对多数程序员不会再去学机器语言;语句(指令)一条指令就是机器语言的一个语句,它是一组有意义的二进制代码;指令基本格式是:操作码段+地址码段操作码:指明了指令的操作性质及功能地址码:给出了操作数/操作数的地址编程首先我觉得用机器语言写程序有如下步骤:首先,要选择一个CPU(准确说是选指令集,如IA-32),知道此ISA的所有指令的格式。然后,按照业务需求,写01010101011010…..。好了,现在你知道了,用机器语言写代码其实是扯淡的!程序员首先要熟记所用计算机的全部指令代码机器含义;程序员要自己指定每条指令的执行过程;要考虑的东西太多,太繁琐,这一切会极大的消耗精力,这样你还怎么实现业务需求呢?结论1.如果有人对你说:“你要是学会机器语言了那才如何如何牛逼..之类的巴拉巴拉”,请直接抽他丫的!2.机器语言不是让99.99%的程序员学的,知道它只是让你明白程序运行原理。3.CPU开发商的开发人员确定了机器语言的语句(就是制定了指令),并且也只有他们才有必要用机器语言写一点东西。一个C编译为汇编(机器语言的助记符)的例子C程序运行过程
1.(C源代码)我们有一个c代码文件code.c
intaccum=0;intsum(intx,inty){intt=x+y;accum+=t;returnt;}在一台IA32机器上用unix命令行编译
unix>gcc-01-Scode.c这会使GCC(GNUCompilerCollection)运行编译器,产生一个汇编文件code.s2(C编译成汇编文件,)汇编文件code.s
sum:pushl%ebpmovl%esp,%ebpmovl12(%ebp),%eaxaddl8(%ebp),%eaxaddl%eax,accumpopl%ebpret以上代码中每个缩进的行都对应一条机器指令,即除了sum:
使用-c,GCC会编译并汇编该代码(但不链接)
unix>gcc-01-ccode.c3.1(编译后但没链接的目标文件)会产生目标代码文件code.o,这是二进制格式
一条条的由二进制0/1构成的指令3.2(编译并链接为可执行的目标文件)生成实际可执行代码需要对一组目标代码文件运行链接器,且这组目标代码文件中必须有main函数,假设有这样一个main.c文件
intmain(){returnsum(1,3);}生成可执行文件prog
unix>gcc-01-oprogcode.omain.c此时prog.o中已经有了两个过程的代码,还包含了用来启动和终止程序的信息,以及用来与操作系统交互的信息;
百度百科中关于GUN编译C的过程示例代码http://baike.baidu.com/subview/4848/6393900.htm
预编译过程gcc-Ea.c-oa.i
编译过程这个阶段,生成汇编代码。gcc-Sa.i-oa.s
汇编过程这个阶段,生成目标代码。此过程生成ELF格式的目标代码。gcc-ca.s-oa.o
链接过程链接过程。生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。gcca.o-oa
程序运行./ahello