微机原理与接口技术(第3版)彭虎-第4章 8086汇编语言程序设计_第1页
微机原理与接口技术(第3版)彭虎-第4章 8086汇编语言程序设计_第2页
微机原理与接口技术(第3版)彭虎-第4章 8086汇编语言程序设计_第3页
微机原理与接口技术(第3版)彭虎-第4章 8086汇编语言程序设计_第4页
微机原理与接口技术(第3版)彭虎-第4章 8086汇编语言程序设计_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

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

文档简介

1、“十一五十一五”国家级国家级规划教材规划教材微机原理与接口技术 (第3版)第第4 4章章80868086汇编语言程序设计汇编语言程序设计本章主要本章主要内容内容2半导体存储器的分类半导体存储器的分类18086 汇编语言的语句汇编语言的语句18086 汇编语言中的运算符汇编语言中的运算符38086 汇编语言中的伪指令汇编语言中的伪指令汇编语言程序设计汇编语言程序设计45汇编语言程序设计与上机调试汇编语言程序设计与上机调试6宏定义与宏调用宏定义与宏调用概述概述v 汇编语言:汇编语言:用指令的助记符、符号地址、标号等书用指令的助记符、符号地址、标号等书写程序的语言。用助记符来表示指令的操作码和操写程

2、序的语言。用助记符来表示指令的操作码和操作数,用符号或标号代表地址、常量和变量。作数,用符号或标号代表地址、常量和变量。v 用汇编语言编写的程序称为用汇编语言编写的程序称为汇编语言程序汇编语言程序或或源程序源程序(Source ProgramSource Program)。)。 源程序文件名后缀:源程序文件名后缀:.asm.asm(不区分大小写)(不区分大小写)v 汇编语言源程序不能直接在计算机上运行,需要将汇编语言源程序不能直接在计算机上运行,需要将它翻译成机器语言程序它翻译成机器语言程序,即,即目标程序目标程序(Object Object ProgramProgram)。)。 目标程序文件

3、名后缀:目标程序文件名后缀:.obj.obj(不区分大小写)(不区分大小写)概述概述v 汇编语言源程序汇编语言源程序目标程序目标程序的的这个翻译过程为这个翻译过程为汇编汇编。v 完成汇编任务的程序(软件)完成汇编任务的程序(软件)称为称为汇编程序汇编程序。汇编过程的含义如图:汇编过程的含义如图:汇编语言汇编语言源程序源程序目标程序目标程序汇编程序汇编程序汇编汇编概述概述v将汇编语言源程序翻译成目标代码程序;将汇编语言源程序翻译成目标代码程序;v按指令要求自动分配存储区(包括程序区、数据区按指令要求自动分配存储区(包括程序区、数据区等);等);v自动把源程序中以各种进制表示的数据都转换成二自动把

4、源程序中以各种进制表示的数据都转换成二进制形式的数据;进制形式的数据;v计算表达式的值;计算表达式的值;v对汇编语言源程序进行语法检查,并给出语法出错对汇编语言源程序进行语法检查,并给出语法出错的提示信息。的提示信息。汇编语言汇编语言源程序源程序目标程序目标程序汇编程序汇编程序汇编汇编汇编程序完成汇编程序完成的的任务任务概述概述v 汇编语言程序由若干个汇编语言程序由若干个段段组成。组成。v 按照各段功能的不同,分别有按照各段功能的不同,分别有: 代码段、数据段、堆栈段和附加段代码段、数据段、堆栈段和附加段v 代码段是必须要定义的。代码段是必须要定义的。概述概述v 【例【例5-15-1】若若X

5、X、Y Y和和RESULTRESULT为内存字单元的地址为内存字单元的地址,请,请编写汇编写汇编程序,计算编程序,计算X+YX+Y,并把和存入,并把和存入RESULTRESULT单元。单元。DATA SEGMENTDATA SEGMENT; ;段定义段定义 X DW 2010H X DW 2010H ; ;定义被加数定义被加数 Y DW 2011H Y DW 2011H ; ;定义加数定义加数 RESULT DW ? RESULT DW ? ; ;分配和数存放单元分配和数存放单元DATA ENDS DATA ENDS ; ; 段定义结束段定义结束概述概述说明哪个段是数据段,说明哪个段是数据段,

6、哪个段是代码段哪个段是代码段程序运行结束,关闭并返程序运行结束,关闭并返回操作系统回操作系统给除给除CSCS以外的其他用到以外的其他用到的段的段寄存器赋值的段的段寄存器赋值源程序结束源程序结束处理并存处理并存结果结果CODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATA STARTSTART: MOV AX,DATA : MOV AX,DATA MOV DS,AX MOV DS,AX MOV AX,X MOV AX,X ADD AX,Y ADD AX,Y MOV RESULT,AX MOV RESULT,AX

7、 MOV AH,4CH MOV AH,4CH INT 21H INT 21HCODE ENDSCODE ENDS ENDEND START START4 8086 4 8086 汇编语言程序设计汇编语言程序设计4.14.1 8086 8086 汇编语言的语句汇编语言的语句语句语句指令性语句指令性语句指示性语句指示性语句CPU CPU 可执行语句,对应可执行语句,对应CPUCPU指令系统规定的一条指令系统规定的一条指令指令如:如:MOVMOV AH AH,4CH 4CH INC INC BX BX汇编时给汇编程序提供与汇编时给汇编程序提供与硬件有关的汇编信息,本硬件有关的汇编信息,本身并不产生目

