文档库 最新最全的文档下载
当前位置:文档库 › 高级语言、汇编语言及机器语言的区别

高级语言、汇编语言及机器语言的区别

高级语言、汇编语言及机器语言的区别
高级语言、汇编语言及机器语言的区别

计算机语言具有高级语言和低级语言之分。而高级语言又主要是相对于汇编语言而言的,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。

低级语言分机器语言(二进制语言)和汇编语言(符号语言),这两种语言都是面向机器的语言,和具体机器的指令系统密切相关。机器语言用指令代码编写程序,而符号语言用指令助记符来编写程序。

高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,如目前流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,VC,易语言,中文版的C语言习语言等等,这些语言的语法、命令格式都不相同。

高级语言与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。所以汇编语言适合编写一些对速度和代码长度要求高的程序和直接控制硬件的程序。高级语言、汇编语言和机器语言都是用于编写计算机程序的语言。

高级语言程序“看不见”机器的硬件结构,不能用于编写直接访问机器硬件资源的系统软件或设备控制软件。为此,一些高级语言提供了与汇编语言之间的调用接口。用汇编语言编写的程序,可作为高级语言的一个外部过程或函数,利用堆栈来传递参数或参数的地址。

机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统

它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。

一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如,操作码字段和地址码字段,其中操作码指明了指令的操作性质及功能,地址码则给出了操作数或操作数的地址。

用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。

汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编.

高级语言、汇编语言及机器语言的区别

计算机语言具有高级语言和低级语言之分。而高级语言又主要是相对于汇编语言而言的,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。 低级语言分机器语言(二进制语言)和汇编语言(符号语言),这两种语言都是面向机器的语言,和具体机器的指令系统密切相关。机器语言用指令代码编写程序,而符号语言用指令助记符来编写程序。 高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,如目前流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,VC,易语言,中文版的C语言习语言等等,这些语言的语法、命令格式都不相同。 高级语言与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。所以汇编语言适合编写一些对速度和代码长度要求高的程序和直接控制硬件的程序。高级语言、汇编语言和机器语言都是用于编写计算机程序的语言。 高级语言程序“看不见”机器的硬件结构,不能用于编写直接访问机器硬件资源的系统软件或设备控制软件。为此,一些高级语言提供了与汇编语言之间的调用接口。用汇编语言编写的程序,可作为高级语言的一个外部过程或函数,利用堆栈来传递参数或参数的地址。 机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统 它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如,操作码字段和地址码字段,其中操作码指明了指令的操作性质及功能,地址码则给出了操作数或操作数的地址。 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。 汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编.

汇编语言基础知识

汇编语言基础知识 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有 效地应用汇编语言对其编程,因此,本章对硬件系统结构的问题进行部分探讨,首先介绍了计算机的基本结构、Intel 公司微处理器的发展、计算机的语言以及汇编语言的特点,在此基础上重点介绍寄存器、内存组织等汇编语言所涉及到的基本知识。 1.1 微型计算机概述 微型计算机由中央处理器(Central Processing Unit ,CPU )、存储器、输入输出接口电路和总线构成。CPU 如同微型计算机的心脏,它的性能决定了整个微型计算机的各项关键指标。存储器包括随机存储器(Random Access Memory ,RAM )和只读存储器(Read Only Memory ,ROM )。输入输出接口电路用来连接外部设备和微型计算机。总线为CPU 和其他部件之间提供数据、地址和控制信息的传输通道。如图1.1所示为微型计算机的基本结构。 外部设备存储器输入输出接口电路中央处理器 CPU 地址总线 数据总线 控制总线 图1.1 微型计算机基本结构 特别要提到的是微型计算机的总线结构,它使系统中各功能部件之间的相互关系变 为各个部件面向总线的单一关系。一个部件只要符合总线结构标准, 就可以连接到采用这种总线结构的系统中,使系统功能得到扩展。 数据总线用来在CPU 与内存或其他部件之间进行数据传送。它是双向的,数据总线 的位宽决定了CPU 和外界的数据传送速度,8位数据总线一次可传送一个8位二进制数据(即一个字节),16位数据总线一次可传送两个字节。在微型计算机中,数据的含义是广义的,数据总线上传送的不一定是真正的数据,而可能是指令代码、状态量或控制量。 地址总线专门用来传送地址信息,它是单向的,地址总线的位数决定了 CPU 可以直接寻址的内存范围。如 CPU 的地址总线的宽度为N ,则CPU 最多可以寻找2N 个内存单 元。

汇编语言与高级语言

