[计算机软件及应用]第5章++++汇编语言程序设计ppt课件_第1页
[计算机软件及应用]第5章++++汇编语言程序设计ppt课件_第2页
[计算机软件及应用]第5章++++汇编语言程序设计ppt课件_第3页
[计算机软件及应用]第5章++++汇编语言程序设计ppt课件_第4页
[计算机软件及应用]第5章++++汇编语言程序设计ppt课件_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章 汇编语言程序设计教学目的和要求教学目的和要求: : 本章介绍了程序的根本构造和本章介绍了程序的根本构造和设计方法,通过本章的学习,重点掌握各设计方法,通过本章的学习,重点掌握各类程序构造顺序构造、分支构造、循环类程序构造顺序构造、分支构造、循环构造及子程序构造的特征,以及应用场构造及子程序构造的特征,以及应用场合。合。汇编语言:汇编语言:用指令的助记符、符号地址、标用指令的助记符、符号地址、标 号、伪指令等符号书写号、伪指令等符号书写的语言。的语言。汇编语言源程序:汇编语言源程序: 用汇编语言编写的程序。用汇编语言编写的程序。 汇编:汇编: 把汇编语言源程序自动翻译成把汇编语言源程序自

2、动翻译成机器机器 语言语言目的程序目的程序的过的过程。程。汇编程序:汇编程序:完成汇编任务程序。完成汇编任务程序。汇编语言源程汇编语言源程序序汇编汇编目的程序目的程序汇编程汇编程序序5.1 汇编语言的语句格式 汇编语言编写的源程序是由许多语句组成的。每条语汇编语言编写的源程序是由许多语句组成的。每条语句由句由1 14 4个部分组成,格式如下:个部分组成,格式如下: 名字名字 助记符助记符 操作数操作数 注注释释 根据不同指令功能,其中用方括号括起来的部分,可以根据不同指令功能,其中用方括号括起来的部分,可以有,也可以没有。编写语句时每部分之间要用空格分开,这有,也可以没有。编写语句时每部分之间

3、要用空格分开,这些部分可以在一行输入,以便用户阅读源程序。些部分可以在一行输入,以便用户阅读源程序。 LOOPERLOOPER: MOV ALMOV AL,DATA2SI DATA2SI ; 取一个字节加数取一个字节加数 DATA1 DB 0F8HDATA1 DB 0F8H,60H60H,0ACH0ACH,74H74H,3BH 3BH ;被加;被加数数 0F8H60H0ACH DATA11 1名字名字 这是给指令或某一存储单元地址所起的名称,常作这是给指令或某一存储单元地址所起的名称,常作为一段程序的开头,一个数据块的开头。为一段程序的开头,一个数据块的开头。 在指令语句中这个名字是一个标号,

4、在指令语句中这个名字是一个标号,语句中的标号本语句中的标号本质上是指令的符号地址。质上是指令的符号地址。并非每条指令语句必须有标号,但并非每条指令语句必须有标号,但假如一条指令前面有一标号,那么程序中其他地方就可以引假如一条指令前面有一标号,那么程序中其他地方就可以引用这个标号。用这个标号。标号使用要注意:标号使用要注意:标号可以由字母、数字和下划线组合,一个标号的最大长度不标号可以由字母、数字和下划线组合,一个标号的最大长度不能超过能超过3131个字符。个字符。标号不能以数字开头,但数字可以出如今标号符的中间或末尾。标号不能以数字开头,但数字可以出如今标号符的中间或末尾。标号有三种属性:段、

5、偏移量和类型。标号有三种属性:段、偏移量和类型。 标号的段属性是定义标号在程序段的段地址。当程标号的段属性是定义标号在程序段的段地址。当程序中引用一个标号时,该标号的段值应在序中引用一个标号时,该标号的段值应在CSCS存放器中。存放器中。 标号的偏移量属性表示标号所在段的起始地址到定标号的偏移量属性表示标号所在段的起始地址到定义该标号的地址之间的字节数。偏移量是一个义该标号的地址之间的字节数。偏移量是一个1616位无符号数。位无符号数。 标号的类型属性有两种:标号的类型属性有两种:NEARNEAR和和FARFAR。前一种标号。前一种标号可以在段内被引用,地址指针为可以在段内被引用,地址指针为2

6、 2字节;后一种标号可以在其字节;后一种标号可以在其他段被引用,地址指针为他段被引用,地址指针为4 4字节。假如定义一个标号时后跟冒字节。假如定义一个标号时后跟冒号,那么汇编程序确认其类型为号,那么汇编程序确认其类型为NEARNEAR。 伪指令语句中的名字可以是变量名、段名、过伪指令语句中的名字可以是变量名、段名、过程名。与指令语句中的标号不同,不同的伪指令对于是否程名。与指令语句中的标号不同,不同的伪指令对于是否有名字有不同的规定。伪指令语句的名字后面通常不跟冒有名字有不同的规定。伪指令语句的名字后面通常不跟冒号,这是它和标号的一个明显区别。号,这是它和标号的一个明显区别。 很多情况下伪指令

7、语句中的名字是变量名。变很多情况下伪指令语句中的名字是变量名。变量名代表存储器中一个数据区的名字。例如,例量名代表存储器中一个数据区的名字。例如,例5.15.1中的中的DATA1DATA1、DATA2DATA2就是变量名。就是变量名。 变量也有三种属性:段、偏移量和类型。变量也有三种属性:段、偏移量和类型。 变量的段属性是变量所代表的数据区所在段的段地址。变量的段属性是变量所代表的数据区所在段的段地址。由于数据区一般在存储器的数据段中,因此变量的段地址常常由于数据区一般在存储器的数据段中,因此变量的段地址常常在在DS和和ES存放器中。存放器中。 变量的偏移量属性是该变量所在段的起始地址与变量的