8、标代码,身并不产生目标代码,CPUCPU不执行。是指示汇编程序不执行。是指示汇编程序进行汇编的操作。进行汇编的操作。也称也称伪指令(或指示符)伪指令(或指示符)例:例:MESSAGE DB MESSAGE DB THIS IS A SAMPLE PROGRAM.THIS IS A SAMPLE PROGRAM. ;定义变量定义变量MESSAGEMESSAGE在数据段在数据段DATADATA中的存放形式,汇编时,汇编程序将中的存放形式,汇编时,汇编程序将MESSAGEMESSAGE定义为一个字节类型数据区的首地址,并按字节存储字符串。定义为一个字节类型数据区的首地址,并按字节存储字符串。 4.1

9、4.1 8086 8086 汇编语言的语句汇编语言的语句v1、指令性语句格式、指令性语句格式 4 8086 4 8086 汇编语言程序设计汇编语言程序设计 表示可任选部分表示可任选部分;v LOOPERLOOPER: MOV ALMOV AL,DATA2SI DATA2SI ;取一个字节加数;取一个字节加数v BB1BB1:SHL AX, 1 SHL AX, 1 ; ;将将AXAX逻辑左移逻辑左移1 1位位 LOOP BB1 LOOP BB1 标号标号: : 操作码操作码 操作数操作数 ,操作数,操作数 ; ;注释注释 4.14.1 8086 8086 汇编语言的语句汇编语言的语句v1、指令性

10、语句格式、指令性语句格式 4 8086 4 8086 汇编语言程序设计汇编语言程序设计 表示可任选部分表示可任选部分;标号段:标号段:v 可选项,可选项,后跟冒号,在程序中作为后跟冒号,在程序中作为JMPJMP、LOOPLOOP指令的转移目标指令的转移目标,与具体的指令地址相联系。,与具体的指令地址相联系。v 在同一段程序中,同样的标号名只允许定义一次。在同一段程序中,同样的标号名只允许定义一次。v 由由字母(不分大小写)、数字及特殊符号字母(不分大小写)、数字及特殊符号组成,组成,名字可以用除名字可以用除数字外所有的合法符号开头数字外所有的合法符号开头,名字的有效长度不超过名字的有效长度不超

11、过3131个英文个英文字符字符。标识符不能是汇编语言中有特定意义的保留字、助记符标识符不能是汇编语言中有特定意义的保留字、助记符、RegReg等等 标号标号: : 操作码操作码 操作数操作数 ,操作数,操作数 ; ;注释注释 4.14.1 8086 8086 汇编语言的语句汇编语言的语句v1、指令性语句格式、指令性语句格式 4 8086 4 8086 汇编语言程序设计汇编语言程序设计 表示可任选部分表示可任选部分;标号段:标号段:v 标号表示标号表示指令地址指令地址, , 是是指令符号地址指令符号地址, , 一旦定义了具有一旦定义了具有3 3种属种属性:性: 段地址属性:段地址属性: 标号所在

12、段的段地址(16位数),在CS中 段内偏移量段内偏移量( (或相对地址或相对地址) )属性:属性:标号与CS段起始地址之间相距字节数,16位无符号数 类型属性:类型属性:标号所代表的指令的转移范围,分NEAR(近)与FAR (远)两种。 标号标号: : 操作码操作码 操作数操作数 ,操作数,操作数 ; ;注释注释 4.14.1 8086 8086 汇编语言的语句汇编语言的语句v1、指令性语句格式、指令性语句格式 4 8086 4 8086 汇编语言程序设计汇编语言程序设计标号段:标号段:类型属性:类型属性:代表的指令的转移范围,分NEAR(近)与FAR (远)两种v NEAR类型的标号仅在同一

13、段内使用,用2字节指针给出转移的偏移量属性(即只改变IP值,不改变CS值);v FAR类型的标号无此限制,必须用字节指针指出转移的段地址与段内偏移量。v 当标号用作JMP或CALL等指令的目标操作数时,若为段内转移或调用则采用NEAR类型;若为段间转移或调用则应当采用FAR类型。 标号标号: : 操作码操作码 操作数操作数 ,操作数,操作数 ; ;注释注释 4 8086 4 8086 汇编语言程序设计汇编语言程序设计操作码段:操作码段:v 包括包括8086 8086 的指令助记符。的指令助记符。v 语句中唯一不可缺少的部分。语句中唯一不可缺少的部分。v 操作码助记符通常称为关键字或保留字,用户

14、不能用这些字或操作码助记符通常称为关键字或保留字,用户不能用这些字或词作为变量名、标号、标识符等。词作为变量名、标号、标识符等。4.14.1 8086 8086 汇编语言的语句汇编语言的语句v1、指令性语句格式、指令性语句格式 表示可任选部分表示可任选部分; 标号标号: : 操作码操作码 操作数操作数 ,操作数,操作数 ; ;注释注释 4 8086 4 8086 汇编语言程序设计汇编语言程序设计操作数段:操作数段:v 表明操作的对象,操作数可以是常数、寄存器、标号、变量和表明操作的对象,操作数可以是常数、寄存器、标号、变量和表达式。表达式。v 对于对于8086 8086 的一般性执行指令,操作