简单的说,编程就是为了借助于计算机来达到某一目的或解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 计算机虽然功能十分强大。可以供你上网、打游戏、管理公司人事关系等等,但是没有程序,它就等于是一堆废铁,不会理会我们对它下达的“命令”。于是,我们要驯服它,只有通过一种方式——程序,这也是我们和计算机沟通的唯一方式。 那程序到底是什么呢? 程序也就是指令的集合,它告诉计算机如何执行特殊的任务。 打个比方说,它好比指导你烹调菜品的菜谱或指挥行驶一路到达目的地的交警(或者交通路标)。没有这些特殊的指令,就不能执行预期的任务。计算机也一样,当你想让计算机为你做一件事情的时候,计算机本身并不能主动为我们工作,因此我们必须对它下达指令,而它根本不会也不可能听懂人类自然语言对事情的描述,因此我们必须使用程序来告诉计算机做什么事情以及如何去做?甚至对最简单的任务也需要指令,例如如何取得击键,怎样在屏幕上放一个字母,怎样在磁盘中保存文件等等。 这么麻烦,连这些东西编程都要考虑!怪不得人家说编程好难!你错了,其实许多这样的指令都是现成的,包含在处理芯片中内置于操作系统中,因此我们不必担心它们工作,他们都是由处理器和操作系统来完成的,并不需要我们来干预这些过程。 上面讲到的计算机本身不会主动的做任何事情。因此我们要通过程序的方式来让计算机为我们“效劳”。而这个过程就是我们“编”出来的。编程可以使用某一种程序设计语言来实现,按照这种语言的语法来描述让计算机要做的事情。 我们这里所讲的语法和外语中的语法完全两码事,这里讲的语法只是读你的程序书写做出一写规定而已。 写出程序后,再由特殊的软件将你的程序解释或翻译成计算机能够识别的“计算机语言”,然后计算机就可以“听得懂”你的话了,并会按照你的吩咐去做事了。因此,编程实际上也就是“人给计算机出规则”这么一个过程。 随计算机语言的种类非常的多,总的来说可以分成机器语言,汇编语言,高级语言三大类。电脑每做的一次动作,一个步骤,都是按照已经用计算机语言编好的程序来执行,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。 计算机所能识别的语言只有机器语言,即由构成的代码。但通常人们编程时,不采用机器语言,因为它非常难于记忆和识别。 目前通用的编程语言有两种形式:汇编语言和高级语言。 汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。

机器人编程常用的四大语言介绍

机器人编程常用的四大语言介绍 伴随着机器人的发展,机器人语言也得到了发展和完善,机器人语言已经成为机器人技术的一个重要组成部分。机器人的功能除了依靠机器人的硬件支撑以外,相当一部分是靠机器人语言来完成的。早期的机器人由于功能单一,动作简单,可采用固定程序或者示教方式来控制机器人的运动。随着机器人作业动作的多样化和作业环境的复杂化,依靠固定的程序或示教方式已经满足不了要求,必须依靠能适应作业和环境随时变化的机器人语言编程来完成机器人工作。下面就来了解一下常见的机器人编程语言吧! VAL语言 一、VAL语言及特点 VAL语言是美国Unimation公司于1979年推出的一种机器人编程语言,主要配置在PUMA和UNIMATION等型机器人上,是一种专用的动作类描述语言。VAL语言是在BASIC语言的基础上发展起来的,所以与BASIC语言的结构很相似。在VAL的基础上Unimation公司推出了VALⅡ语言。 VAL语言可应用于上下两级计算机控制的机器人系统。上位机为LSI-11/23,编程在上位机中进行,上位机进行系统的管理;下位机为6503微处理器,主要控制各关节的实时运动。编程时可以VAL语言和6503汇编语言混合编程。

VAL语言命令简单、清晰易懂,描述机器人作业动作及与上位机的通信均较方便,实时功能强;可以在在线和离线两种状态下编程,适用于多种计算机控制的机器人;能够迅速地计算出不同坐标系下复杂运动的连续轨迹,能连续生成机器人的控制信号,可以与操作者交互地在线修改程序和生成程序;VAL语言包含有一些子程序库,通过调用各种不同的子程序可很快组合成复杂操作控制;能与外部存储器进行快速数据传输以保存程序和数据。 VAL语言系统包括文本编辑、系统命令和编程语言三个部分。 在文本编辑状态下可以通过键盘输入文本程序,也可通过示教盒在示教方式下输入程序。在输入过程中可修改、编辑、生成程序,最后保存到存储器中。在此状态下也可以调用已存在的程序。 系统命令包括位置定义、程序和数据列表、程序和数据存储、系统状态设置和控制、系统开关控制、系统诊断和修改。 编程语言把一条条程序语句转换执行。 二、VAL语言的指令 VAL语言包括监控指令和程序指令两种。其中监控指令有六类,分别为位置及姿态定义指令、程序编辑指令、列表指令、存储指令、控制程序执行指令和系统状态控制指令。各类指令的具体形式及功能如下:

第1章汇编语言基础知识

