电子元件综合基础

  • 格式:doc
  • 大小:115.03 KB
  • 文档页数:11

微机原理课 6 讲教案主讲人许文丹汇编语言基础一、计算机语言计算机语言:能够把人的命令告诉计算机的一套符号系统及其使用规则称为“计算机语言”。

到目前为止,计算机语言已经由低级到高级经历了:机器语言、汇编语言、高级语言、第四代语言(第四代语言比第三代语言更接近自然语言。

用于访问数据库的语言经常被认为是第四代语言,如Power Builder)的发展过程。

其中汇编语言是一种能够充分利用计算机硬件特性的低级语言,它与计算机的结构有非常紧密的联系。

不同的计算机有各自的汇编语言。

1、机器语言计算机的所有操作都是在指令的控制下进行的。

能够直接控制计算机完成指定动作的是机器指令。

一条机器指令是一个由0和1组成的二进制代码序列。

不同的机器指令对应的二进制代码序列也各不相同。

一条机器指令通常由操作码和操作数两部分构成,操作码在前,操作数在后。

下面的二进制代码序列就是一条8088的机器指令:10000000,00000110,01100100,00000000,00010010二进制序列中的逗号是为了方便阅读而加上的,并不是机器指令的一部分。

前16位是操作码部分,含义是要求计算机做两个数的加法操作;后24位是操作数部分,分别指出第一个加数在内部存储器的编号为100的那个字节中,另一个加数在指令中,是18。

对于同样的二进制序列,不同型号的CPU对它的理解是不一样的。

所以机器代码与机器本身有着紧密的联系。

每一种计算机(准确的说是每一种CPU)都有自己的一套指令,一种机型的所有机器指令的集合就是它的指令系统。

指令系统及其使用规则构成这种计算机的机器语言。

选择指令系统中的指令排列起来,可以构成一个指令序列,用以告诉计算机完成一连串的动作,这就是一个机器语言程序。

2、自然语言与汇编语言的对比机器语言是计算机的“母语”,但是绝大多数人难学。

现实生活中,人们使用汉语、英语、法语等各种不同的自然语言,任何一种自然语言对于当代计算机来说都是无法领会的。

解决办法:“找”一种双方都能够也容易学会的语言作为中间媒介。

汇编语言、高级语言、第四代语言都扮演着这个中介角色。

若一个人要学新语言,他该学些什么呢?中国人学英语的过程:字母-》单词-》简单句子-》若干连贯的句子描述一件简单的事情-》熟练写英语文章(都会穿插相应的语法知识)自然语言与汇编语言的对照汇编语言人可以发挥自己的聪明才智学会,计算机如何学?这是利用汇编语言到机器语言的固定翻译机制实现的。

计算机专家们已编制了一些翻译程序供汇编语言的编程人员使用,这种翻译程序称为“汇编程序”。

3、汇编程序和连接程序汇编程序是一种计算机软件(系统软件),它能够把人们编写的汇编语言程序(称为源程序,一般以.ASM作为文件扩展名)翻译成机器语言,这种翻译操作称为“汇编”。

不同的计算机有不同的机器语言,因而也需要有不同的翻译器―――汇编程序,MASM.EXE是一种专门用于把8086/8088的汇编语言源程序翻译成相应的机器语言程序的翻译器。

汇编程序还具有语法检查的功能,交给汇编程序进行处理的源程序在翻译之前都必须经过语法检查这一关。

若发现源程序中有违背汇编语言语法的地方,将不进行翻译工作,而是指出错误的位置以及类型。

汇编程序翻译的结果已具备机器语言的形式,称为“目标程序”,一般以.OBJ作为文件扩展名。

但是,目标程序还不能直接交给计算机去执行,它还需要通过连接程序(LINK.EXE)的装配才具备可执行的形式,装配结果称为“执行文件”,一般以.EXE作为文件扩展名。

4、汇编语言的构成汇编语言是较早发明的一种介于自然语言与机器语言之间的程序设计语言。

为了使汇编语言到机器语言的翻译比较简单,汇编语言用大量的语法规则对从指令到程序的书写加以限制。

与后来的高级语言、第四代语言相比,汇编语言更接近于机器语言,用汇编语言编写的源程序还保留了很多机器语言的影子。

比如:机器指令中的操作码部分在汇编语言中用与该指令的功能相关的一个符号表示,例如加法指令就用ADD表示,数据传送用MOV表示,这类符号称为“助记符”。

对于一个放在内存中的操作数,如果要求编程人员记住每一个操作数在内存中的存放位置是一个巨大的负担。

在汇编语言中,减轻这种负担的方式是用变量存放操作数,程序员只要记住变量的名字即可。

跳转是程序设计中不可避免的一个问题。

在机器语言中,跳转的目的地是用指令所在的位置(即在内存的哪一个字节)来表示的,而汇编语言中的跳转则是在目的地做一个称为“标号”的标记。

除了与机器语言有直接对应关系的助记符,变量,标号外,为了能让汇编程序正确的完成翻译工作,必须要告诉汇编程序变量需要占据多少字节的内存,程序到何处结束,整个程序的第一条指令在什么地方等问题。

因此,源程序中应该有一些告诉汇编程序如何进行翻译操作的“说明”,这类说明在翻译结果中并没有对应的机器代码,所以称为“伪指令”。

指令助记符,数据和存放数据的变量,标号,伪指令以及相应的使用规则构成了汇编语言的全部内容。

5、汇编语言的特点与机器语言相比,汇编语言易于理解和记忆,编写的源程序可读性较强。

汇编语言中还提供了一些分工协作并相互通讯的方法,可以实现初步的结构化编程。

源程序翻译成机器语言后的执行文件在存储空间,执行速度方面与机器语言编写的程序大致相当。