8、变量的偏移量属性是该变量所在段的起始地址与变量的地址之间的字节数。地址之间的字节数。 变量的类型属性有变量的类型属性有BYTE字节字节、WORD字字、 DWORD 双字双字、 QWORD 四字四字、TBYTE十字十字等,等,表示数据区中存取操作对象的大小。表示数据区中存取操作对象的大小。 2 2助记符助记符助记符是表示不同操作的指令,可以是指令的助记符,也可助记符是表示不同操作的指令,可以是指令的助记符,也可以是伪指令。以是伪指令。3 3操作数操作数操作数是指令执行的对象。操作数是指令执行的对象。4 4注释注释 在汇编语言源程序中,为了便于理解和阅读程序,常常加上在汇编语言源程序中,为了便于理

9、解和阅读程序,常常加上注释。注释要用分号打头,在汇编过程中,对注释不做处理。注释。注释要用分号打头,在汇编过程中,对注释不做处理。 标号标号 助记符助记符 操作数操作数 注释注释 MOV ALMOV AL,BLBL RET ; RET ; 子程序返回指令子程序返回指令 START: MOV AX, DATA START: MOV AX, DATA ;以以STARTSTART标号为程序开头标号为程序开头 ABC EQU 2000H ABC EQU 2000H ; 将将2000H2000H赋值赋值给给ABCABC5.2 常数汇编语言程序中经常使用的常数有以下几种:汇编语言程序中经常使用的常数有以下

10、几种:二进制数:以字母二进制数:以字母B B结尾的,由结尾的,由0 0和和1 1组成的数字序列。如:组成的数字序列。如:10101011B10101011B。八进制数:以字母八进制数:以字母Q Q或或O O结尾的结尾的0 0 7 7的数字序列。如:的数字序列。如:23Q23Q,24O24O。十进制数:十进制数:0 09 9的数字序列,可以用字母的数字序列,可以用字母D D结尾,也可以省结尾,也可以省略。如:略。如:183D183D。十六进制数:十六进制数: 以以H H字母结尾的,字母结尾的, 由数字由数字0 0 9 9和字母和字母A A F F组成的序列组成的序列 3ACFH3ACFH,0AF

11、H0AFH。 但凡以字母但凡以字母A AF F为起始的一个十六进制数,必须在为起始的一个十六进制数,必须在其前面加数字其前面加数字“0 0,否那么汇编程序会认为是标识符。,否那么汇编程序会认为是标识符。 实数:它由整数、小数和指数实数:它由整数、小数和指数3 3部分组成。如:部分组成。如:5 5421E-4421E-4 字符串常数:用单引号括起来的一个或多个字符,这些字符字符串常数:用单引号括起来的一个或多个字符,这些字符以以ASCIIASCII码形式存储在内存中。如:码形式存储在内存中。如:ABCABC,在内存中就是,在内存中就是41H41H、42H42H、43H43H。 5.3 5.3 伪

12、指令伪指令 伪指令用来为汇编程序提供某些信息,让汇编程序在伪指令用来为汇编程序提供某些信息,让汇编程序在汇编过程中执行某些特定的功能。如伪指令可以指定一个程序的汇编过程中执行某些特定的功能。如伪指令可以指定一个程序的数据段从哪里开场,可以指定堆栈区的大小,等等。数据段从哪里开场,可以指定堆栈区的大小,等等。 伪指令与指令的本质差异是,在汇编过程中伪指令并伪指令与指令的本质差异是,在汇编过程中伪指令并不形成任何代码,不直接命令不形成任何代码,不直接命令CPUCPU去执行什么操作,伪指令是给去执行什么操作,伪指令是给汇编程序的命令,在汇编过程中由汇编程序进展处理,如分配存汇编程序的命令,在汇编过程

13、中由汇编程序进展处理,如分配存储区、定义段等。储区、定义段等。 常用的伪指令有以下几种常用的伪指令有以下几种: :1. 1. 标号赋值伪指令标号赋值伪指令EQUEQU EQU EQU伪指令用来对一个标号赋值。例如:伪指令用来对一个标号赋值。例如: ABC EQU 2400H ;ABC EQU 2400H ;使使ABCABC为数值为数值2400H2400H STR EQU 64 STR EQU 64* *10241024 2 2定义存储单元的伪指令定义存储单元的伪指令DBDB、DWDW、DDDD、DQDQ、DTDT 伪指令伪指令DBDB和和DWDW等用来给出程序中所需要的数据、字符等用来给出程序

14、中所需要的数据、字符串、地址表。该类伪指令用来为一个数据项分配存储单元,串、地址表。该类伪指令用来为一个数据项分配存储单元,用一个符号名与这个存储单元相联络,且为这个数据提供一用一个符号名与这个存储单元相联络,且为这个数据提供一个任选的初始值。个任选的初始值。 DBDB用来规定字节,用来规定字节,DWDW用来规定字,用来规定字,DDDD用来规定双字,用来规定双字,DQDQ用来用来规定规定4 4个字,个字,DTDT用来规定用来规定1010个字。例如:个字。例如: DATA DB 24HDATA DB 24H,32H32H表示从表示从DATADATA地址单元开场,连续存入地址单元开场,连续存入24