第1章汇编语言基础知识 本章介绍学习汇编语言程序设计所必须具备的基本知识,主要包括汇编语言的基本概念及计算机中数据的表示方法。通过本章的学习,读者应能了解汇编语言概念及其使用的进位计数制、不同进位计数制之间的转换、计算机编码以及基本数据类型。 本章内容要点: 汇编语言的概念 汇编语言的特点 不同进位计数制之间的转换 计算机编码 1.1汇编语言概述 1.1.1 汇编语言基本概念 自然语言是具有特定语音和语法等规范的、用于人类表达思想并实现相互交流的工具。人与人之间只有使用同一种语言才能进行直接交流,否则就必须通过翻译。要使计算机为人类服务,人们就必须借助某种工具,告诉计算机“做什么”甚至“怎么做”,这种工具就是程序设计语言。 程序设计语言通常分为三类:机器语言、汇编语言和高级语言。而前两种语言与机器密切相关,统称为低级语言。 1.机器语言 机器语言是计算机第一代语言,它全部由0、1代码组成,是能够直接被机器所接受的语言,是最底层的计算机语言。 机器语言不容易记忆,程序编写难度大,调试修改繁琐,且不易移植,现在程序员很少用。但机器语言执行速度最快,它是一种面向机器的程序设计语言。 2.汇编语言 为了克服机器语言难以记忆、表达和阅读的缺点,人们采用具有一定含义的符号作为助忆符,用指令助忆符、符号地址等组成的符号指令称为汇编格式指令(或汇编指令)。例如,用ADD表示加法指令,SUB表示减法指令,MOV表示传送指令等。汇编语言是汇编指令集、伪指令集和使用它们规则的统称。伪指令的概念将在第4章介绍。 汇编语言比机器语言直观,容易记忆和理解,用汇编语言编写的程序也比机器语言程序易读、易检查、易修改。对于不同的计算机,针对同一问题所编写的汇编语言源程序是互不通用的。

汇编语言 计算机

汇编语言图册 汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。[1] 符号语言 在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。因此汇编语言亦称为符号语言。 汇编 使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言编译器把汇编程序翻译成机器语言的过程称为汇编。 不能通用

汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。 汇编语言是直接面向处理器(Processor)的程序设计语言。处理器是在指令的控制下工作的,处理器可以识别的每一条指令称为机器指令。每一种处理器都有自己可以识别的一整套指令,称为指令集。处理器执行指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变自己内部的工作状态,也能控制其它外围电路的工作状态。 在电路中,每条机器指令都表现为一组电信号,通过一排导线进入处理器。这些电信号有的呈高电平,有的呈低电平,哪些为高,哪些为低,取决于不同的机器指令。如果把高电平记为“1”,低电平记为“0”,那么,不同的机器指令将表现为不同的二进制序列,由于它们的无规律性,这就使得机器指令难以理解、书写和记忆。 人类最容易接受自己每天都使用的自然语言。为了使机器指令的书写和理解变得容易,需要借鉴自然语言的优点,为此就引入了汇编语言。汇编语言使用符号来代表不同的机器指令,而这些符号非常接近于自然语言的要素。基本上,汇编语言里的每一条指令,都对应着处理器的一条机器指令。 汇编语言包括两个部分:语法部分和汇编器。语法部分提供与机器指令相对应的助记符,方便指令的书写和阅读。当然,汇编语言的符号可以被人类接受,但不能被处理器识别,为此,还要由汇编语言编译器将这些助记符转换成机器指令。 根据应用领域的不同,处理器的种类繁多,比如用于工业控制和嵌入式计算的Z80、MC6800 0和MCS-51、广泛应用于个人计算机的INTELx86系列,以及基于ARM体系结构的处理器,包括苹果公司在内的大企业都是ARM的客户。事实上,今天的ARM是最受欢迎的32位嵌入式处理器,而且,今天的ARM处理器比INTEL奔腾系列卖得还多,基本上是3:1的比例。不同的处理器有不同的指令集。正是因为这个原因,每一种处理器都会有自己专属的汇编语言语法规则和编译器。即使是同一种类型的处理器,也可能拥有不同的汇编语言编译器。一个明显的例子是INTEL x86系列的处理器,围绕它就开发出好多种编译器来,如MASM、NAS M、FASM、TASM、GAS和AT&T等。而且,每一种编译器,都使用不同的语法。 优点 汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点:

汇编语言的高级语言特性

汇编语言的高级语言特性 现在写汇编语言,就象写结构化的高级语言一样,非常的方便。不信?你看看下面写的小程序就知道啦,没有程序跳转,完全的结构化设计。最后还附有 Glow Glove 总结的小篇文章,供大家学习参考。 ;------------------------------------------------------- ;例:计算一个数据的阶乘 ;若结果较小,可放在 EAX 寄存器 ;若结果较小,可放在 EDX:EAX 寄存器 ;文件名:7.asm .386 .model flat,stdcall option casemap:none include windows.inc include masm32.inc include kernel32.inc include user32.inc includelib masm32.lib includelib kernel32.lib includelib user32.lib .data? CharOut db 100 dup(?) .code OutEdxEax PROTO :DWORD ;将EDX:EAX中的数据转换成十进制输出字符串形式! OutEdxEax proc lpString ;比如:EDX=0,EAX=01234567H,则转换后的字符串为: -> '19088743',0 mov edi,lpString ;指向存放结果的地址 mov esi,lpString mov ecx,10 ;转换成十进制 .while eax!=0 || edx!=0 push eax mov eax,edx xor edx,edx div ecx

计算机组成原理及汇编语言.