15、数表可以是一个或两个操的一般性执行指令,操作数表可以是一个或两个操作数。作数。v 若是两个操作数,用逗号隔开,则称左边操作数为目标操作数若是两个操作数,用逗号隔开,则称左边操作数为目标操作数,右边操作数为源操作数。,右边操作数为源操作数。4.14.1 8086 8086 汇编语言的语句汇编语言的语句v1、指令性语句格式、指令性语句格式 标号标号: : 操作码操作码 操作数操作数 ,操作数,操作数 ; ;注释注释 表示可任选部分表示可任选部分;4 8086 4 8086 汇编语言程序设计汇编语言程序设计操作数段:操作数段:v 表明操作的对象,操作数可以是常数、寄存器、标号、变量和表明操作的对象,

16、操作数可以是常数、寄存器、标号、变量和表达式。表达式。4.14.1 8086 8086 汇编语言的语句汇编语言的语句v1、指令性语句格式、指令性语句格式 标号标号: : 操作码操作码 操作数操作数 ,操作数,操作数 ; ;注释注释 表示可任选部分表示可任选部分;u操作数可能为以下几种情况:操作数可能为以下几种情况:常量操作数:如常量操作数:如 34 等。等。寄存器操作数:如寄存器操作数:如 AX 等。等。存储器操作数:如存储器操作数:如0100H 等。等。表达式操作数:如表达式操作数:如AX+2、DAT+2、SEG NUM1等。等。4 8086 4 8086 汇编语言程序设计汇编语言程序设计注

17、释段:注释段:v 以“;”开始,用来简要说明该指令在程序中的作用(不是重复解释指令本身的功能),以便于程序的阅读、备忘和交流。4.14.1 8086 8086 汇编语言的语句汇编语言的语句v1、指令性语句格式、指令性语句格式 标号标号: : 操作码操作码 操作数操作数 ,操作数,操作数 ; ;注释注释 表示可任选部分表示可任选部分;4.14.1 8086 8086 汇编语言的语句汇编语言的语句v2、指示性语句格式、指示性语句格式 4 8086 4 8086 汇编语言程序设计汇编语言程序设计 表示可任选部分表示可任选部分;v DATA1 DB 0F8HDATA1 DB 0F8H,60H60H,0

18、ACH0ACH,74H74H,3BH3BH;定义一组数据;定义一组数据vDATA SEGMENTDATA SEGMENT AA DB 20H,-30H ;AA DB 20H,-30H ;在数据段定义一组字节数据在数据段定义一组字节数据 DATA ENDSDATA ENDS 标识符标识符( (名字名字) ) 指示符指示符( (伪指令伪指令) ) 表达式表达式 ; ;注释注释 4.14.1 8086 8086 汇编语言的语句汇编语言的语句v2、指示性语句格式、指示性语句格式 4 8086 4 8086 汇编语言程序设计汇编语言程序设计 表示可任选部分表示可任选部分;标识符段:标识符段:v 标识符由

19、字母开头,由字母、数字、特殊字符标识符由字母开头,由字母、数字、特殊字符( (如如? ?、下划线、下划线、 等等) )组成的字符串。组成的字符串。v 标识符定义的为常量名、变量名、过程名、段名等。v 默认情况下,汇编程序是不区分大、小写字母的v 注意:名字的后面没有冒号,这是指示性语句同指令性语句在格式上的主要区别。 标识符标识符( (名字名字) ) 指示符指示符( (伪指令伪指令) ) 表达式表达式 ; ;注释注释 4.14.1 8086 8086 汇编语言的语句汇编语言的语句v2、指示性语句格式、指示性语句格式 4 8086 4 8086 汇编语言程序设计汇编语言程序设计标识符段:标识符段

20、:v 标识符标识符, , 具有具有3 3种属性:种属性: 段地址属性:段地址属性: 标识符所在段的段地址(16位数) 段内偏移量段内偏移量( (或相对地址或相对地址) )属性:属性:标识符与段起始地址之间相距字节数,16位无符号数 类型属性:类型属性:伪指令定义的变量的属性,指出变量所保留的字节数。BYTE(1BYTE(1字节的字节型字节的字节型) ), WORD(2 WORD(2字节的字型字节的字型) ), DWORD(4DWORD(4字节的双字型字节的双字型) ) 。 标识符标识符( (名字名字) ) 指示符指示符( (伪指令伪指令) ) 表达式表达式 ; ;注释注释 4.14.1 808

21、6 8086 汇编语言的语句汇编语言的语句v2、指示性语句格式、指示性语句格式 4 8086 4 8086 汇编语言程序设计汇编语言程序设计 表示可任选部分表示可任选部分;指示符段:指示符段:v 指示符又称指示符又称伪指令,伪指令,由汇编程序执行的命令。v 能将标识符定义为变量、程序段、常数、过程等,且给出其属性。 标识符标识符( (名字名字) ) 指示符指示符( (伪指令伪指令) ) 表达式表达式 ; ;注释注释 4.14.1 8086 8086 汇编语言的语句汇编语言的语句v2、指示性语句格式、指示性语句格式 4 8086 4 8086 汇编语言程序设计汇编语言程序设计 表示可任选部分表示