15、H24H,32H32H,共占用,共占用2 2个字节个字节的地址。的地址。 DATA DW 4142HDATA DW 4142H 汇编时会把汇编时会把41H41H与与42H42H分别放到与分别放到与DATADATA相联络的两个连续相联络的两个连续的字节单元中的字节单元中一个字一个字。42H42H放在地址低字节,放在地址低字节,4141放在地址放在地址高字节。高字节。 DATA DB ?DATA DB ?,? ?汇编程序分配两个字节单元,以汇编程序分配两个字节单元,以DATADATA地址单元开场的两个单元可地址单元开场的两个单元可预置任何内容。预置任何内容。 STRING DB ABCD STRI

16、NG DB ABCD 以以STRINGSTRING为起始地址单元,为字符串中的每一个字符分配一个字为起始地址单元,为字符串中的每一个字符分配一个字节单元,字符串自左至右以字符的节单元,字符串自左至右以字符的ASCASC码按地址递增的排列码按地址递增的排列顺序依次存放顺序依次存放41H41H,42H42H,43H43H,44H44H。 BUFFER DB 20H DUPBUFFER DB 20H DUP? ? DUP DUP为重复操作符为重复操作符表示保存表示保存20H20H个字节,每个字节可预置任意内容。个字节,每个字节可预置任意内容。 BUFFER DB 50 DUPBUFFER DB 50

17、 DUP0 0表示以表示以BUFFERBUFFER为首地址的为首地址的5050个字节中都存放同一数据个字节中都存放同一数据00H00H。3 3定义存储单元类型的伪指令定义存储单元类型的伪指令BYTEBYTE、WORDWORD、DWORDDWORD 利用这些伪指令,可以对存储单元的类型进展规定。例利用这些伪指令,可以对存储单元的类型进展规定。例如:如: MOV BYTE PTRDI MOV BYTE PTRDI ,00H00H MOV WORD PTR1000H MOV WORD PTR1000H,00H00H JMP DWORD PTR2000H JMP DWORD PTR2000H 第一个语

18、句使第一个语句使DIDI所指的所指的1 1个单元清个单元清0 0;第二个语句使第二个语句使1000H1000H所指的所指的1 1个字即个字即2 2个单元清个单元清0 0:第三个语句使程序转移到另外一个段的某个单元,转移地址第三个语句使程序转移到另外一个段的某个单元,转移地址放在放在2000H2000H开场的开场的4 4个单元,前两个单元中的内容作为转移个单元,前两个单元中的内容作为转移地址的偏移量,后面两个单元中的内容作为转移地址的段地址的偏移量,后面两个单元中的内容作为转移地址的段值。值。4 4段定义伪指令段定义伪指令SEGMENTSEGMENT、 ENDSENDS、ASSUMEASSUME

19、、ORGORG 伪指令伪指令SEGMENTSEGMENT和和ENDSENDS总是成对使用的。用这一对总是成对使用的。用这一对伪指令可以将汇编语言源程序分成几个段,通常分为数据段、伪指令可以将汇编语言源程序分成几个段,通常分为数据段、堆栈段和代码段。代码段主要有指令和其他伪指令;对于数堆栈段和代码段。代码段主要有指令和其他伪指令;对于数据段和附加段主要有定义数据区的伪指令。据段和附加段主要有定义数据区的伪指令。例:例: 数据段、堆栈段两段程序框架。数据段、堆栈段两段程序框架。 DATA SEGMENTDATA SEGMENT M1 DW 2478H M1 DW 2478H M2 DW 6758H

20、 M2 DW 6758H P1 DW P1 DW ? P2 DW P2 DW ? DATA ENDSDATA ENDSSTACK SEGMENTSTACK SEGMENT DW 20 DUP DW 20 DUP? ? ; ;定义定义2020个字存个字存储空间储空间STACK ENDSSTACK ENDS 伪指令伪指令ASSUMEASSUME用来告诉汇编程序有关段存放器用来告诉汇编程序有关段存放器与逻辑段的关系,哪一个段为数据段,哪一个段为堆栈段,与逻辑段的关系,哪一个段为数据段,哪一个段为堆栈段,哪一个段为代码段。并没有给段存放器赋予实际的初值,哪一个段为代码段。并没有给段存放器赋予实际的初值

21、,真正将段地址装入段存放器还需要由传送指令在执行时赋真正将段地址装入段存放器还需要由传送指令在执行时赋值值CSCS除外除外。例如:。例如:CODE SEGMENTCODE SEGMENT ASSUME CS ASSUME CS:CODECODE,DSDS:DATADATA,SSSS:STACKSTACK MOV AX MOV AX,DATADATA MOV DS MOV DS,AXAX MOV AX MOV AX,STACKSTACK MOV SS, AX MOV SS, AX CODE ENDSCODE ENDSORGORG伪指令用来规定该伪指令后面的源程序或数据块存放的起始地址伪指令用来规

22、定该伪指令后面的源程序或数据块存放的起始地址 例如,在源程序的第一条指令前用了如下伪指令:例如,在源程序的第一条指令前用了如下伪指令: ORG 2000HORG 2000H汇编程序将把指令指针汇编程序将把指令指针IPIP的值置成的值置成2000H2000H,即目的程序的第一个字节放,即目的程序的第一个字节放在在2000H2000H处。处。 5 5定义过程的伪指令定义过程的伪指令PROCPROC、ENDPENDP 伪指令伪指令PROCPROC和和ENDPENDP总是成对出现的,这两条伪指令之间总是成对出现的,这两条伪指令之间的内容就作为一个过程,即一个子程序。的内容就作为一个过程,即一个子程序。