计算机组成原理及汇编语言试卷 10 一、选择题(共20道题) 1.计算机硬件能直接执行的只有()。 A 符号语言 B 机器语言 C 机器语言和汇编语言 D 汇编语言 2.中央处理机(CPU)是指()。 A 运算器 B 控制器 C 运算器和控制器 D 运算器、控制器和主存贮器 3.MOV AX,ES:COUNT[DI] 源操作数的寻址方式是:()。 A 基址寻址 B 立即寻址 C 变址寻址 D 基址变址寻址 4.所谓第二代计算机是以()为主要元器件。 A 超大规模集成电路 B 集成电路 C 晶体管 D 电子管 5.大部分计算机内的减法是用( )来实现的。 A 将被减数加到减数中 B 从被减数中减去减数 C 补数的相加 D 从减数中减去被减数 6.个人计算机是属于()。 A 大型计算机 B 小型机 C 微型计算机 D 超级计算机 7.运算器的主要功能是进行()。 A 逻辑运算 B 算术运算 C 逻辑运算与算术运算 D 初等函数运算 8.计算机中()负责指令译码。 A 算术逻辑单元 B 控制单元 C 存储器译码电路 D 输入输出译码电路 9.如果要处理速度、温度、电压等连续性数据可以使用()。 A 数字计算机 B 模拟计算机 C 混合型计算机 D 特殊用途计算机 10.有些计算机将部分软件永恒地存于只读存储器中,称之为()。 A 硬件 B 软件 C 固件 D 辅助存储 E 以上都不对 11.下列()不属于系统程序。 A 数据库系统 B 操作系统 C 编译程序 D 编辑程序

12.一个完整的计算机系统应包括()。 A 运算器、存贮器、控制器 B 主机和外部设备 C 主机与应用程序 D 配套的硬件设备和软件系统 13.下列()不是输入设备。 A 磁盘驱动器 B 键盘 C 鼠标器 D 打印机 14.以真空管为主要零件的是()。 A 第一代计算机 B 第二代计算机 C 第三代计算机 D 第四代计算机 15.MOV AX,ES:[1000H] 源操作数的寻址方式是:()。 A 立即寻址 B 直接寻址 C 变址寻址 D 基址寻址 16.计算机经历了从器件角度划分的四代发展历程,但从系统结构来看,至今为止绝大多数计算机仍是()式计算机。 A 实时处理 B 智能化 C 并行 D 冯·诺依曼 17.将有关数据加以分类、统计、分析,以取有利用价值的信息,我们称其为()。 A 数值计算 B 辅助设计 C 数据处理 D 实时控制 18.下列()为计算机辅助教学的英文缩写。 A CAD B CAM C CAE D CAI 19.下列描述()是正确的。 A 控制器能理解、解释并执行所有的指令及存储结果 B 一台计算机包括输入、输出、控制、存储及运算五个单元 C 所有的数据运算都在CPU的控制器中完成 D 以上答案都正确 20.第三代计算机采用()。 A 晶体管 B 电子管 C 集成电路 D 超大规模集成电路 二、填空题(共20道题) 1.(D4E5)H ∨()H=(152345)H 2.主存储器的读取规则:“高高低低”规则,即____地址对应高字节,低地址对应____字节。 3.在浮点补码二进制加减运算中,当尾数部分出现_____和_____形式时,需进行左规,此时尾数______移一位,阶码_____,直到______为止。 4.设操作数字长16位(不包括符号位),机器作原码两位乘运算,共需作__次___操作,最多需做___次____操作,才能得到最后的乘积,乘积的符号位需_______。

机器语言

机器语言 百科名片 机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义,例如某台计算机字长为16位,即有16个二进制数组成一条指令或其它信息。16个0和1可组成各种排列组合,通过线路变成电信号,让计算机执行各种不同的操作。 目录 简介 指令格式 寻址方式 种类 特点 发展过程 编辑本段简介 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基 本格式如:操作码字段地址码字段其中操作码指明了指令的操作性质及功能,地址码则给出了操作数或操作数的地址。 各计算机公司设计生产的计算机,其指令的数量与功能、指令格式、寻址方式、数据格式都有差别,即使是一些常用的基本指令,如算术逻辑运算指令、转移指令等也是各不相同的。因此,尽管各种型号计算机的高级语言基本相同,但将高级语言程序(例如Fortran语言程序)编译成机器语言后,其差别也是很大的。因此将用机器语言表示的程序移植到其他机器上去几乎是不可能的。从计算机的发展过程已经看到,由于构成计算机的基本硬件发展迅速,计算机的更新换代是很快的,这就存在软件如何跟上的问题。大家知道,一台新机器推出交付使用时,仅有少量系统软件(如

操作系统等)可提交用户,大量软件是不断充实的,尤其是应用程序,有相当一部分是用户在使用机器时不断产生的,这就是所谓第三方提供的软件。 为了缓解新机器的推出与原有应用程序的继续使用之间的矛盾,1964年在设计IBM360计算机时所采用的系列机思想较好地解决了这一问题。从此以后,各个计算机公司生产的同一系列的计算机尽管其硬件实现方法可以不同,但指令系统、数据格式、I/O系统等保持相同,因而软件完全兼容(在此基础上,产生了兼容机)。当研制该系列计算机的新型号或高档产品时,尽管指令系统可以有较大的扩充,但仍保留了原来的全部指令,保持软件向上兼容的特点,即低档机或旧机型上的软件不加修改即可在比它高档的新机器上运行,以保护用户在软件上的投资。 CISC(复杂指令系统)和RISC(精简指令系统) 编辑本段指令格式 计算机的指令格式与机器的字长、存储器的容量及指令的功能都有很大的关系。从便于程序设计、增加基本操作并行性、提高指令功能的角度来看,指令中应包含多种信息。但在有些指 令中,由于部分信息可能无用,这将浪费指令所占的存储空间,并增加了访存次数,也许反而会影响速度。因此,如何合理、科学地设计指令格式,使指令既能给出足够的信息,又使其长度尽可能地与机器的字长相匹配,以节省存储空间,缩短取指时间,提高机器的性能,这是指令格式设计中的一个重要问题。 计算机是通过执行指令来处理各种数据的。为了指出数据的来源、操作结果的去向及所执行的操作,一条指令必须包含下列信息: (1)操作码。它具体说明了操作的性质及功能。一台计算机可能有几十条至几百条指令,每一条指令都有一个相应的操作码,计算机通过识别该操作码来完成不同的操作。 (2)操作数的地址。CPU通过该地址就可以取得所需的操作数。 (3)操作结果的存储地址。把对操作数的处理所产生的结果保存在该地址中,以便再次使用。 (4)下条指令的地址。执行程序时,大多数指令按顺序依次从主存中取出执行,只有在遇到转移指令时,程序的执行顺序才会改变。为了压缩指令的长度,可以用一个程序计数器(ProgramCounter,PC)存放指令地址。每执行一条指令,PC的指