22、可任选部分;表达式段:表达式段:v 是常数、寄存器、标号、变量与一些操作符相结合的序列,可是常数、寄存器、标号、变量与一些操作符相结合的序列,可以有数字表达式和地址表达式两种。以有数字表达式和地址表达式两种。v 在汇编期间,汇编程序按照一定的优先规则,对表达式进行计算后得到一个数值或一个地址。 标识符标识符( (名字名字) ) 指示符指示符( (伪指令伪指令) ) 表达式表达式 ; ;注释注释 4.24.2 8086 8086 汇编语言中的伪指令汇编语言中的伪指令4 8086 4 8086 汇编语言程序设计汇编语言程序设计v 伪指令又称伪指令又称伪操作伪操作,在汇编程序的指示性语句中作,在汇编

23、程序的指示性语句中作为为指示符指示符。v 伪指令可以对数据进行定义,为变量分配存储区域伪指令可以对数据进行定义,为变量分配存储区域,定义一个程序段或一个过程,指示程序结束等。,定义一个程序段或一个过程,指示程序结束等。v 有符号定义语句、变量义语句、段定义语句、过程有符号定义语句、变量义语句、段定义语句、过程定义语句、结束语句等。定义语句、结束语句等。4.2.14.2.1 符号定义语句符号定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令1 1 等值语句等值语句v 格式:格式: 符号名符号名 EQU EQU 表达式表达式u表达式表达式可以是一个常数、已定义的符号、

24、数值表达式或可以是一个常数、已定义的符号、数值表达式或地址表达式地址表达式。v 功能:功能:给表达式赋予一个名字。定义后,可用名字代给表达式赋予一个名字。定义后,可用名字代替表达式。在同一源程序中,一个替表达式。在同一源程序中,一个符号名符号名只能用只能用EQUEQU定义一次。定义一次。例例PORT EQU 1234 PORT EQU 1234 ;常量;常量BUFF EQU PORT+58 BUFF EQU PORT+58 ;数值表达式;数值表达式MEM EQU DS:BP+20H MEM EQU DS:BP+20H ;地址表达式;地址表达式COUNT EQU CX COUNT EQU CX

25、;变量;变量ABC EQU AAAABC EQU AAA ;指令助记符;指令助记符当程序中出现下面的语句时当程序中出现下面的语句时MOV AX, PORT MOV AX, PORT = MOV AX, 1234= MOV AX, 1234MOV BX, BUFF MOV BX, BUFF = MOV BX, 1292 = MOV BX, 1292 B EQU BP+8 B EQU BP+8 B EQU 20H B EQU 20H 不行!不行!4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令4.2.14.2.1 符号定义语句符号定义语句4.2 8086 4.2 8086

26、汇编语言中的伪指令汇编语言中的伪指令2 2 等号语句等号语句v 格式:格式: 符号名符号名 = = 表达式表达式u表达式表达式可以是一个常数、已定义的符号、数值表达式或可以是一个常数、已定义的符号、数值表达式或地址表达式地址表达式。v功能:功能:与与EQUEQU基本相同,区别是它可以对同一基本相同,区别是它可以对同一个名字重新定义。个名字重新定义。例例NMU = 34NMU = 34NUM = 34+1NUM = 34+14.2.24.2.2 变量定义语句变量定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令v 用于定义变量(程序中所用的存储器操作数),指用于定义

27、变量(程序中所用的存储器操作数),指定变量的类型和名称,并为其分配存储单元和预置定变量的类型和名称,并为其分配存储单元和预置初值。初值。v 格式:格式: 符号名符号名 DB/DW/DD DB/DW/DD 表达式表达式v 功能:功能:当一个符号名用伪指令当一个符号名用伪指令DBDB、DWDW或或DDDD定义后,定义后,称为称为变量变量。DBDB 变量为字节变量为字节数据类型数据类型(8(8位位) )。DWDW 变量为字变量为字数据类型数据类型(16(16位位) ) 。DD DD 变量为双字变量为双字数据类型数据类型(32(32位位) ) 。4.2.24.2.2 变量定义语句变量定义语句4.2 8

28、086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令v 格式:格式: 符号名符号名 DB/DW/DD DB/DW/DD 表达式表达式v 变量定义后具有如下属性:变量定义后具有如下属性: 字节型、字型、双字型等数据类型。字节型、字型、双字型等数据类型。 分配内存单元。分配内存单元。 存放存放时时低字节数据存放在低地址单元,高字节数据存放在低字节数据存放在低地址单元,高字节数据存放在高地址单元。高地址单元。 变量定义一般在数据段中,故一个变量被定义后,具有段变量定义一般在数据段中,故一个变量被定义后,具有段地址和段内偏移地址属性。地址和段内偏移地址属性。4.2.24.2.2 变量定义语句

29、变量定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令1 1、定义一组数据:、定义一组数据:v 例如:例如: BUFF1 DW 1234H,OABCDH,8EH,-79DH BUFF1 DW 1234H,OABCDH,8EH,-79DH BUFF2 DB 12H,34H,CDH,8EH BUFF2 DB 12H,34H,CDH,8EH MOV AX, BUFF1 MOV AX, BUFF1 MOV BX, BUFF1+2 MOV BX, BUFF1+2 MOV DL, BUFF2 MOV DL, BUFF2 MOV AX, 0000H MOV AX, 0000H