23、格式:格式: 过程名过程名 PROC PROC NEAR/FARNEAR/FAR RETRET 过程名过程名 ENDP ENDP 其中其中PROCPROC伪指令定义一个过程伪指令定义一个过程子程序子程序,赋予过,赋予过程一个名字,并指出该过程的属性为程一个名字,并指出该过程的属性为NEARNEAR或或FARFAR。假如没有特。假如没有特别指明类型,那么认为过程的类型是别指明类型,那么认为过程的类型是NEARNEAR。 假如对应的子程序头部标有假如对应的子程序头部标有FARFAR,那么产生一个段,那么产生一个段间调用地间调用地址址,它包括,它包括1616位的段地址和位的段地址和1616位的偏移量

24、;假如子位的偏移量;假如子程序头部标有程序头部标有NEARNEAR,那么为段内调用。,那么为段内调用。 当一个程序段被定义为过程后,程序中其他地方就当一个程序段被定义为过程后,程序中其他地方就可以用可以用 CALLCALL指令调用这个过程。调用一个过程的格式为:指令调用这个过程。调用一个过程的格式为: CALL CALL 过程名过程名 例:例: CODE SEGMENTCODE SEGMENT APRC PROC APRC PROC ADD AX, BX ADD AX, BX : : RET RET APRC ENDP APRC ENDP STAT: MOV AX, NUM STAT: MOV

25、 AX, NUM : : CALL APRC CALL APRC : : CODE ENDS CODE ENDS END STAT END STAT6 6程序完毕伪指令程序完毕伪指令ENDEND 伪指令伪指令ENDEND是源程序的完毕标志,该指令并是源程序的完毕标志,该指令并不和其他伪指令成对使用。不和其他伪指令成对使用。 汇编程序在对源程序进展汇编的过程中,遇到汇编程序在对源程序进展汇编的过程中,遇到ENDEND,便得知源程序到此完毕。便得知源程序到此完毕。 例如:例如: END START END START 5.4 汇编语言源程序的构造 汇编语言源程序建立在段构造的根底上,汇编语言源程序

26、建立在段构造的根底上,一个段就是一些指令和数据的集合。一个段就是一些指令和数据的集合。 一个汇编语言源程序,根据程序用处被划分一个汇编语言源程序,根据程序用处被划分成几段,如数据段、堆栈段、附加段和程序段成几段,如数据段、堆栈段、附加段和程序段码码段段,用,用CSCS、DSDS、SSSS、ESES段存放器存放段值。这样段存放器存放段值。这样就构造了源程序的根本格式:就构造了源程序的根本格式:DATA SEGMENTDATA SEGMENT 存放数据项的数据存放数据项的数据段段 DATA ENDSDATA ENDSEXTRA SEGMENTEXTRA SEGMENT 存放数据项的附加数据存放数据

27、项的附加数据段段EXTRA ENDSEXTRA ENDSSTACKl SEGMENTSTACKl SEGMENT 设置堆栈段设置堆栈段STACKl ENDSSTACKl ENDSCODECODE SEGMENTSEGMENT ASSUMEASSUME CS: CODE DS: DATACS: CODE DS: DATA ASSUME SS: STACK1 ES: EXTRA ASSUME SS: STACK1 ES: EXTRABEING: MOV AX, DATABEING: MOV AX, DATA MOV DS, AX MOV DS, AX 存放指令序列存放指令序列CODE ENDSCO

28、DE ENDS END BEING END BEING 例:要求将两个例:要求将两个5 5字节十六进制数相加,字节十六进制数相加, 3B74AC60F8H+20D59E36C1H=?3B74AC60F8H+20D59E36C1H=?可以编写出以下汇编语言源程序。可以编写出以下汇编语言源程序。 DATA SEGMENTDATA SEGMENT;定义数据段;定义数据段 DATA1 DB 0F8HDATA1 DB 0F8H,60H60H,0ACH0ACH,74H74H,3BH3BH;被加数;被加数 DATA2 DB 0C1HDATA2 DB 0C1H,36H36H,9EH9EH,0D5H0D5H,2

29、0H 20H ;加数;加数 DATA ENDS DATA ENDS ;数据段完毕;数据段完毕 CODE SEGMENT CODE SEGMENT ;定义代码段;定义代码段 ASSUME CSASSUME CS:CODECODE,DSDS:DATA DATA STARTSTART: MOVMOVAXAX,DATADATA MOV MOV DS DS, AX AX ;初始化;初始化DS DS F8H60HACH存储器DATA174H3BHC1H36H9EHD5H20HDATA2被加数加数图被加数和加数在内存中的存放情况图被加数和加数在内存中的存放情况 MOV MOV CX CX,5 5 ;循环次数

30、送;循环次数送CXCXMOVMOV SI SI,0 0 ;置;置SISI初值为初值为0 0 CLC CLC ;清;清CFCF标志标志LOOPERLOOPER:MOVMOV AL AL,DATA2SI DATA2SI ;取一个字节加数;取一个字节加数ADCADC DATA1SI DATA1SI,AL AL ;与被加数相加;与被加数相加 INC INC SI SI ;SISI加加1 1 DECDEC CX CX ;CXCX减减1 1JNZ JNZ LOOPER LOOPER ;假设不等于;假设不等于0 0,转,转LOOPERLOOPERMOVMOV AH AH,4CH 4CH INTINT 21H