X86汇编语言

汇编(破解系列基础) (王爽汇编语言笔记第一版2013-8-1) (王爽汇编语言笔记第二版2013-8-11) 笔记目录: 第一章:基础知识(机器语言与汇编语言,及8086cpu的地址数据控制总线。) 第二章:寄存器cpu工作原理(寄存器的初步认识,字和字节概念,最主要的是8086cpu物理地址的表达方法,及汇编开始执行代码段。) 第三章:寄存器的内存访问(cpu是如何访问内存的,并附加一些简单的汇编指令,重要的是栈概念的引入。) 第四章:第一个程序(==,主要记录DEBUG是怎么用的......) 第五章:[bx]和loop指令(循环的引入,及段前缀的概念。) 第六章:包含多个段的程序(包含多个段使程序使数据代码栈更加清晰) 第七章:更灵活的定位内存地址的方法(引进SI DI16寄存器使程序寻址更加方便,模拟高级语言中数组和结构体表达,及and和or指令汇编指令。) 第八章:数据处理的两个基本问题(==) 第九章:跳转指令的原理(jmp jcxz各种跳转地址表达方法,及offset操作符。)第十章:call和ret(最重要,类似高级语言中函数的功能。) 第十一章:标志寄存器(各种”jump”,各种标志位...每次执行后可由标志位判断数据处理情况,破解中尤其重要。)

第一章:基础知识 1:【机器语言】(010000001000000)0和1的组成 2:【汇编语言】:每条汇编指令对应一条机器语言 13BE:0100B80010MOV AX,1000 (B8对应AX,0010高低字节对应1000,第十章中有详细的解释) 3:【CPU对内存的读写】(8086CPU,X86) CPU到内存3条总线:控制总线地址总线数据总线 ①地址总线(内存索引):8086CPU一共16条,每条传送0或1。 ②数据总线(CPU与外部的传送速度) ③控制总线(多少种控制总线是CPU对外界器件有多少种控制,有些命令是几根控制线综合发出的) 4:【RAM(随机储存)和ROM(只读储存)】 RAM和ROM是内存,硬盘是外存。 ①RAM主随机存储器 ②ROM刷BIOS储存引导设置(把病毒刷入BIOS…^^) ③接口卡RAM比如显存 第二章:寄存器CPU工作原理 5:【8086CPU的寄存器】 通用类:AX BX CX DX,16位寄存器。 通用类又可以分为高段(AH)低段(AL),也就是高字节和低字节8位 段地址类:CS(代码段地址)DS(数据段地址)SS(栈段)ES(混合类)

自然语言与机器语言的比较

周锡令 经过几十年的全球性的努力,以机器翻译为代表的计算机自然语言处理工作始终没有达到人们预想的境界。于是我们竟不住要问:为什么电脑处理起“编程语言”来那样轻松自如,可以作好多非常复杂的事情;而在一句普通的自然语言面前却显得像一个大笨蛋呢?自然语言和编程语言的本质区别到底在哪里? 自然语言和编程语言显然有很多地方不同。但是作为“语言”,两者都面临语言使用这所需要的一些要求:(1)有强大的表达能力(能够把事情说清楚) (2)结构化。人的短时记忆容量不多,信息如果不分层次,无论听说还是阅读都会造成困难。 (3)具有简洁、浓缩表达的机制(使听说双方都不觉得罗嗦)。 在这两种要求的驱动下,两种语言都会发展出一些机制,这些机制在两种语言中的表现可能大不相同,但是会存在某种对应关系。 在文科领域有所谓“比较文学”的行当。考虑到不同民族,不同文化发源地发展出来的文学作品既有各自的特色,又有互通的共性,可以对它们的异同加以比较。事实证明,从这种比较中,可以得到许多有益的启示。“比较”既然是观察和分析事物的有效方法,把自然形成的语言和人工设计的语言(计算机编程语言就是应用最为广泛的一种人工语言)进行一番比较也许能给我们一些工作上的启示。 语言的设计者 自然语言是在无数多人群之间的碰撞和交流之间产生、发展、筛选、淘汰之后形成的,好比是“市场经济”的产物。 计算机编程语言(以下简称“编程语言”)则是“计划经济”的产物。它所使用的词汇、规则都是事先由一位“上帝”(语言的设计者)策划好的。 词汇及其分类 “词”是自然语言中的基石,它们是具有语义的最小独立单位。 在编程语言中对应的东西就是token。Token是编译程序中的术语,它包括外形像英语单词的Word,以及“=, +, -, *, /, ==,>, <, (, ), ……” 之类的符号。 从信息处理的角度来看,“词”和token都是“符号(Symbol)”,它们可以被我们“用来”映射到各种实体或者概念上去。根据一个符号所映射到各种实体或者概念的性质来把它们进行分类。 语言学家把自然语言中的词划分为许多类:名词、动词、形容词、副词、数词、连接词、感叹词、………。我们应该注意到,它们不是在同一级别上的。 名词和动词:是最重要的。它们直接反映了我们对世界上形形色色的事物以及这些事物之间的相互作用。形容词、副词、数词、则是第二级的。它们只对事物以及这些事物之间的相互作用起修饰作用。 剩下来的连接词、感叹词、………则是第三级的。它们主要起语法的作用。(用来提示语句内部的结构性信息,起连接作用、用来表述“词”与“词”之间的关系) 与之对应,在编程语言中,可以把token划分为:

计算机原理、机器语言原理

一、计算机原理/机器语言原理 计算机的核心部件是CPU(中央处理单元),这是一个有着众多引脚的集成电路。计算机的所有动作均由其内部的“电子运算”而最终产生。从理解的角度上,可以把CPU看作是一套“约定”的集合。当我们通过一些引脚告诉它“1”、“加”、“2”、“运算”、“输出”等信号时,通过CPU设计制作时固定好的“约定”,在其另一些引脚上输出“3”的信号并通知显示设备显示出“3”的图象,我们就此得到了结果。——这些“约定”就是该CPU的机器语言。 不同的CPU有着不同的机器语言。不同机器语言基础上的软件无法通用。某一厂商新型的CPU为了软件的通用性往往向其早期的CPU保持兼容。机器语言是一切软件(包括操作系统)的基础,是计算机最终识别并执行的指令。 任何的机器语言都只接受两种信息:“指令”和“数据”;指令是告诉CPU做什么样的动作,而数据则是动作的对象。比如上文中的“加”、“运算”等是指令,而“1”、“2”是数据。从形式上讲,指令和数据都是二进制信息。但如果将数据当成指令交给CPU处理,通常CPU会无法理解而死机;反之如果将指令当成数据交给CPU则不会引起任何恶果,因为数据不会引起CPU任何的动作。 为验证这一说法,你可以随便将一个文件的扩展名改为COM在DOS下交给系统执行;也可以将命令处理器https://www.wendangku.net/doc/1b4864895.html,的扩展名改为TXT用记事本打开(切记不要存盘!)。 二、二进制和计算机存储单位 计算机使用二进制,因为表示两种状态的物质比较容易找到,比如电灯的“灭”和“亮”以及磁场的“负”和“正”。二进制其实就是“逢二进一”。在二进制里,“0”还是“0”,“1”还是“1”,但“2”就写成了“10”(请读成“壹零”而不要读成“十”),同样,“3”是“11”,“4”则是“100”——这种牺牲了位元的做法虽然浪费了存储单元但却相对较易实现。 表示二进制的位元叫“位”(Bit)。一个位有两种属性,“0”或者“1”。我们能够接触到的“xx位操作系统”或者“xx位真彩色”里的“位”就是这个“位”。 计算机的基本存储单元是“字节(Byte)”。一个字节由8个“位”组成。 1024个字节称为1KB。为什么不是1000而是1024呢?因为在二进制里多一位就是多一倍(乘2),因此计算机里充满了2的倍数,而1024是2的10次方。 更大的单位还有MB和GB,1MB=1024KB,1GB=1024MB。 三、操作系统 当人们不想再重复地向计算机输入一套套的机器语言时,操作系统随之诞生。有了它,人们不必再使用二进制的机器语言直接与硬件说话。使用一个COPY命令,就可以实现1823句的机器语言指令来完成信息的复制工作。如果需要复制八个文件,只有傻瓜才愿意重复八次机器语言,聪明人则会将这套指令做成集合然后通过一个命令来调用它——操作系统是用户和计算机硬件中间的“界面”,除了简单高效之外,更重要的是操作系统隔离了高深的理论知识,使得对计算机的使用变成了简便的对操作系统的掌握。 美国微软公司(Microsoft)在操作系统方面做出了巨大贡献。其磁盘操作系统DOS由于开放了所有的机器语言而在最需要的时刻赢得了大量的软件。在DOS里,系统提供了大量的子程序供编程调用,由此DOS 迅速打败了对手而几乎一统天下。代替DOS的图形操作系统Windows更是带领人们进入了自由探索时代。无论如何,使用鼠标器将文件扔到垃圾箱远比记忆DELETE更为直观。 四、磁盘使用原理 磁盘是计算机存储信息的设备。 在DOS/Windows系统下,将软磁盘划分为磁道(磁头静止时主轴马达带动盘片旋转一周形成的圆环)和扇区(磁道上每512个字节被划分为一个扇区)。高密度软盘有80个磁道,每磁道分为18个扇区,加上反正两面都使用,所以总容量是80*18*512*2=1474560 Bytes=1440KB=1.44MB。对于硬盘来讲,因为不