30、MOV BX, 0002H MOV BX, 0002H MOV DL, 0008H MOV DL, 0008H MOV AL, BUFF1 ; MOV AL, BUFF1 ; 类型不匹配类型不匹配 MOV DX, BUFF2 ; MOV DX, BUFF2 ;3412CDAB8E0063F81234CD8E0000H0001H0002H0003H0004H0005H0006H0007H0008H0009H000AH000BHBUFF1BUFF21234H0ABCDH8EH-79DH4.2.24.2.2 变量定义语句变量定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪

31、指令2 2、定义一串字符:、定义一串字符:v 例如:例如: STR DB Welcome! STR DB Welcome!v 每个字符的值为它的每个字符的值为它的ASCIIASCII码值,所以码值,所以 用用DBDB来定义。来定义。字符字符 ASCIIASCII码码 W 57H W 57He 65He 65Hl 6CHl 6CHc 63Hc 63Ho 6FHo 6FHm 6DHm 6DHe 65He 65H! 22H! 22H57656C636F6D6522STRWelcome!4.2.24.2.2 变量定义语句变量定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指

32、令3 3、定义保留存储单元:、定义保留存储单元:v 预留内存单元,但不赋值,以存放运算结果。当没有特定赋预留内存单元,但不赋值,以存放运算结果。当没有特定赋值时,其中有随机值。值时,其中有随机值。 SUM DW ?,? SUM DW ?,? A DB ? A DB ? B DB ? B DB ?4.2.24.2.2 变量定义语句变量定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令4 4、复制操作:、复制操作:v 复制操作符复制操作符 DUP 可以预置重复的数值。可以预置重复的数值。v DUPDUP之前的数字表示重复次数,之前的数字表示重复次数,DUPDUP后括号

33、内位重复的内容后括号内位重复的内容。 ALL_ZERO DB 0,0 ALL_ZERO DB 0,0,0 0,0 0,0 0等效为:等效为: ALL_ZERO DB 5 DUP(0)ALL_ZERO DB 5 DUP(0)例:例: BUFFER DB 10 DUP(?) ; BUFFER DB 10 DUP(?) ;分配分配1010个字节,初值不确定个字节,初值不确定 ALL_ZERO DW 100 DUP(0) ; ALL_ZERO DW 100 DUP(0) ;分配分配100100个字,初值都为个字,初值都为0 0 STRING DB 4 DUP(ABC) ; STRING DB 4 DU

34、P(ABC) ;连续分配连续分配4 4个个ABCABC字符串字符串 4.2.24.2.2 变量定义语句变量定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令5 5、将已定义的地址存入内存单元:、将已定义的地址存入内存单元:v 定义过的标号或用定义过的标号或用PROCPROC过程定义过的过程名,都有段地址和过程定义过的过程名,都有段地址和段内偏移地址属性。若希望将变量、标号或过程名的段地址段内偏移地址属性。若希望将变量、标号或过程名的段地址和偏移地址保存到存储单元,可用下列方式完成:和偏移地址保存到存储单元,可用下列方式完成:v 例如:例如: LIT DD CYCL

35、IT DD CYC CYC: MOV AX, BX CYC: MOV AX, BX ; ;将将CYCCYC的段地址和偏移地址保存到存储单元的段地址和偏移地址保存到存储单元LITLIT开始开始 的的4 4个字节单元中。个字节单元中。4.2.34.2.3 段定义语句段定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令v 一个汇编语言是有若干个一个汇编语言是有若干个逻辑段逻辑段组成。所有的指令、组成。所有的指令、变量均分别放在各个逻辑段中。变量均分别放在各个逻辑段中。段定义语句的用途是段定义语句的用途是在汇编语言源程序中定义逻辑段在汇编语言源程序中定义逻辑段。v 段定义

36、语句可按段来组织和使用存储器。这些语句包段定义语句可按段来组织和使用存储器。这些语句包括:括:SEGMENTSEGMENT、ENDSENDS、ASSUMEASSUME、ORGORG等等。4.2.34.2.3 段定义语句段定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令1 1、段定义语句格式、段定义语句格式v 格式:格式: 段名段名 SEGMENT SEGMENT 定位类型定位类型组合类型组合类型类别类别 段名段名 ENDSENDSv 功能:定义一个逻辑段。功能:定义一个逻辑段。v SEGMENTSEGMENT和和ENDSENDS必须成对使用,它们前面的段名必须必

37、须成对使用,它们前面的段名必须是相同的。是相同的。v SEGMENTSEGMENT后面中括号中的内容为可选项,告诉汇编程后面中括号中的内容为可选项,告诉汇编程序和连接程序如何确定段的边界、如何连接几个程序和连接程序如何确定段的边界、如何连接几个程序模块。序模块。4.2.34.2.3 段定义语句段定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令1 1、段定义语句格式、段定义语句格式v 定位类型:定位类型:定位类型说明段的起始地址应有怎样的边定位类型说明段的起始地址应有怎样的边界值,有以下界值,有以下4 4种。种。类型类型段物理地址段物理地址2020位位意义意义BY