31、 21H;返回;返回DOSDOS状态状态CODE CODE ENDS ENDS ;代码段完毕;代码段完毕 ENDEND START START ;源程序完毕;源程序完毕 5.5 汇编语言程序的上机过程 在计算机上建立和运行汇编语言程序时,首先在计算机上建立和运行汇编语言程序时,首先要用编辑程序要用编辑程序如行编辑程序如行编辑程序EDLINEDLIN或全屏幕编辑程序或全屏幕编辑程序EDITEDIT等等建立汇编语言源程序建立汇编语言源程序其扩展名必须为其扩展名必须为.ASM.ASM。源程。源程序就是用汇编语言的语句编写的程序。汇编语言源程序是序就是用汇编语言的语句编写的程序。汇编语言源程序是不能被

32、计算机所识别和运行的,必须经过汇编程序不能被计算机所识别和运行的,必须经过汇编程序MASMMASM或或ASMASM加以汇编加以汇编翻译翻译, 把源程序文件转换成为用机把源程序文件转换成为用机器码器码二进制代码二进制代码表示的目的程序文件表示的目的程序文件其扩展名其扩展名为为.OBJ.OBJ。假设在汇编过程中没有出现语法错误,那么汇。假设在汇编过程中没有出现语法错误,那么汇编完毕后,还必须经过连接程序编完毕后,还必须经过连接程序LINKLINK把目的程序文件把目的程序文件与库文件或其他目的文件连接在一起形成可执行文件与库文件或其他目的文件连接在一起形成可执行文件其其扩展名为扩展名为.EXE.EX

33、E文件文件。这时就可以在。这时就可以在DOSDOS下直接键入文件名下直接键入文件名运行此程序。运行此程序。 在计算机上运行汇编语言程序的步骤是:在计算机上运行汇编语言程序的步骤是: 1 1 用编辑程序用编辑程序EDITEDIT建立建立ASMASM源程序文件。源程序文件。 2 2 用汇编程序用汇编程序MASMMASM或或ASMASM把把ASMASM文件汇编成文件汇编成OBJ OBJ 文件文件。 3 3 用连接程序用连接程序LINKLINK把把OBJOBJ文件转换成文件转换成EXEEXE文件。文件。 4 4 在在DOSDOS命令状态下直接键入文件名就可执行该文件。命令状态下直接键入文件名就可执行该

34、文件。 5.5.1 用编用编辑程序建立汇编语言源程序文件辑程序建立汇编语言源程序文件ASM文件文件 例如,我们要建立一个求从例如,我们要建立一个求从1开场连续开场连续50个奇数之和的汇编个奇数之和的汇编语言源程序,可以在语言源程序,可以在DOS形式下用编辑程序形式下用编辑程序EDIT.EXE建立汇编建立汇编语言源程序文件语言源程序文件MBA.ASM。例如:。例如:C: EDIT MBA.ASM进入进入EDIT的程序编辑画面时,的程序编辑画面时, 输入汇编语言源程序如下:输入汇编语言源程序如下: DATA SEGMENT SUM DW 0 DATA ENDSCODE SEGMENTCODE SE

35、GMENT ASSUME DS:DATA, CS:CODE ASSUME DS:DATA, CS:CODESTART: MOV AX , DATA START: MOV AX , DATA ;将;将DSDS初始化初始化 MOV DS , AXMOV DS , AX MOV CX , 50 MOV CX , 50 MOV AX , 0 MOV AX , 0 MOV BX , 1 MOV BX , 1NEXT: ADD AX , BXNEXT: ADD AX , BX INC BX INC BX INC INC BX BX ;求下一个奇数;求下一个奇数 DEC CXDEC CX JNE NEXT

36、JNE NEXT ;未计够未计够5050次转至次转至NEXTNEXT MOV SUM , AX MOV SUM , AX MOV AH , 4CH MOV AH , 4CH INT INT 21H ; 21H ; 返回返回DOS DOS 状态状态CODE ENDSCODE ENDS END START END START注意注意:程序输入完毕后,一定要将源程序程序输入完毕后,一定要将源程序文件存入盘中,以便进展汇编和连接,文件存入盘中,以便进展汇编和连接,也可以再次调入源程序进展修改。也可以再次调入源程序进展修改。5.5.2 用汇编程序用汇编程序MASM将将ASM文件汇编成目的程序文文件汇编成

37、目的程序文件件OBJ文件文件 在对源程序文件在对源程序文件简称简称ASM文件文件汇编时,汇编程序将对汇编时,汇编程序将对ASM文件进展两遍扫描,假设程序文件中有语法错误,那么完毕文件进展两遍扫描,假设程序文件中有语法错误,那么完毕汇编后,汇编程序将指出源程序中存在的错误,这时应返回编辑汇编后,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目的程序,即目的程序,即OBJ文件。因此,汇编程序的主要功能可以概括为文件。因此,汇编程序的主要功能可以概括为以下三点:以下三点: 1 检查源程序