汇编语言和高级编程语言区别与联系

汇编语言和高级编程语言区别与联系C语言是作为一个程序员来说,必须要掌握也是最基础的编程语言。在编程语言发展的历史长河里,出现了各种各样的编程语言,他们由不同的人开发又在不同的领域得到发展,从而发展到现今编程语言领域的百花齐放百家争鸣。作为机器码之上的汇编语言无疑是每个软件工程师必须要了解的编程语言。本文简述了编程语言的发展史,以及汇编语言和高级编程语言的区别和联系。在对比中对编程语言有更深入的理解。 一、编程语言的发展历程 自从1946年世界上第一台电子计算机问世,人类和机器的交流方式和语言就成为了软件工程师和计算机从业者的主要研究方向,更有效更简便的编程语言成为了软件工程师的新宠儿,伴随着计算机的飞速发展,计算机的硬件升级速度也越来越快,对编程语言的要求也日益严格。在过去的几十年,编程语言有了长足的发展,至今已经有四代语言问世。大量的编程语言为了满足不同领域的编程要求和软件功能,经历了被修改,被取代,被发展等过程,最终发展成了现在编程语言的多样化。尽管人们多次试图寻找一个能够适应所有编程环境的通用语言,但是却没有一次成功。程序设计语言正在与现代科技日益飞跃,人类的智慧在日益彰显。 1.机器语言 计算机的硬件作为一种电路元件,它的输出和输入只能是有电或者没电,也就是所说的高电平和低电平,所以计算机传递的数据是由“0”和“1”组成的二进制数,所以说二进制的语言是计算机语言的本质。计算机发明之初,人

们为了去控制计算机完成自己的任务或者项目,只能去编写“0”、“1”这样的二进制数字串去控制电脑,其实就是控制计算机硬件的高低电平或通路开路,这种语言就是机器语言。直观上看,机器语言十分晦涩难懂,其中的含义往往要通过查表或者手册才能理解,使用的时候非常痛苦,尤其当你需要修改已经完成的程序时,这种看起来无序的机器语言会让你无从下手,也很难找到程序的错误。而且,不同计算机的运行环境不同,指令方式操作方式也不尽相同,所以当你在这种机器语言就有了特定性,只能在特定的计算机上执行,而一旦换了机器就需要重新编程,这极大的降低了程序的使用和推广效率。但由于机器语言具有特定性,完美适配特定型号的计算机,故而运行效率远远高过其他语言。机器语言,也就是第一代编程语言。 2.汇编语言 通过我对机器语言的介绍,不难看出机器语言作为一种编程语言,灵活性较差可阅读性也很差,为了减轻机器语言带给软件工程师的不适应,人们对机器语言进行了升级和改进:用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用“ADD”代表数字逻辑上的加减,“MOV”代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便,这种语言就是我们所说的汇编语言,即第二代计算机语言。但是这时候,计算机的硬件还是那些硬件,所以计算机还是不认识那些字母符号,这时候就需要一个专门的程序把这些字符变成计算机能够识别的二进制数。因为汇编语言只是将机器语言做了简单编译,所以并没有根本上解决机器语言的特定性,所以汇编语言和机器自身的编程环境息息相关,推广和移植很难,但是还是保持了机器

机器语言

机器语言 机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义,例如某台计算机字长为16位,即有16个二进制数组成一条指令或其它信息。16个0和1可组成各种排列组合,通过线路变成电信号,让计算机执行各种不同的操作。 目录 如某种计算机的指令为1011011000000000,它表示让计算机进行一次加法操作;而指令1011010100000000则表示进行一次减法操作。它们的前八位表示操作码,而后八位表示地址码。从上面两条指令可以看出,它们只是在操作码中从左边第0位算起的第7和第8位不同。这种机型可包含256(=2的8次方)个不同的指令。 编辑本段 特点: 机器语言或称为二进制代码语言,计算机可以直接识别,不需要进行任何翻译。每台机器的指令,其格式和代码所代表的含义都是硬性规定的,故称之为面向机器的语言,也称为机器语言。它是第一代的计算机语言。机器语言对不同型号的计算机来说一般是不同的。 编辑本段 缺点:

1.大量繁杂琐碎的细节牵制着程序员,使他们不可能有更多的时间和精力去从事创造性的劳动,执行对他们来说更为重要的任务。如确保程序的正确性、高效性。 2.程序员既要驾驭程序设计的全局又要深入每一个局部直到实现的细节,即使智力超群的程序员也常常会顾此失彼,屡出差错,因而所编出的程序可靠性差,且开发周期长。 3.由于用机器语言进行程序设计的思维和表达方式与人们的习惯大相径庭,只有经过较长时间职业训练的程序员才能胜任,使得程序设计曲高和寡。 4.因为它的书面形式全是"密"码,所以可读性差,不便于交流与合作。 5.因为它严重地依赖于具体的计算机,所以可移植性差,重用性差。 这些弊端造成当时的计算机应用未能迅速得到推广。 机器语言; 一种cpu的指令系统,也称cpu的机器语言。它是该cpu可以识别的一组由1和0序列构成的指令码。用机器语言编程序,就是从实用的cpu的指令系统中挑选合适的指令,组成一个指令系列。 编辑本段 范例 指令部分的范例 0000 代表加载(LOAD) 0001 代表储存(SET) ... 暂存器部分的范例 0000 代表暂存器 A 0001 代表暂存器 B ... 内存部分的范例 000000000000 代表位址为 0 的内存 000000000001 代表位址为 1 的内存 000000001000 代表位址为 8 的内存 100000000000 代表位址为 2^11 的内存 整合范例 0000,0000,000000001000 代表 LOAD A, 16 0000,0000,000000000001 代表 LOAD A, 1 0000,0001,000000001000 代表 STORE B, 16 0000,0001,000000000001 代表 STORE B, 1

[电脑书籍]汇编语言简介与入门

我不想夸大或者贬低汇编语言。但我想说,汇编语言改变了20世纪的历史。与前辈相比,我们这一代编程人员足够的幸福,因为我们有各式各样的编程语言,我们可以操作键盘、坐在显示器面前,甚至使用鼠标、语音识别。我们可以使用键盘、鼠标来驾驭“个人计算机”,而不是和一群人共享一台使用笨重的继电器、开关去操作的巨型机。相比之下,我们的前辈不得不使用机器语言编写程序,他们甚至没有最简单的汇编程序来把助记符翻译成机器语言,而我们可以从上千种计算机语言中选择我们喜欢的一种,而汇编,虽然不是一种“常用”的具有“快速原型开发”能力的语言,却也是我们可以选择的语言中的一种。 每种计算机都有自己的汇编语言——没必要指望汇编语言的可移植性,选择汇编,意味着选择性能而不是可移植或便于调试。这份文档中讲述的是x86汇编语言,此后的“汇编语言”一词,如果不明示则表示ia32上的x86汇编语言。 汇编语言是一种易学,却很难精通的语言。回想当年,我从初学汇编到写出第一个可运行的程序,只用了不到4个小时;然而直到今天,我仍然不敢说自己精通它。编写快速、高效、并且能够让处理器“很舒服地执行”的程序是一件很困难的事情,如果利用业余时间学习,通常需要2-3年的时间才能做到。这份教材并不期待能够教给你大量的汇编语言技巧。对于读者来说,x86汇编语言"就在这里"。然而,不要僵化地局限于这份教材讲述的内容,因为它只能告诉你汇编语言是“这样一回事”。学好汇编语言,更多的要靠一个人的创造力于悟性,我可以告诉你我所知道的技巧,但肯定这是不够的。一位对我的编程生涯产生过重要影响的人曾经对我说过这么一句话: 写汇编语言程序不是汇编语言最难的部分,创新才是。 我想,愿意看这份文档的人恐怕不会问我“为什么要学习汇编语言”这样的问题;不过,我还是想说几句:首先,汇编语言非常有用,我个人主张把它作为C语言的先修课程,因为通过学习汇编语言,你可以了解到如何有效地设计数据结构,让计算机处理得更快,并使用更少的存储空间;同时,学习汇编语言可以让你熟悉计算机内部运行机制,并且,有效地提高调试能力。就我个人的经验而言,调试一个非结构化的程序的困难程度,要比调试一个结构化的程序的难度高很多,因为“结构化”是以牺牲运行效率来提高可读性与可调试性,这对于完成一般软件工程的编码阶段是非常必要的。然而,在一些地方,比如,硬件驱动程序、操作系统底层,或者程序中经常需要执行的代码,结构化程序设计的这些优点有时就会被它的低效率所抹煞。另外,如果你想真正地控制自己的程序,只知道源代码级的调试是远远不够的。 浮躁的人喜欢说,用C++写程序足够了,甚至说,他不仅仅掌握C++,而且精通STL、MFC。我不赞成这个观点,掌握上面的那些是每一个编程人员都应该做到的,然而C++只是我们"常用"的一种语言,它不是编程的全部。低层次的开发者喜欢说,嘿,C++是多么的强大,它可以做任何事情——这不是事实。便于维护、调试,这些确实是我们的追求目标,但是,写程序不能仅仅追求这个目标,因为我们最终的目的是满足设计需求,而不是个人非理性的理想。这份教材适合已经学习过某种结构化程序设计语言的读者。其内容基于我在1995年给别人讲述汇编语言时所写的讲义。当然,如大家所希望的,它包含了最新的处理器所支持的特性,以及相应的内容。我假定读者已经知道了程序设计的一些基本概念,因为没有这些是无法理解汇编语言程序设计的;此外,我希望读者已经有了比较良好的程序设计基础,因为如果你缺乏对于结构化程序设计的认识,编写汇编语言程序很可能很快就破坏了你的结构化编程习惯,大大降低程序的可读性、可维护性,最终让你的程序陷于不得不废弃的代码堆之中。 基本上,这份文档撰写的目标是尽可能地便于自学。不过,它对你也有一些要求,尽管不是很高,但我还是强调一下。 学习汇编语言,你需要 胆量。不要害怕去接触那些计算机的内部工作机制。

相关文档