38、TE(BYTE(字节型字节型) )XXXX XXXX XXXX XXXX XXXXXXXX XXXX XXXX XXXX XXXX段可起始于任意地址段可起始于任意地址WORD(WORD(字型字型) )XXXX XXXX XXXX XXXX XXX0XXXX XXXX XXXX XXXX XXX0段可起始于偶地址段可起始于偶地址PARA(PARA(节型节型) )XXXX XXXX XXXX XXXX 0000XXXX XXXX XXXX XXXX 0000段起始地址是段起始地址是1616整数倍整数倍PAGE(PAGE(页型页型) )XXXX XXXX XXXX 0000 0000XXXX XXX

39、X XXXX 0000 0000段起始地址是段起始地址是256256整数倍整数倍4.2.34.2.3 段定义语句段定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令1 1、段定义语句格式、段定义语句格式v 组合类型:组合类型:说明链接不同模块中的同名段时采用的方说明链接不同模块中的同名段时采用的方式,有以下式,有以下6 6种。种。 NONENONE:不组合,该段与其他段逻辑上不发生关系,即使同名,不组合,该段与其他段逻辑上不发生关系,即使同名,各段拥有各自的段基值。组合类型的默认值为各段拥有各自的段基值。组合类型的默认值为NONENONE。 STACKSTACK:

40、本段与其他模块中说明为本段与其他模块中说明为STACKSTACK的同名的堆栈段链接起的同名的堆栈段链接起来,公用一个段地址,形成一个新的逻辑段。同时,系统自动初来,公用一个段地址,形成一个新的逻辑段。同时,系统自动初始化始化SSSS及及SPSP。 PUBLIC PUBLIC:本段与其他模块中说明为本段与其他模块中说明为PUBLICPUBLIC的同名同类别的段链的同名同类别的段链接起来,公用一个段地址,形成一个新的逻辑段,所以偏移量调接起来,公用一个段地址,形成一个新的逻辑段,所以偏移量调整为相对于新逻辑段起始地址的值。整为相对于新逻辑段起始地址的值。4.2.34.2.3 段定义语句段定义语句4

41、.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令1 1、段定义语句格式、段定义语句格式v 组合类型:组合类型:说明链接不同模块中的同名段时采用的方说明链接不同模块中的同名段时采用的方式,有以下式,有以下6 6种。种。 MEMORYMEMORY:与与PUBLICPUBLIC同义,只不过同义,只不过MEMORYMEMORY定义的段装在所有同名定义的段装在所有同名段的最后。若连接时出现多个段的最后。若连接时出现多个MEMORYMEMORY,则最先遇到的段按组合类,则最先遇到的段按组合类型型MEMORYMEMORY处理,其他段组合类型按处理,其他段组合类型按PUBLICPUBLI

42、C处理。处理。 COMMONCOMMON:同名段从同一个内存地址开始装入。所以,各个逻辑同名段从同一个内存地址开始装入。所以,各个逻辑段将发生覆盖。连接以后,该段长度取决于同名段中最长的那个段将发生覆盖。连接以后,该段长度取决于同名段中最长的那个,而内容有效的是最后装入的那个。,而内容有效的是最后装入的那个。 AT exp AT exp:段地址为表达式段地址为表达式expexp的值(长度为的值(长度为1616位)。此项不能用位)。此项不能用于代码段。例如:于代码段。例如:AT 0530HAT 0530H,表示本段从物理地址,表示本段从物理地址0530H0530H开始。开始。4.2.34.2.3

43、 段定义语句段定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令1 1、段定义语句格式、段定义语句格式v 类别:类别:说明链接不同模块中的同名段时采用的方式,说明链接不同模块中的同名段时采用的方式,有以下有以下6 6种。种。 类别名必须用单引号括起来。类别名必须用单引号括起来。 类别的作用是在连接时决定各逻辑段的装入顺序。类别的作用是在连接时决定各逻辑段的装入顺序。 当几个程序模块进行连接时,其中具有相同类别名的段,按出当几个程序模块进行连接时,其中具有相同类别名的段,按出现的先后顺序被装入连续的内存区。现的先后顺序被装入连续的内存区。 没有类别名的段,与其他无类

44、别名的段一起连续装入内存。没有类别名的段,与其他无类别名的段一起连续装入内存。 典型的类型名有:典型的类型名有:“STACKSTACK”,“CODECODE”,“DATADATA”。4.2.34.2.3 段定义语句段定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令2 2、段假设语句、段假设语句ASSUMEASSUMEv 格式:格式: ASSUME ASSUME 段寄存器名:段名段寄存器名:段名 ,段寄存器名:段名,段寄存器名:段名 段寄存器可以是:段寄存器可以是:CSCS、DSDS、ESES、SSSS。 段名为已定义的段。段名为已定义的段。 凡是程序中使用的段,

45、都应说明它与段寄存器凡是程序中使用的段,都应说明它与段寄存器之间的对应关系。之间的对应关系。v 功能:用于明确段与段寄存器的关系。功能:用于明确段与段寄存器的关系。例:例: ASSUME CS: SEGA, DS: SEGB, SS: NOTHINGASSUME CS: SEGA, DS: SEGB, SS: NOTHING4.2.34.2.3 段定义语句段定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令2 2、段假设语句、段假设语句ASSUMEASSUMEv 格式:格式: ASSUME ASSUME 段寄存器名:段名段寄存器名:段名 ,段寄存器名:段名,段寄存