高级语言和第四代语言在科学计算,事务处理等方面比汇编语言有巨大的优势,但用高级语言编写的程序,在翻译成机器语言后,程序代码冗长,占用存储空间大,执行速度慢。

如果用高级语言来编写接口控制,设备通讯等方面的程序则不太合适,相反这样的情况下汇编语言更容易发挥其长处:目标程序或执行文件简短,执行速度快,效率高,特别是汇编语言能直接控制计算机的内存和外设,这些特点是高级语言和第四代语言望尘莫及的。

高级语言和第四代语言适合于编写应用软件,对于系统软件,尤其是涉及内存管理,硬件控制方面问题时汇编语言则比较合适。

二、变量虽然把数据存放在寄存器中使用起来快速、方便,但寄存器的数目很少,能存放的数据量有限,因此大量数据通常是放在内存中的,对于外存中的数据也是需要调到内存中才可以处理的。

问题:数据放在内存的什么位置?数据占据了多少字节?数据超过1个字节时怎么存放?如何把数据放进去以及如何取出来?解决方法:高级语言:引入变量的概念。

变量的实质就是存放数据的存储区域,根据变量中能够存放的数据的类型和数量,可以确定变量占据存储空间的大小,这就是变量说明。

有些高级语言还允许变量说明的同时在其中放一个初始数据,称为变量的初值。

变量说明后,可以对变量赋值,也可以从变量中取出数据使用。

不论是赋值还是取值,编程时都以变量的名字作为使用变量的方式,并不关心变量究竟在内存的哪个地方。

机器于言:没有变量,只有内存的地址,读数写数,都需要在指令中明确指出逻辑地址。

如果用机器语言编写程序,编程者直接面对内存地址,并且需要自己安排数据存储的所有细节。

汇编语言:中介,引入了变量,可以象高级语言一样使用,另一方面又有很明确的变量与内存地址间的对应关系,汇编程序在翻译时为定义的各个变量分配地址,在变量名字与内存地址之间架起了一座连结的桥梁。

因此,在汇编语言中对变量的操作既可以通过变量的名字,也可以直接用变量的地址。

1、变量定义(1)变量名一种用来区分不同的存储区域的标识符号,是一种标识符。

是一个或多个符号构成的符号串。

命名规则:1)可用符号包括字母、数字和特殊符号“?”、“@”、“$”、“%”、“_”。

2)不允许用数字作为第一个符号。

3)名字的长度没有严格限制,但一般不超过10个符号。

4)最少由一个符号构成,可以是字母、“_”或“@”。

5)汇编语言不区分字母的大小写。

总之,记住基本规定就可以了:以字母开头的字母数字串(2)变量定义的方法变量实质:存放数据的内存区域,变量定义就是告诉汇编程序,在翻译时从某个地址起预留一定数量的空间,并在其中填上初值,还要建立变量与地址间的对应关系。

所以变量定义是伪指令而不是指令。

格式:变量名类型初值表变量名:类型:只能是DB,DW,DD,DT,用于说明初值表中的每个数据占几个字节,对应关系如下:DB:字节型,每个数据占1个字节DW:字型,每个数据占2个字节DD,DT很少用,不讲。

初值表:用逗号分隔的若干个数据项,每个数据项的值是变量的一个初值项,占据“类型”规定的字节数,说明变量的初值是多少,也指明了变量占多少字节的存储空间。

注意:如果初值表需要填写若干个相同的值,可以用下面的形式表示把一个值重复若干次。

重复次数 DUP(数据项)初值表中可以用问号“?”作为初值,汇编程序翻译时以值0填充。

任何段中都可以写变量定义,也允许指令和变量定义写在一个段中,通常是把程序所用到的所有变量集中在数据段中,而把指令写在代码段。

例题:说明data段中定义的各变量的类型及初值情况,以及每个变量占据的内存字节数。

Data SEGMENTD1 DB 1D2 DW 1234HD3 DD 12345678HD4 DB ‘1’,’2’,’3’ (31H,32H,33H)D5 DB ‘123’ (31H,32H,33H)写法不用而已D6 DB 30 DUP(0)D7 DB 1,3 DUP(2),’3’,-3,1001BD8 DB 1,2,3,4,5,6 (初指表中数据项很多一行写不完而转行的写法)DB 7,8,9,10D9 DW ‘12’,’AB’(32H,31H,42H,41H)D10 DW 3-5 (补码形式,高地址是FFH,低地址是OFEH)Data ENDS2、变量内存分配变量内存分配是指把定义的各个变量安排在段内的什么位置,占多少字节,以及其中的值是多少。

(1)内存图内存图表示的内容有两个方面,一是存储器,通常由若干叠放在一起的小方框表示,一个小方框代表一个字节。

一般段地址部分省略,只标各字节的偏移地址。

小方框内填的数值表示该字节中的内容。

另一方面,内存图还要表示变量名与偏移地址的对应关系,把变量的名字写在对应的方框的边上。

(2)变量定义与内存分配的关系掌握目的:有助于对各种内存型寻值方式的理解和灵活运用。

汇编程序在为变量安排内存时遵照下面的规则:(1)同一段内的变量具有相同的段地址。

(2)按照段中变量定义的次序,依次对各变量分配偏移地址。

(3)除非有其他伪指令说明,段内的第一个变量被分在偏移地址为0处。

(4)一个变量占据的字节数由其类型和初值表中的项数决定。

(5)除非有其他伪指令说明,一个变量分配完后,紧接着分配下一个变量。

三、伪指令1.数据定义伪指令数据定义伪指令主要是完成存储单元分配,数值变量赋值及预置存储空间等工作。

(1)变量定义伪指令格式:[变量名]<定义符><操作数项表>功能:定义变量名并为变量分配存储单元,同时将初值赋给相应存储单元。