38、中的语法错误,并给出错误信息。检查源程序中的语法错误,并给出错误信息。 2 产生目的程序文件产生目的程序文件OBJ文件文件。 3 展开宏指令。展开宏指令。 完成汇编功能的是汇编程序完成汇编功能的是汇编程序ASM或宏汇编程序或宏汇编程序MASM,二,二者的区别在于:者的区别在于:MASM有宏处理功能,而有宏处理功能,而ASM没有宏处理功能,没有宏处理功能,因此,因此,MASM比比ASM的功能强大,但的功能强大,但MASM需要占据较大的内需要占据较大的内存空间,当内存空间较小时存空间,当内存空间较小时如如64 KB,只能使用,只能使用ASM。 汇编过程如下:汇编过程如下: 当源程序建立以后,仍以当

39、源程序建立以后,仍以MBA.ASM程序为例,我们用汇编程序为例,我们用汇编程序程序MASM对对MBA.ASM源程序文件进展汇编,以便产活力器码源程序文件进展汇编,以便产活力器码的目的程序文件的目的程序文件MBA.OBJ,其操作步骤如下:,其操作步骤如下: C:MASM MBA Microsoft R Macro Assembler Version 5.00 Copyright C Microsoft Corp 19811985,1987. All rights reserved. Object filename MBA.OBJ: Source listing NUL.LST:MBA Cross

40、-reference NUL.CRF:MBA 50468 + 303948 Bytes symbol space free 0 Warning Errors0 Severe Errors 由此可知,汇编程序调入后,首先显示版本号,然后出现三个由此可知,汇编程序调入后,首先显示版本号,然后出现三个提示行。提示行。 第一个提示行为:第一个提示行为:Object filename MBA.OBJ:这是询问目的程序文件名,方括号内为机器规定的默认的文件名,这是询问目的程序文件名,方括号内为机器规定的默认的文件名,通常直接按回车键,表示采用默认的文件名通常直接按回车键,表示采用默认的文件名如上所示如上所

41、示,这是,这是我们汇编的主要目的。我们汇编的主要目的。 第二个提示行为:第二个提示行为: Source listing NUL.LST:这是询问是否建立列表文件。假设不建立,直接回车;假设要这是询问是否建立列表文件。假设不建立,直接回车;假设要建立,那么输入文件名再回车建立,那么输入文件名再回车如上所示,表示要建立名为如上所示,表示要建立名为MBA的列表文件的列表文件。列表文件中同时列出源程序和机器语言程。列表文件中同时列出源程序和机器语言程序清单,并给出符号表,有利于程序调试。序清单,并给出符号表,有利于程序调试。 第三个提示行为:第三个提示行为: Cross-reference NUL.C

42、RF:这是询问是否要建立穿插索引文件。假设不建立,那么直接回车;这是询问是否要建立穿插索引文件。假设不建立,那么直接回车;假设要建立,那么应输入文件名假设要建立,那么应输入文件名如上所示,表示要建立如上所示,表示要建立MBA.CRF文件文件。为了建立穿插索引文件,还必须调用。为了建立穿插索引文件,还必须调用CREF.EXE程序,即输入:程序,即输入: C:CREF MBA Microsoft R Cross-Reference Utility Version 5.00 Copyright C Microsoft Corp 19811985,1987. All rights reserved.

43、listing MBA.REF: 11 Symbols 这时首先显示版本号,然后出现一个提示行:这时首先显示版本号,然后出现一个提示行: Listing MBA.REF:这是询问穿插索引文件名。这时可用回车成认方括号内机器默这是询问穿插索引文件名。这时可用回车成认方括号内机器默认的文件名,如上所示。这样就建立了认的文件名,如上所示。这样就建立了MBA.REF文件。其内容文件。其内容是用户定义的所有符号是用户定义的所有符号包括变量包括变量,并给出每个符号定义所,并给出每个符号定义所在的行号在的行号附以附以以及引用的行号。以及引用的行号。 调入汇编程序,当我们答复了上述各提示行的询问之后,调入汇编

44、程序,当我们答复了上述各提示行的询问之后,汇编程序就对源程序进展汇编。假设汇编过程中发现源程序有汇编程序就对源程序进展汇编。假设汇编过程中发现源程序有语法错误,那么列出有错误的语句和错误的代码。错误分警告语法错误,那么列出有错误的语句和错误的代码。错误分警告错误错误Wraning Errors和严重错误和严重错误Severe Errors。 警告警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进展正确汇编的错误,并给出错误的个数及行号、错认为无法进展正确汇编的错误,并给出错误的个数及行号、错误的性质等。这时,就要对错误进展

45、分析,找出问题和原因,误的性质等。这时,就要对错误进展分析,找出问题和原因,然后再调用编辑程序加以修改,修改后重新汇编,直到汇编后然后再调用编辑程序加以修改,修改后重新汇编,直到汇编后无错误为止。无错误为止。 5.5.3 用连接程序用连接程序LINK生成可执行程序文件生成可执行程序文件EXE文文件件 经汇编后产生的二进制的目的程序文件经汇编后产生的二进制的目的程序文件OBJ文件文件并不并不是可执行程序文件是可执行程序文件EXE文件文件,必须经连接以后,才能成为,必须经连接以后,才能成为可执行文件。连接程序并不是专为汇编语言程序设计的。假如可执行文件。连接程序并不是专为汇编语言程序设计的。假如一

46、个程序是由假设干个模块组成的,也可通过连接程序一个程序是由假设干个模块组成的,也可通过连接程序LINK把把它们连接在一起。这些模块可以是汇编程序产生的目的文件,它们连接在一起。这些模块可以是汇编程序产生的目的文件,也可以是高级语言编译程序产生的目的文件。也可以是高级语言编译程序产生的目的文件。 连接过程如下:连接过程如下: C:LINK MBA Microsoft R Overlay Linker Version 3.60 Copyright C Microsoft Corp 1983-1987. All rights reserved. Run File MBA.EXE: List File