46、器名:段名v 使用说明使用说明: ASSUMEASSUME伪指令只是指示各逻辑段使用段寄存器的情况,并没有伪指令只是指示各逻辑段使用段寄存器的情况,并没有对段寄存器的内容进行赋值。对段寄存器的内容进行赋值。 DSDS、ESES的值必须在程序段中用指令语句进行赋值,而的值必须在程序段中用指令语句进行赋值,而CSCS、SSSS由由系统负责设置,程序中也可对系统负责设置,程序中也可对SSSS进行赋值,但进行赋值,但不允许对不允许对CSCS赋值赋值。4.2.34.2.3 段定义语句段定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令3 3、ORGORG伪指令与地址计数器伪

47、指令与地址计数器v 在汇编程序中,有一个软件计数器在汇编程序中,有一个软件计数器( (LC)LC)地址计数器。在每地址计数器。在每个段定义开始处,它被复位为个段定义开始处,它被复位为0 0。当汇编程序逐行扫描语句时。当汇编程序逐行扫描语句时,用,用LCLC保存当前指令的地址。保存当前指令的地址。v 格式格式1 1: ORG ORG v 格式格式2 2: ORG $+ORG $+表达式表达式v 使用说明使用说明: 强行指定地址计数器强行指定地址计数器LCLC的当前值,在段内改变它以后的代码或的当前值,在段内改变它以后的代码或数据存放的偏移地址。数据存放的偏移地址。 ORGORG语句之后段内所有的

48、语句之后段内所有的代码或数据代码或数据均以表达式(常量)的值均以表达式(常量)的值为起始偏移量连续存放,除非遇到另一个为起始偏移量连续存放,除非遇到另一个ORGORG语句。语句。 此语句本身并不占内存。此语句本身并不占内存。4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令A547C92301560010H0011H0014H0015H0016H001EH001FH0020H47A5H0C956H0123H 例例 MY_DATA SEGMENT ORG 10 DAT1 DW 47A5H ORG 20 DAT2 DW 0C956H ORG $+8 (跳过跳过8个字节的存储区

49、个字节的存储区) DAT3 DW 0123H MY_DATA ENDS16H+8=1EH若省略若省略ORG,则从本段起始地址开始连续,则从本段起始地址开始连续存放存放4.2.34.2.3 段定义语句段定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令4 4、PUBLICPUBLIC和和EXTRNEXTRN伪指令伪指令v 当一个程序由多个模块组成时,必须通过命令将各当一个程序由多个模块组成时,必须通过命令将各模块连接程一个完整的、可执行的程序。程序模块模块连接程一个完整的、可执行的程序。程序模块,是单独编译和汇编的,能够完成某个功能的程序,是单独编译和汇编的,能够完

50、成某个功能的程序,如主程序模块、各种功能的子程序模块。,如主程序模块、各种功能的子程序模块。v 由由PUBLIC PUBLIC 说明的名字是全局的,可以在其他模块中说明的名字是全局的,可以在其他模块中使用,使用,v EXTRNEXTRN表明本模块中使用的名字在别的模块中定义过表明本模块中使用的名字在别的模块中定义过,且类型一致。,且类型一致。v PUBLIC PUBLIC 和和EXTRNEXTRN配对使用。配对使用。4.2.34.2.3 段定义语句段定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令4 4、PUBLICPUBLIC和和EXTRNEXTRN伪指令伪指

51、令(1 1)PUBLICPUBLIC伪指令伪指令v 格式:格式: PUBLIC PUBLIC 名字名字,v 使用说明使用说明: 名字可以是变量、符号常量、标号或过程名。名字可以是变量、符号常量、标号或过程名。 由由PUBLICPUBLIC定义的名字,可以被其他模块引用,即由其定义的名定义的名字,可以被其他模块引用,即由其定义的名字是字是公共名字公共名字,可以被外部模块引用。,可以被外部模块引用。 4.2.34.2.3 段定义语句段定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令4 4、PUBLICPUBLIC和和EXTRNEXTRN伪指令伪指令(1 1)EXTR

52、NEXTRN伪指令伪指令v 格式格式1 1: EXTRN EXTRN 名字名字: :类型类型,v 使用说明使用说明: 名字是在其他模块中已由名字是在其他模块中已由PUBLICPUBLIC所定义。类型指的是名字的类所定义。类型指的是名字的类型,应与原模块中定义的类型一致。可以是:型,应与原模块中定义的类型一致。可以是:u 内存变量型:内存变量型:BYTEBYTE、WORDWORD、DWORDDWORDu 过程型:过程型:NEARNEAR、FARFARu 数值型:数值型:ABSABS 定义本模块中将要引用的外部模块中的定义本模块中将要引用的外部模块中的名字,它们应在各自的名字,它们应在各自的模块中

