《电子元件综合基础.doc》由会员分享,可在线阅读,更多相关《电子元件综合基础.doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流电子元件综合基础.精品文档.微机原理 课 6 讲 教 案 主讲人 许文丹汇编语言基础一、 计算机语言计算机语言:能够把人的命令告诉计算机的一套符号系统及其使用规则称为“计算机语言”。到目前为止,计算机语言已经由低级到高级经历了:机器语言、汇编语言、高级语言、第四代语言(第四代语言比第三代语言更接近自然语言。用于访问数据库的语言经常被认为是第四代语言,如Power Builder)的发展过程。其中汇编语言是一种能够充分利用计算机硬件特性的低级语言,它与计算机的结构有非常紧密的联系。不同的计算机有各自的汇编语言。1、机器语言计算机的所有操作都是在
2、指令的控制下进行的。能够直接控制计算机完成指定动作的是机器指令。一条机器指令是一个由0和1组成的二进制代码序列。不同的机器指令对应的二进制代码序列也各不相同。一条机器指令通常由操作码和操作数两部分构成,操作码在前,操作数在后。下面的二进制代码序列就是一条8088的机器指令:10000000,00000110,01100100,00000000,00010010二进制序列中的逗号是为了方便阅读而加上的,并不是机器指令的一部分。前16位是操作码部分,含义是要求计算机做两个数的加法操作;后24位是操作数部分,分别指出第一个加数在内部存储器的编号为100的那个字节中,另一个加数在指令中,是18。对于同
3、样的二进制序列,不同型号的CPU对它的理解是不一样的。所以机器代码与机器本身有着紧密的联系。每一种计算机(准确的说是每一种CPU)都有自己的一套指令,一种机型的所有机器指令的集合就是它的指令系统。指令系统及其使用规则构成这种计算机的机器语言。选择指令系统中的指令排列起来,可以构成一个指令序列,用以告诉计算机完成一连串的动作,这就是一个机器语言程序。2、自然语言与汇编语言的对比机器语言是计算机的“母语”,但是绝大多数人难学。现实生活中,人们使用汉语、英语、法语等各种不同的自然语言,任何一种自然语言对于当代计算机来说都是无法领会的。解决办法:“找”一种双方都能够也容易学会的语言作为中间媒介。汇编语
4、言、高级语言、第四代语言都扮演着这个中介角色。 若一个人要学新语言,他该学些什么呢?中国人学英语的过程:字母单词简单句子若干连贯的句子描述一件简单的事情熟练写英语文章(都会穿插相应的语法知识) 自然语言与汇编语言的对照语言自然语言(英语)汇编语言对比项目基本符号字母表字母,专用符号词单词保留字,标识符句句子完整的指令,伪指令段段落子程序章文章程序语法拼写,句法,文法指令,子程序,程序格式及使用规则技巧句子正确,文理通顺指令正确,程序精简,易读性好,结构化好汇编语言人可以发挥自己的聪明才智学会,计算机如何学?这是利用汇编语言到机器语言的固定翻译机制实现的。计算机专家们已编制了一些翻译程序供汇编语
5、言的编程人员使用,这种翻译程序称为“汇编程序”。3、汇编程序和连接程序汇编程序是一种计算机软件(系统软件),它能够把人们编写的汇编语言程序(称为源程序,一般以.ASM作为文件扩展名)翻译成机器语言,这种翻译操作称为“汇编”。不同的计算机有不同的机器语言,因而也需要有不同的翻译器汇编程序,MASM.EXE是一种专门用于把8086/8088的汇编语言源程序翻译成相应的机器语言程序的翻译器。汇编程序还具有语法检查的功能,交给汇编程序进行处理的源程序在翻译之前都必须经过语法检查这一关。若发现源程序中有违背汇编语言语法的地方,将不进行翻译工作,而是指出错误的位置以及类型。 汇编程序翻译的结果已具备机器语
6、言的形式,称为“目标程序”,一般以.OBJ作为文件扩展名。但是,目标程序还不能直接交给计算机去执行,它还需要通过连接程序(LINK.EXE)的装配才具备可执行的形式,装配结果称为“执行文件”,一般以.EXE作为文件扩展名。4、汇编语言的构成汇编语言是较早发明的一种介于自然语言与机器语言之间的程序设计语言。为了使汇编语言到机器语言的翻译比较简单,汇编语言用大量的语法规则对从指令到程序的书写加以限制。与后来的高级语言、第四代语言相比,汇编语言更接近于机器语言,用汇编语言编写的源程序还保留了很多机器语言的影子。比如:机器指令中的操作码部分在汇编语言中用与该指令的功能相关的一个符号表示,例如加法指令就
7、用ADD表示,数据传送用MOV表示,这类符号称为“助记符”。对于一个放在内存中的操作数,如果要求编程人员记住每一个操作数在内存中的存放位置是一个巨大的负担。在汇编语言中,减轻这种负担的方式是用变量存放操作数,程序员只要记住变量的名字即可。跳转是程序设计中不可避免的一个问题。在机器语言中,跳转的目的地是用指令所在的位置(即在内存的哪一个字节)来表示的,而汇编语言中的跳转则是在目的地做一个称为“标号”的标记。除了与机器语言有直接对应关系的助记符,变量,标号外,为了能让汇编程序正确的完成翻译工作,必须要告诉汇编程序变量需要占据多少字节的内存,程序到何处结束,整个程序的第一条指令在什么地方等问题。因此
8、,源程序中应该有一些告诉汇编程序如何进行翻译操作的“说明”,这类说明在翻译结果中并没有对应的机器代码,所以称为“伪指令”。指令助记符,数据和存放数据的变量,标号,伪指令以及相应的使用规则构成了汇编语言的全部内容。5、汇编语言的特点与机器语言相比,汇编语言易于理解和记忆,编写的源程序可读性较强。汇编语言中还提供了一些分工协作并相互通讯的方法,可以实现初步的结构化编程。源程序翻译成机器语言后的执行文件在存储空间,执行速度方面与机器语言编写的程序大致相当。高级语言和第四代语言在科学计算,事务处理等方面比汇编语言有巨大的优势,但用高级语言编写的程序,在翻译成机器语言后,程序代码冗长,占用存储空间大,执
9、行速度慢。如果用高级语言来编写接口控制,设备通讯等方面的程序则不太合适,相反这样的情况下汇编语言更容易发挥其长处:目标程序或执行文件简短,执行速度快,效率高,特别是汇编语言能直接控制计算机的内存和外设,这些特点是高级语言和第四代语言望尘莫及的。高级语言和第四代语言适合于编写应用软件,对于系统软件,尤其是涉及内存管理,硬件控制方面问题时汇编语言则比较合适。二、 变量虽然把数据存放在寄存器中使用起来快速、方便,但寄存器的数目很少,能存放的数据量有限,因此大量数据通常是放在内存中的,对于外存中的数据也是需要调到内存中才可以处理的。问题:数据放在内存的什么位置?数据占据了多少字节?数据超过1个字节时怎
10、么存放?如何把数据放进去以及如何取出来?解决方法:高级语言:引入变量的概念。变量的实质就是存放数据的存储区域,根据变量中能够存放的数据的类型和数量,可以确定变量占据存储空间的大小,这就是变量说明。有些高级语言还允许变量说明的同时在其中放一个初始数据,称为变量的初值。变量说明后,可以对变量赋值,也可以从变量中取出数据使用。不论是赋值还是取值,编程时都以变量的名字作为使用变量的方式,并不关心变量究竟在内存的哪个地方。机器于言:没有变量,只有内存的地址,读数写数,都需要在指令中明确指出逻辑地址。如果用机器语言编写程序,编程者直接面对内存地址,并且需要自己安排数据存储的所有细节。汇编语言:中介,引入了
11、变量,可以象高级语言一样使用,另一方面又有很明确的变量与内存地址间的对应关系,汇编程序在翻译时为定义的各个变量分配地址,在变量名字与内存地址之间架起了一座连结的桥梁。因此,在汇编语言中对变量的操作既可以通过变量的名字,也可以直接用变量的地址。1、 变量定义(1)变量名一种用来区分不同的存储区域的标识符号,是一种标识符。是一个或多个符号构成的符号串。命名规则:1) 可用符号包括字母、数字和特殊符号“?”、“”、“$”、“%”、“_”。2) 不允许用数字作为第一个符号。3) 名字的长度没有严格限制,但一般不超过10个符号。4) 最少由一个符号构成,可以是字母、“_”或“”。5) 汇编语言不区分字母
12、的大小写。总之,记住基本规定就可以了:以字母开头的字母数字串(2)变量定义的方法变量实质:存放数据的内存区域,变量定义就是告诉汇编程序,在翻译时从某个地址起预留一定数量的空间,并在其中填上初值,还要建立变量与地址间的对应关系。所以变量定义是伪指令而不是指令。格式:变量名 类型 初值表变量名:类型:只能是DB,DW,DD,DT,用于说明初值表中的每个数据占几个字节,对应关系如下:DB:字节型,每个数据占1个字节DW:字型,每个数据占2个字节DD,DT很少用,不讲。初值表:用逗号分隔的若干个数据项,每个数据项的值是变量的一个初值项,占据“类型”规定的字节数,说明变量的初值是多少,也指明了变量占多少
13、字节的存储空间。注意:如果初值表需要填写若干个相同的值,可以用下面的形式表示把一个值重复若干次。重复次数 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 3
14、0 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)内存图内存图表示的内容有两个方面,一是存储器,通常由若干叠放在一起的小方框表示,一个小方框代表一个字节。一般段地址部分省略,只标各字节的偏移地址。小方框内填的数值表示该字节
15、中的内容。另一方面,内存图还要表示变量名与偏移地址的对应关系,把变量的名字写在对应的方框的边上。(2)变量定义与内存分配的关系掌握目的:有助于对各种内存型寻值方式的理解和灵活运用。汇编程序在为变量安排内存时遵照下面的规则:(1) 同一段内的变量具有相同的段地址。(2) 按照段中变量定义的次序,依次对各变量分配偏移地址。(3) 除非有其他伪指令说明,段内的第一个变量被分在偏移地址为0处。(4) 一个变量占据的字节数由其类型和初值表中的项数决定。(5) 除非有其他伪指令说明,一个变量分配完后,紧接着分配下一个变量。三、 伪指令1.数据定义伪指令数据定义伪指令主要是完成存储单元分配,数值变量赋值及预
16、置存储空间等工作。(1)变量定义伪指令格式:变量名功能:定义变量名并为变量分配存储单元,同时将初值赋给相应存储单元。说明:变量具有三个属性。段属性(SEG)变量存放在哪一个逻辑段(DS段或ES段)中。若在DS段中,则段基值需装入DS中。偏移量属性(OFFSET)变量在逻辑段中离段起始点的字节数。类型属性(TYPE)变量所占存储单元的字节数。定义符是必选项,用于说明操作数项的类型属性。定义符有: DB定义字节,类型为1。 DW定义字,类型为2。 DD定义双字,类型为4。 DQ定义四字,类型为8。 DT定义十字节,类型为10。操作数项右以是常数,表达式,字符串,变量和?,?用于预留存储空间?(暂不
17、存入数据)。操作数项为字符串时,必须用单引号括起,且字符以ASC码形式存放在存储单元中。例如 : V1 DB 20H V2 DW 5*100 V3 DD 12345678H V4 DQ (140+60)/20 V5 DW CD,AB,?,? ADR1 DD V1假设V1变量偏移地址为0100H,段基址为8000H,变量的初值和在内存中的分配如图4-13所示。 V1 20H V5 44H D V2 F4H 43H C 01H 2个字节 42H B V3 78H41H A 56H 34H4个字节 12H ADR100H V1的 V4 0AH01H 偏移地址0000H V2的0000H 偏移地址 0
18、0 00 8个字节 000000图4-13 变量定义存储器分配示意图 (2) 重复定义伪指令 DUP(Duplicate)用于重复以定义的一组操作数。格式: DUP (操作数项表)功能:对操作数项表内容进行n次重新分配,定义及预置存储单元。 例如:X1 DW 4DUP(10H,20H),A X2 DB 2DUP(?,2DUP(D,ODH)存储分配如图4-14所示。X1 10H X2 20H 44H D 10H 0DH 20H 44H D 10H 0DH 20H 10H 44H 20H 0DH 41H A 44H 0DH 图4-14 重复定义存储分配示意图2符号定义指令使用符号定义伪指令是将某些
19、常数,表达式等用一特定符号来表示,从而大大简化程序,这类指令特点不占用内存单元。(1) 等值语句 格式:名字 EQU表达式 功能:为表达式取一个名字,既把表达式的值或符号赋给EQU左边的名字,供以后引用。 说明:EQU语句的名字不能重复定义。表达式可以时常数,变量,标号,指令助记符,字符串等。 例如: CONST EQU 50 ;定义常数符号 VAR EQU WORD PTR X ;定义变量属性 LAB EQU STRAT ;定义符号 M EQU MOV ;定义指令助计符 C EQU CONST+300 ;定义常数表达式 ADI EQU SI+4 ;定义地址表达式 M AX,VAR ;引用 A
20、DD AX,CONST SUB AX,ADI等价于: MOV AX,WORD PTR X ADD AX,50 SUB AX,SI+4(2) 等号语句 格式: 名字=表达式功能: 与EQU相同。说明:等号语句可以重复定义,表达式只能是数值表达式。例如: CONST=20 NUM=10H CONST=CONST+50(3) 标号定义伪指令 格式:名称LABEL类型 功能:给名称定义类型,既同一地址指针赋予两种类型属性。 例如: DARRAY LABEL WORD BARRAY DB 20 DUP (11H,22H) SUB1 LABEL FAR SUB2 PROC NEAR MOV BX,0 MO
21、V AX,DARRAY+10H ADD AL,BARRAY+20HRET SRB2 ENDPCALL SUB1 ;远调用CALL SUB2 ;近调用注意:DARRAY 和它下面的BARRAY地址实际上是相同的,但属性不同的,DARRAY为字,BARRAY 为字节。SUB1和SUB2都指向同一条指令MOV BX,0,但类型不同,SUB1为FAR ,SUB2 为NEAR。 3、 操作数及运算符指令语句执行操做的对象是操作数,伪指令语句在汇编时服务的对象也是操作数,操作数可以是常数,变量,表达式等。(1)操作数常量操作数常量在汇编时已有确定的值,在程序运行中,它不会发生变化。有二种类型常量:数值常量
22、:取值类型为二进制(B),八进制(0),十六进制(H),十进制(D)的实型数或整形数。字符串长量:有单引号括起的一个或多个字符。这些字符以ASCII码形式存储在内存中 。适用范围l 适用于立即操作数如:ADD AX,1234H MOV DI,3200Hl 存储器操作数的偏移量或初值如:MOV AX,SI+20H MOV BUF,0050Hl 伪指令中对变量的定义 如: V1 DB 11H V2 DW 2233H V3 DD 445566H V4 DB STRING变量操作数变量是对存储单元的一个数据或数据区的符号表示,这些数据可被程序随时改变。用变量名对变量进行访问,变量名就是变量的符号地址。
23、其他有关说明与前面变量定义伪指令相同。表达式操作数表达式是由常数,操作数,操作符和运算符组合而成,表达式操作数是以表达式 形式出现的操作数,汇编程序对表达式进行计算,将其值作为指令操作数。它所构成的操作数昌丰富多彩的,如:MOV AX,VAR+10(2)、操作数运算符表达式常以多种运算符来连接操作数,其值是在程序汇编过程中进行计算的,在汇编语言中操作数运算符可分为:算术运算符,逻辑运算符,关系运算符,数值返回运算符,属性修改运算符。算术运算符表4-5列出算术运算符。说明:表中前二项+,-为单项运算符。表4-5算术运算符运算符 格 式功 能+表达式值取正-表达式值取负*两式相乘/两式相除MODM
24、OD两式整除取余+两式相加-两式相减SHRSHR将表达式的值右移N位SHLSHL将表达式的值左移N位表达式2下标操作符+,-,*,/运算中,参加运算的操作数和运算的结果均为整数。减法可用于两个操作数地址运算,其结果是一个常数,表示这两个变量之间的相距字节数。 NUM=30*2 ;NUM=60 NUM=NUM/8 ;NUM=7NUM=NUM+10 ;NUM=11NUM=-NUM+6 ;NUM=-5 ORG 0050H VALUE1 DB 12H,34H,NUMBER VALRE2 DW 5678H,FE ADDR1 EQU VALUE2-VALUE1 ADDR2 DW VALUE2-2逻辑运算符
25、表4-6列出逻辑运算符。表4-6逻辑运算符运算符格 式 功 能NOTNOT表达式值按位取“反”AND AND 两表达式值按位“与”OR OR 两表达式值按位“或”XOR XOR 两表达式值按位“异或”说明:逻辑运算符用于对两个整型常量按位作逻辑运算。一般出现在汇编语句的源操作规数位置上,或EQU语句中。逻辑运算符和逻辑运算指令有本质上的不同。前者操作数对象是一具体的整型常数,在汇编时完成逻辑运算,它仅作为指令的某一个操作数或构成操作数的一部分;而后者是对一个寄存器或存储单元内容,在程序运行时执行逻辑运算。例如: MOV DX,0AABBH MOV AX,NOT OFEH ;AX0FF01H M
26、OV AL,77H AND 0F0H ;AL70H MOV BL,77H OR OF0H ;BH0F70H MOV CL,77H XOR 0F0H ;CL87H MOV DL,22H AND 20H ;DL20H XOR DH,44H XOR 80H ;DH0C4H关系运算符 关系运算符表4-7。表4-7关系运算符运算符格 式功 能EQ EQ 两个表达式值相等为真,否则为假。NE NE 两个表达式值不相等为真,否则为假。LT LT 表达式1表达式2为真,否则为假。LE LE 表达式1表达式2为真,否则为假。GT GT 表达式1表达式2为真,否则为假。GE GE 表达式1表达式2为真,否则为假。
27、说明:关系运算符的对象一定是常量或同一段变量。若为常量,按无符号数比较;比较结果为真返回全1,为假返回0。例如: MOV AX,OEH EQ 1110B ;AXOFFFFH MOV BX,12H NE 34H ;BXOFFFFHMOV DX,56H GT 55H ;DX0000HVAR DW N LT 2000H ;N2000H,VAR为0FFFFH,否则为0。数值返回运算符数值返回运算符对变量或标号进行分析,回送其地址属性值(符号地址对应的段基址,偏移量)或变量特征值(如数据类型值,变量长度,变量元素个数等)。见表4-8。表4-8数值返回运算符运算符格 式功 能SEGSEG 返回变量或标号的
28、段基址。OFFSETOFFSET 返回变量或标号的偏移地址。LENGTHLENGTH 返回变量元素个数。SIZESIZE 返回变量所占字节数。TYPETYPE返回变量或标号的类型值 说明:对于使用DUP重复定义的变量,LENGTH运算符返回最外层DUP的给定值。 例如: K1 DB 20H DUP (2,4 DUP(1,3 DUP(0)MOV AL,LENGTH K1 ;AL20HSIZE返回数组变量所占的总字节数,等于LENGTH和TYPE两个运算符返回值的乘积。例如:段基址为 (DS)=6800H ORG 2800HARRAY DW 50 DUP(0AH) MOV AX,SEG ARRAY
29、 ;AX6800H MOV DS,AX MOV CX,LENGTH ARRAY ;CX50 MOV SI,SIZE ARRAY ;SI100 MOV DI,OFFSET ARRAY ;DI2800H属性修改运算符用于设定或说明变量或标号的属性,以及对运算对象的操作数的类型属性的设定,使之运算过程具有相同属性。见表4-9表4-9属性修改运算符运算符格 式 功 能PTRPTR对变量或标号设置类型。THISTHIS将类型属性赋给当前的存储单元。SHORJMP SHOR 指定转移跳转距离属性为短跳,范围为+127-128字节。HIGHHIGH 对表达式所对应的数值常量或存储单元偏移量进行LOWLOW字
30、节分离,其中,HIGH返回表达式值的高8位,LWO返回表达式值的低8位。说明:PTR运算符对变量设定的类型属性有:BYTE,WORD,DWORD,FWORD和QWORD。对标号设定的类型属性为:NEAR或FAR,它用在指令语句中。例如: VAR1 DB 4 DUP(4,2)VAR2 DW 1068H,2000H,3000HMOV DX,WORD PTR VAR1 ;DX0204HADD DH,BYTE PRT VAR2 ;DHDH+68HMOV BYTE PTRBX,2 ;BX02HJMP FAR PTR SUB1 ;段间转移用了PTR运算符,VAR1变量由原来的字节 属性“临时”改变为字(W
31、ORD)属性,仅在当前指令语句中有效,而存储分配并不改变。THIS运算符一般与EQU伪指令连用,放置在数据段,表明了一个变量或标号具有二种属性(用不同的变量名表示),在代码段直接引入相应变量名即可,类型说明与PTR类型说明相同 。例如:N1 EQU THIS BYTE N2 DW 2426H,3537H MOV AX,N2 ;AX2426H MOV BH,N1 ;BH26HHIGH/LOW运算符用于将操作数高字节/低字节分离。例如: CONT EQU 5657HORG 60HN1 DB 44H,66H,88HN2 DW 4000H,6000H MOV AH,HIGH 6844H ;AH68H MOV AL,LOW CONT ;AL78HMOV BL,LOW (OFFSET N1) ;BL60HMOV BH,HIGH (OFFSET N2) ;BH00H