47、 NUL.MAP:MBA Libraries .LIB: 由此可知,在连接程序调入后,首先显示版本号,然后出现三由此可知,在连接程序调入后,首先显示版本号,然后出现三个提示行。个提示行。 第一个提示行为:第一个提示行为: Run File MBA.EXE:这是询问要产生的可执行文件的文件名。一般直接回车采用方括这是询问要产生的可执行文件的文件名。一般直接回车采用方括号内规定的隐含文件名。号内规定的隐含文件名。 第二个提示行为:第二个提示行为: List File NUL.MAP:这是询问是否要建立连接映象文件。假设不建立,那么直接回车;这是询问是否要建立连接映象文件。假设不建立,那么直接回车;

48、假设要建立,那么输入文件名再回车。我们这里是要建立该文件,假设要建立,那么输入文件名再回车。我们这里是要建立该文件,那么输入文件名那么输入文件名MBA。 第三个提示行为:第三个提示行为: Libraries .LIB: 这是询问是否用到库文件。假设无特殊需要,那么直接回这是询问是否用到库文件。假设无特殊需要,那么直接回车即可。车即可。 上述提示行答复后,连接程序开场连接。假设连接过程中上述提示行答复后,连接程序开场连接。假设连接过程中有错,那么显示错误信息,错误分析清楚后,要重新调入编辑有错,那么显示错误信息,错误分析清楚后,要重新调入编辑程序进展修改,然后重新汇编,再经过连接,直至无错为止。

49、程序进展修改,然后重新汇编,再经过连接,直至无错为止。连接以后,便产生了可执行程序文件连接以后,便产生了可执行程序文件EXE文件文件。 5.5.4 程序的执行程序的执行 当我们建立了可执行文件当我们建立了可执行文件MBA.EXE后,就可直接在后,就可直接在DOS下下执行该程序:执行该程序: C:MBA C: 程序运行完毕并返回程序运行完毕并返回DOS。这里我们并未看到运行结果。这里我们并未看到运行结果。怎么知道程序运行已经完毕?又怎么知道程序已返回怎么知道程序运行已经完毕?又怎么知道程序已返回DOS?下?下面我们来讨论这些问题。面我们来讨论这些问题。 5.5.5 汇编语言和汇编语言和DOS操作

50、系统的接口操作系统的接口 当编写的汇编语言源程序是在当编写的汇编语言源程序是在DOS环境下运行时,必须理解环境下运行时,必须理解汇编语言是如何同汇编语言是如何同DOS操作系统接口的。操作系统接口的。 当我们用编辑程序把源程序输入到机器中,用汇编程序把它当我们用编辑程序把源程序输入到机器中,用汇编程序把它转换为目的程序,用连接程序对其进展连接和定位时,操作系统转换为目的程序,用连接程序对其进展连接和定位时,操作系统为每一个用户程序建立了一个为每一个用户程序建立了一个程序段前缀区程序段前缀区PSP,其长度为,其长度为256个个字节,主要用于存放所要执行程序的有关信息,同时也提供了程字节,主要用于存

51、放所要执行程序的有关信息,同时也提供了程序和操作系统的接口。操作系统在程序段前缀的开场处序和操作系统的接口。操作系统在程序段前缀的开场处偏移地偏移地址址0000H安排了一条安排了一条INT 20H软中断指令。软中断指令。INT 20H中断效劳中断效劳程序由程序由DOS提供,执行该效劳程序后,控制就转移到提供,执行该效劳程序后,控制就转移到DOS,即返,即返回到回到DOS管理的状态。因此,管理的状态。因此,用户在组织程序时,必须使程序执用户在组织程序时,必须使程序执行完后能去执行存放于行完后能去执行存放于PSP开场处的开场处的INT 20H指令,这样便返回指令,这样便返回到到DOS,否那么就无法

52、继续键入命令和程序。,否那么就无法继续键入命令和程序。 DOS在建立了程序段前缀区在建立了程序段前缀区PSP之后,就将要执行的程序之后,就将要执行的程序从磁盘装入内存。在定位程序时,从磁盘装入内存。在定位程序时,DOS将代码段置于将代码段置于PSP下方,下方,代码段之后是数据段,最后放置堆栈段。内存分配好之后,代码段之后是数据段,最后放置堆栈段。内存分配好之后,DOS就设置段存放器就设置段存放器DS和和ES的值,以使它们指向的值,以使它们指向PSP的开场的开场处,即处,即INT 20H的存放地址的存放地址,同时将,同时将CS设置为设置为PSP后面代码段后面代码段的段地址,的段地址,IP设置为指

53、向代码段中第一条要执行的指令位置,设置为指向代码段中第一条要执行的指令位置,把把SS设置为指向堆栈的段地址,让设置为指向堆栈的段地址,让SP指向堆栈段的栈底指向堆栈段的栈底取决取决于堆栈的长度于堆栈的长度,然后系统开场执行用户程序。,然后系统开场执行用户程序。 为了保证用户程序执行完后能返回到为了保证用户程序执行完后能返回到DOS状态,可使用如状态,可使用如下两种方法。下两种方法。 1标准方法标准方法 首先将用户程序的主程序定义成一个首先将用户程序的主程序定义成一个FAR过程,其最后一条指过程,其最后一条指令为令为RET。然后在代码段的主程序。然后在代码段的主程序即即FAR过程过程的开场部分用