53、已用模块中已用PUBLICPUBLIC伪指令进行了定义伪指令进行了定义。4.2.44.2.4 过程定义语句过程定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令v 汇编语言中,用过程的定义来实现子程序功能。汇编语言中,用过程的定义来实现子程序功能。v 过程是程序的一部分,它可以被程序调用。每次可调用一个过程过程是程序的一部分,它可以被程序调用。每次可调用一个过程,当过程中的指令执行完后,控制返回调用它的地方。过程的定,当过程中的指令执行完后,控制返回调用它的地方。过程的定义是用过程定义伪指令完成的。义是用过程定义伪指令完成的。v 格式:格式: 过程名过程名 PRO

54、C PROC NEAR / FARNEAR / FAR 过程体过程体 RET RET 过程名过程名 ENDPENDPv 功能:功能:完成过程定义,在过程体中实现过程的操作功能完成过程定义,在过程体中实现过程的操作功能4.2.44.2.4 过程定义语句过程定义语句4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令v 格式:格式: 过程名过程名 PROC PROC NEAR / FARNEAR / FAR 过程体过程体 RET RET 过程名过程名 ENDPENDPv 功能:功能:完成过程定义,在过程体中实现过程的操作功能完成过程定义,在过程体中实现过程的操作功能v 说明:说

55、明: PROCPROC与与ENDPENDP必须成对出现必须成对出现,PROCPROC开始一个过程,开始一个过程,ENDPENDP结束一个结束一个过程。成对的过程。成对的PROCPROC与与ENDPENDP的前面必须有相同的过程名。的前面必须有相同的过程名。 类型取值为:类型取值为:NEARNEAR(为默认值)或(为默认值)或FARFAR,表示该过程是,表示该过程是段内调用段内调用或段间调用或段间调用。 一个过程中,至少有一条过程返回指令一个过程中,至少有一条过程返回指令RETRET,一般放在,一般放在ENDPENDP之前之前。 过程可以嵌套,但不可以交叉。过程可以嵌套,但不可以交叉。COD1S

56、EGMENTASSUME CS: COD1, ; 代码段中的其它语句(主程序)代码段中的其它语句(主程序)SUB1PROC FAR; 名为名为SUB1的的FAR过程开始过程开始 RET; 返回返回SUB1ENDP; SUB1结束结束SUB2PROC ; 名为名为SUB2的的NEAR过程开始过程开始 RET; 返回返回SUB2ENDP; SUB2结束结束; 可能定义的其它过程可能定义的其它过程COD1ENDS; 代码段结束代码段结束4.2 8086 4.2 8086 汇编语言中的伪指令汇编语言中的伪指令4.2.54.2.5 结束语句结束语句4.2 8086 4.2 8086 汇编语言中的伪指令汇

57、编语言中的伪指令v 格式:格式:END END 标号标号 v 功能:功能:表示源程序的结束。表示源程序的结束。v 标号指示程序开始执行的起始地址。如果多个程序模标号指示程序开始执行的起始地址。如果多个程序模块相连接,则只有主程序要使用标号,其他子模块则块相连接,则只有主程序要使用标号,其他子模块则只用只用ENDEND而不必指定标号。而不必指定标号。v END END 是汇编语言源程序中最后一条语句是汇编语言源程序中最后一条语句。DATA DATA SEGMENTSEGMENT; ;定义数据段定义数据段 D1 D1 DB 5 DUP DB 5 DUP(?)(?); ;连续的字节单元连续的字节单元

58、 CC CC EQU $ EQU $D1D1; ;对单元计数对单元计数 SUM SUM DW 0 DW 0; ;为结果保留一个字为结果保留一个字DATA DATA ENDSENDS ; ;数据段定义结束数据段定义结束STACK SEGMENT PARA STACK STACK;定义堆栈段定义堆栈段DB 100 DUP (?)(?);100字节的栈空间字节的栈空间STACK ENDS;堆栈段定义结束堆栈段定义结束CODECODE SEGMENT SEGMENT; ;定义代码段定义代码段ASSUME DS:DATADS:DATA,SS:STACKSS:STACK,CS:CODECS:CODE;对各

59、段进行说明对各段进行说明BEGINBEGIN:MOV AXMOV AX,DATADATA ; DS初始化为初始化为DATADATAMOV DSMOV DS,AXAXLEA SILEA SI,D1D1; ;预置源数据的指针预置源数据的指针例例 多个连续字节单元的累加多个连续字节单元的累加定义存储单定义存储单元的数据元的数据定义堆栈定义堆栈作堆栈用的存作堆栈用的存储单元储单元指令指令段定义语句段定义语句MOV CXMOV CX,CCCC;预置次数预置次数LODS BYTE PTR SILODS BYTE PTR SI;取一个数并修改指针取一个数并修改指针MOV AHMOV AH,0 0;清清AXA

60、X的高字节的高字节CLCCLC;清清CFCF位位BEGINBEGIN:ADC SUMADC SUM,AXAX;累加累加LODS BYTE PTR SILODS BYTE PTR SI;再取数并修改指针再取数并修改指针LOOP BEGINLOOP BEGIN;控制循环控制循环MOV AHMOV AH,4CH4CH;完成,返回完成,返回DOSDOSINT 21HINT 21HCODE CODE ENDSENDS;代码段结束代码段结束ENDENDBEGINBEGIN;整个程序结束整个程序结束段定义段定义汇编程序汇编程序结束结束4.34.3 8086 8086 汇编语言中的运算符汇编语言中的运算符4

温馨提示

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

评论

0/150

提交评论