54、如的开场部分用如下三条指令将下三条指令将PSP中中INT 20H 指令的段地址及偏移地址压入堆栈:指令的段地址及偏移地址压入堆栈:PUSH DS ;保护;保护PSP段地址段地址MOV AX,0 ;保护偏移地址;保护偏移地址0PUSH AX 这样,当程序执行到主程序的最后一条指令这样,当程序执行到主程序的最后一条指令RET时,由于该过时,由于该过程具有程具有FAR属性,故存在堆栈内的两个字就分别弹出到属性,故存在堆栈内的两个字就分别弹出到CS和和IP,从,从而执行而执行INT 20H指令,使控制返回到指令,使控制返回到DOS状态。返回状态。返回DOS的标志就的标志就是程序运行完后出现一个是程序运

55、行完后出现一个DOS的标识符,如的标识符,如C。 2. 非标准方法非标准方法 在用户的程序中不定义过程段,只在代码段完毕之前在用户的程序中不定义过程段,只在代码段完毕之前即即CODE ENDS之前之前增加两条语句:增加两条语句:MOV AH,4CHINT 21H那么程序执行完后也会自动返回那么程序执行完后也会自动返回DOS状态。状态。 说明:说明:由于开场执行用户程序时,由于开场执行用户程序时,DS并不设置在用户的数据段的并不设置在用户的数据段的起始处,起始处,ES同样也不设置在用户的附加段起始处,因此在程序开同样也不设置在用户的附加段起始处,因此在程序开场处场处或在保护了或在保护了PSP段地

56、址和偏移地址段地址和偏移地址0以后以后,应该使用以下,应该使用以下方法重新装填方法重新装填DS和和ES的值使其指向用户的数据段:的值使其指向用户的数据段: MOV AX,段名,段名 MOV 段存放器名,段存放器名,AX ;段存放器名可以是;段存放器名可以是DS、ES、SS之一之一 5.5.6. 常用系统功能调用和常用系统功能调用和BIOS中断调用中断调用 微型计算机系统为汇编用户提供了两个程序接口,一个是微型计算机系统为汇编用户提供了两个程序接口,一个是DOS系统功能调用,另一个是系统功能调用,另一个是ROM中的中的BIOSBasic Input/Output System。系统功能调用和系统

57、功能调用和BIOS由一系列的效劳子由一系列的效劳子程序构成,程序构成,但调用与返回不是使用子程序调用指令但调用与返回不是使用子程序调用指令 CALL和返回和返回指令指令RET,而是通过软中断指令,而是通过软中断指令INT n 和中断返回指令和中断返回指令IRET调用调用和返回的。和返回的。 DOS系统功能调用和系统功能调用和BIOS的效劳子程序,使得程序设计人员的效劳子程序,使得程序设计人员不必涉及硬件就可以使用系统的硬件,尤其是不必涉及硬件就可以使用系统的硬件,尤其是I/O的使用与管理。的使用与管理。 1系统功能调用系统功能调用 系统功能调用是微机的磁盘操作系统系统功能调用是微机的磁盘操作系

58、统DOS为用户提供的一组为用户提供的一组例行子程序,因此又称为例行子程序,因此又称为DOS系统功能调用。这些子程序可分为系统功能调用。这些子程序可分为以下四个主要方面:以下四个主要方面: 1 磁盘的读磁盘的读/写及控制管理。写及控制管理。 2 内存管理。内存管理。 3 根本输入根本输入/输出管理输出管理如键盘、打印机、显示器等如键盘、打印机、显示器等。 4 其他管理其他管理如时间、日期等如时间、日期等。 为了使用方便,系统已将所有子程序按顺序编号,称为调为了使用方便,系统已将所有子程序按顺序编号,称为调用号。其调用号为用号。其调用号为075H,如表,如表5.4所示。表中只列出了根本输所示。表中

59、只列出了根本输入入/输出管理中部分键盘和显示器输出管理中部分键盘和显示器DOS功能调用。功能调用。 对于所有的功能调用,使用时一般需要经过以下三个步骤:对于所有的功能调用,使用时一般需要经过以下三个步骤: 1 子程序的入口参数送相应的存放器。子程序的入口参数送相应的存放器。 2 子程序编号送子程序编号送AH。 3 发出中断恳求:发出中断恳求:INT 21H系统功能调用指令系统功能调用指令。 表表5.4 键盘和显示器的键盘和显示器的DOS调用调用 调用号调用号功功 能能入入 口口 参参 数数出出 口口 参参 数数1键入并显示一个字符键入并显示一个字符 键入字符的键入字符的ASCII码码在在AL中

60、中2显示器显示一个字符显示器显示一个字符DL中置输出字符的中置输出字符的ASCII码码 5打印机打印一个字符打印机打印一个字符DL中置输出字符的中置输出字符的ASCII码码 8键盘输入一个字符键盘输入一个字符 键入字符的键入字符的ASCII码码在在AL中中9显示器显示一个字符显示器显示一个字符串串DS:DX置字符串首址,字符置字符串首址,字符串以串以$结束结束 10(0AH)键入并显示字符串键入并显示字符串DS:DX置字符串首址,第置字符串首址,第1单元置允许键入的字符数单元置允许键入的字符数(含含一个回车符一个回车符)键入的实际字符数在键入的实际字符数在第第2单元中,键入的字单元中,键入的字

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论