计算机汇编语言程序设计_第1页
计算机汇编语言程序设计_第2页
计算机汇编语言程序设计_第3页
计算机汇编语言程序设计_第4页
计算机汇编语言程序设计_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章第四章 汇编语言程序设计汇编语言程序设计 第四章第四章 汇编语言程序设计汇编语言程序设计 4.2 4.2 伪指令伪指令4.3 4.3 汇编语言程序的结构汇编语言程序的结构 4.4 4.4 汇编语言程序的开发过程汇编语言程序的开发过程4.5 4.5 汇编语言程序结构设计汇编语言程序结构设计 4.6 4.6 系统功能调用系统功能调用4.7 4.7 汇编语言设计实例汇编语言设计实例4.1 4.1 汇编语言语句汇编语言语句 在了解和熟悉了在了解和熟悉了86系列指令系统的基础上,本章将介绍宏汇编语言程序的结系列指令系统的基础上,本章将介绍宏汇编语言程序的结构,伪指令,以及程序设计的一般过程和各种基

2、本程序结构,然后介绍了系统功构,伪指令,以及程序设计的一般过程和各种基本程序结构,然后介绍了系统功能调用,最后给出大量的编程实例。能调用,最后给出大量的编程实例。 4.1 汇编语言语句汇编语言语句 语句是汇编语言源程序的基本组成单位。一个汇编语语句是汇编语言源程序的基本组成单位。一个汇编语言源程序中有言源程序中有3 3种基本语句:指令语句、伪指令语句和宏指种基本语句:指令语句、伪指令语句和宏指令语句。前两种是最常见、最基本的语句。指令语句和伪指令语句。前两种是最常见、最基本的语句。指令语句和伪指令语句不仅在程序中的功能不同,而且实现其功能的方法和令语句不仅在程序中的功能不同,而且实现其功能的方

3、法和时间也是不同的。时间也是不同的。1 1、指令语句、指令语句 指令语句就是计算机中指令系统的各条指令,每条指指令语句就是计算机中指令系统的各条指令,每条指令语句在汇编时都产生一个供令语句在汇编时都产生一个供CPUCPU执行的机器目标代码。执行的机器目标代码。 计算机中每条指令语句表示一种基本功能,这些基本计算机中每条指令语句表示一种基本功能,这些基本功能是在程序运行期间由计算机硬件来实现的。一条指令语功能是在程序运行期间由计算机硬件来实现的。一条指令语句由四个字段组成,其一般格式如下:句由四个字段组成,其一般格式如下: 标号:标号: 指令助记符指令助记符 操作数操作数 ;注释;注释 一、汇编

4、语言语句种类及其格式一、汇编语言语句种类及其格式2 2、伪指令语句伪指令语句 伪指令语句指示汇编程序在汇编源程序时完成某些工伪指令语句指示汇编程序在汇编源程序时完成某些工作,比如完成数据定义、分配存储区、指示程序结束等。作,比如完成数据定义、分配存储区、指示程序结束等。 伪指令属于汇编控制命令,它所指示的操作是由汇编伪指令属于汇编控制命令,它所指示的操作是由汇编程序在汇编源程序时完成的,在汇编时,它不产生目标代程序在汇编源程序时完成的,在汇编时,它不产生目标代码,在将源程序汇编成目标程序后,它就不复存在了。码,在将源程序汇编成目标程序后,它就不复存在了。 由上可知,伪指令语句与指令语句的主要区

5、别是:伪由上可知,伪指令语句与指令语句的主要区别是:伪指令语句经汇编后不产生机器目标代码,而指令语句经汇指令语句经汇编后不产生机器目标代码,而指令语句经汇编后将产生相应的机器目标代码;伪指令语句所指示的操编后将产生相应的机器目标代码;伪指令语句所指示的操作是在程序汇编时完成的,而指令语句的操作必须在程序作是在程序汇编时完成的,而指令语句的操作必须在程序运行时才能完成。一条伪指令语句也由四个字段组成,其运行时才能完成。一条伪指令语句也由四个字段组成,其一般格式如下:一般格式如下: 符号名符号名 伪指令符操作数伪指令符操作数 ;注释;注释 4.1 汇编语言语句汇编语言语句一、汇编语言语句种类及其格

6、式一、汇编语言语句种类及其格式(1 1)符号名)符号名 符号名在符号名在伪指令语句中是一个可选项,符号名后面没有伪指令语句中是一个可选项,符号名后面没有冒号,符号名可以是常量名、变量名、过程名冒号,符号名可以是常量名、变量名、过程名等。等。(2 2)伪指令符)伪指令符伪指令符指定汇编程序要完成的具体操作,它是伪指令语伪指令符指定汇编程序要完成的具体操作,它是伪指令语句的核心部分,如数据定义伪指令句的核心部分,如数据定义伪指令DBDB、DWDW、DDDD,段定义伪指段定义伪指令令SEGMENTSEGMENT,定义过程伪指令定义过程伪指令PROCPROC等等。等等。(3 3)操作数)操作数 伪指令

7、中的操作数伪指令中的操作数可以是常数、字符串、变量、表达式可以是常数、字符串、变量、表达式,其个数由具体的伪指令决定,各个操作数之间用其个数由具体的伪指令决定,各个操作数之间用“,”分隔。分隔。(4 4)注释)注释 伪指令语句的注释也是可选项,需要时必须以伪指令语句的注释也是可选项,需要时必须以“;”开始。开始。 4.1 汇编语言语句汇编语言语句一、汇编语言语句种类及其格式一、汇编语言语句种类及其格式3 3、标识符、标识符 指令语句中的标号和伪指令语句中的符号名统称为标指令语句中的标号和伪指令语句中的符号名统称为标识符。它们由若干字符组成,标识符的组成规则如下:识符。它们由若干字符组成,标识符

8、的组成规则如下:(1 1)一个标识符由)一个标识符由1 1-3 3个字符组成。个字符组成。(2 2)组成标识符的字符可以是字母()组成标识符的字符可以是字母(A-ZA-Z或或a-za-z)、)、数数字(字(0-90-9)、专用字符()、专用字符(“?”、“”、“ ”、“$ $”、“下划线下划线_ _”)。)。(3 3)除数字外,上述其余字符均可作为标识符的首字符,)除数字外,上述其余字符均可作为标识符的首字符,“”只能作为标识符的首字符。只能作为标识符的首字符。(4 4)不能使用属于系统的专用保留字。)不能使用属于系统的专用保留字。4.1 汇编语言语句汇编语言语句一、汇编语言语句种类及其格式一

9、、汇编语言语句种类及其格式二、汇编语言数据与运算符二、汇编语言数据与运算符标号标号 指令指令 寄存器寄存器 说明程序或语句说明程序或语句变量变量 伪指令伪指令 标号标号 的功能的功能 宏指令宏指令 变量变量 常数常数 表达式表达式源程序的每条语句可表示为:源程序的每条语句可表示为: 名字名字 操作码操作码 操作数操作数 ; 注释注释 4.1 汇编语言语句汇编语言语句1、常量、常量常量是没有任何属性的纯数值,它的值在汇编期间已能完全确定,且在程常量是没有任何属性的纯数值,它的值在汇编期间已能完全确定,且在程序运行中也不会发生变化。常量分为数值常量、字符串常量和符号常量,它序运行中也不会发生变化。

10、常量分为数值常量、字符串常量和符号常量,它主要用于指令语句中的立即数或伪指令语句中给变量赋初值等。主要用于指令语句中的立即数或伪指令语句中给变量赋初值等。1 1)数值常量)数值常量数值常量分为整数和实数。数值常量分为整数和实数。例如:例如:1110001111100011B B ,45693 45693 ,0 0FF2AH FF2AH ,356703356703Q Q都是正确的整数形式,都是正确的整数形式,又如:又如:543.567543.567,45.2345.23,1.21.2E E2 2,45.4E45.4E9 9都是正确的实数形式。都是正确的实数形式。2 2)字符串常量)字符串常量字符

11、串常量是用单引号括起来的一个字符或多个字符。字符串常量以单引字符串常量是用单引号括起来的一个字符或多个字符。字符串常量以单引号中各字符的号中各字符的ASCIIASCII码形式存储在内存中,如码形式存储在内存中,如HH,在内存中就是在内存中就是4141H H,1212就是就是3131H H,32H32H。使用时可在单引号内直接写字符序列,如使用时可在单引号内直接写字符序列,如1212ABAB,也可写也可写字符的字符的ASCIIASCII码,码,ASCIIASCII码之间用逗号分隔(此时不需要用单引号),如码之间用逗号分隔(此时不需要用单引号),如3131H H,32H32H,41H41H,42H

12、42H表示字符串表示字符串1212ABAB。3 3)符号常量符号常量符号常量是指用符号常量是指用EQUEQU伪指令或赋值语句伪指令或赋值语句“=”“=”定义过的符号名,可作操作数定义过的符号名,可作操作数项或在表达式中使用。项或在表达式中使用。4.1 汇编语言语句汇编语言语句二、汇编语言数据与运算符二、汇编语言数据与运算符2 2、变量变量 在汇编语言中,变量是一个数据存储单元的名称,即数在汇编语言中,变量是一个数据存储单元的名称,即数据存放地址的符号表示。它代表存放在某些存储单元的数据,据存放地址的符号表示。它代表存放在某些存储单元的数据,这些数据在程序运行期间随时可以改变。为方便访问变量,这

13、些数据在程序运行期间随时可以改变。为方便访问变量,在程序中通过变量名来使用变量。在程序中通过变量名来使用变量。(1 1)变量的定义变量的定义 变量通常在数据段或附加段中使用数据定义伪指令来定变量通常在数据段或附加段中使用数据定义伪指令来定义,定义变量就是给数据分配存储单元,有时为存储单元赋义,定义变量就是给数据分配存储单元,有时为存储单元赋予一个变量名,并可同时为这些存储单元预置初值。数据定予一个变量名,并可同时为这些存储单元预置初值。数据定义伪指令的格式为:义伪指令的格式为: 变量名变量名 DB(DWDB(DW、DDDD、DQDQ、DT) DT) 表达式表达式1 1,表达式,表达式2 2,4

14、.1 汇编语言语句汇编语言语句二、汇编语言数据与运算符二、汇编语言数据与运算符 其中:变量名是可选项,它仅代表所定义数据存储区第一个单其中:变量名是可选项,它仅代表所定义数据存储区第一个单元的地址;元的地址;DBDB、DWDW、DDDD、DQDQ和和DTDT是伪指令符,具体一条数据定义伪是伪指令符,具体一条数据定义伪指令取指令取5 5种之一。种之一。 表达式表达式1 1,表达式,表达式2 2是给变量或指定的存储单元赋予初值,是给变量或指定的存储单元赋予初值,它们有以下几种形式:它们有以下几种形式: (a a)数值表达式数值表达式 (b b)字符串表达式字符串表达式 (c c)?)?表达式表达式

15、 (d d)地址表达式地址表达式( (只适用于只适用于DWDW和和DDDD这两种数据定义伪指令这两种数据定义伪指令) ) (e e)带带DUPDUP的表达式的表达式(2 2)变量的属性)变量的属性 由于存储器是分段使用的,因而源程序定义的变量具有由于存储器是分段使用的,因而源程序定义的变量具有3 3个属性:个属性:(a a)段属性(段属性(SEGSEG)(b b)偏移属性(偏移属性(OFFSETOFFSET)(c c)类型属性(类型属性(TYPETYPE)二、汇编语言数据与运算符二、汇编语言数据与运算符4.1 汇编语言语句汇编语言语句(3 3)变量的使用变量的使用 定义后的变量,在程序中的引用

16、有两种情况:定义后的变量,在程序中的引用有两种情况:(a a)在指令语句中,采用存储器操作数的几种寻址方式,在指令语句中,采用存储器操作数的几种寻址方式,除寄存器间接寻址方式不使用变量名外,其余各种寻址方除寄存器间接寻址方式不使用变量名外,其余各种寻址方式均可使用变量名。式均可使用变量名。例如,某数据段已定义一变量例如,某数据段已定义一变量ARRAYARRAY: ARRAY DW 5000H ARRAY DW 5000H,4000H4000H (b b)在数据定义伪指令在数据定义伪指令DWDW和和DDDD中,操作数字段可直接引中,操作数字段可直接引用已定义过的变量名。用已定义过的变量名。 如:

17、如: A DB 50HA DB 50H,40H40H B DW A B DW A C DD B C DD B4.1 汇编语言语句汇编语言语句二、汇编语言数据与运算符二、汇编语言数据与运算符3 3、标号、标号 标号是一条指令语句的符号地址,在汇编源程序中,只标号是一条指令语句的符号地址,在汇编源程序中,只有在需要转向一条指令语句时,才为该指令语句设置标号,有在需要转向一条指令语句时,才为该指令语句设置标号,以便在控制转移指令中直接引用这个标号。标号一般在代码以便在控制转移指令中直接引用这个标号。标号一般在代码段中定义和引用。由于标号代表了指令的符号地址,所以标段中定义和引用。由于标号代表了指令的

18、符号地址,所以标号也有号也有3 3个属性:个属性:(a a)段属性(段属性(SEGSEG)。)。标号的段属性是指标号定义所在段的标号的段属性是指标号定义所在段的段首地址。段首地址。(b b)偏移属性(偏移属性(OFFSETOFFSET)。)。标号的偏移属性是指标号所在标号的偏移属性是指标号所在段的段首地址到该标号的字节距离。段的段首地址到该标号的字节距离。(c c)类型属性(类型属性(TYPETYPE)。)。标号的类型属性表示了它的转移标号的类型属性表示了它的转移特性,即该标号是作为段内还是段间转移(或调用)指令的特性,即该标号是作为段内还是段间转移(或调用)指令的目标地址。标号的类型属性有目

19、标地址。标号的类型属性有2 2种:种:NEARNEAR类型和类型和FARFAR类型。类型。4.1 汇编语言语句汇编语言语句二、汇编语言数据与运算符二、汇编语言数据与运算符4 4、表达式和运算符、表达式和运算符汇编语言的指令语句和伪指令语句中,表达式是操作数项汇编语言的指令语句和伪指令语句中,表达式是操作数项的常见形式,表达式是由常量、变量、标号用运算符连接而的常见形式,表达式是由常量、变量、标号用运算符连接而成有意义的式子。表达式分为成有意义的式子。表达式分为数值表达式数值表达式和和地址表达式地址表达式,任,任一表达式的值只计算一次,表达式的计算是在源程序汇编过一表达式的值只计算一次,表达式的

20、计算是在源程序汇编过程中进行的,而不是在程序运行中进行的,汇编程序将表达程中进行的,而不是在程序运行中进行的,汇编程序将表达式计算后得到一个数值或一个地址。式计算后得到一个数值或一个地址。 在在80868086汇编语言中,运算符分为:汇编语言中,运算符分为:算术运算符、逻辑运算算术运算符、逻辑运算符、关系运算符、数值回送运算符、属性运算符和字节分离符、关系运算符、数值回送运算符、属性运算符和字节分离运算符。运算符。4.1 汇编语言语句汇编语言语句二、汇编语言数据与运算符二、汇编语言数据与运算符(1 1)数值表达式)数值表达式 数值表达式是由常量与算术运算符、逻辑运算符或关系运数值表达式是由常量

21、与算术运算符、逻辑运算符或关系运算符构成的有意义的式子。数值表达式在汇编期间进行运算,算符构成的有意义的式子。数值表达式在汇编期间进行运算,运算结果为一数值常量,它只有大小而没有属性。运算结果为一数值常量,它只有大小而没有属性。(2 2)地址表达式)地址表达式 地址表达式是由常量、变量、标号、寄存器(地址表达式是由常量、变量、标号、寄存器(BXBX、BPBP、SISI、DIDI)内容(用寄存器名加方括号表示)和运算符组成的有意义内容(用寄存器名加方括号表示)和运算符组成的有意义的式子。单个的变量、标号、寄存器的内容是地址表达式的特的式子。单个的变量、标号、寄存器的内容是地址表达式的特例。例。

22、地址表达式中可以使用算术运算符中的地址表达式中可以使用算术运算符中的“+”“+”、“-”“-”运算运算符、关系运算符、属性运算符、数值返回运算符和分离运算符。符、关系运算符、属性运算符、数值返回运算符和分离运算符。 在地址表达式中,常用的形式是:变量常量。在地址表达式中,常用的形式是:变量常量。 4.1 汇编语言语句汇编语言语句二、汇编语言数据与运算符二、汇编语言数据与运算符(a a)算术运算符:)算术运算符:+ +,- -,* *,/ /,MOD,SHL,SHRMOD,SHL,SHR。(b b)逻辑运算符:)逻辑运算符:AND,OR,XOR,NOTAND,OR,XOR,NOT。(c c)关系

23、运算符:)关系运算符:EQ,NE,LT,LE,GT,GEEQ,NE,LT,LE,GT,GE。当关系成立时,结果为。当关系成立时,结果为0FFFFH,0FFFFH,当关系不成立时,结果为当关系不成立时,结果为0 0。(d d)数值回送运算符:)数值回送运算符:SEG,OFFSET,TYPE,SIZE,LENGTHSEG,OFFSET,TYPE,SIZE,LENGTH。4.1 汇编语言语句汇编语言语句二、汇编语言数据与运算符二、汇编语言数据与运算符OFFSETOFFSET / /SEGSEG 变量变量 / / 标号标号功能:功能:回送变量或标号的偏址回送变量或标号的偏址 / / 段址段址TYPE

24、TYPE 变量变量 / / 标号标号 / / 常数常数 DB DW DD DF DQ DT NEAR FAR DB DW DD DF DQ DT NEAR FAR 常数常数 1 2 4 6 8 10 -1 -2 01 2 4 6 8 10 -1 -2 0LENGTH LENGTH 变量变量功能:功能:回送由回送由DUPDUP定义的变量的单元数,其它情况回送定义的变量的单元数,其它情况回送1 1SIZE SIZE 变量变量功能:功能:LENGTH LENGTH * * TYPE TYPE(3)表达式运算符)表达式运算符(5 5)属性运算符:)属性运算符:PTR,PTR,段操作符,段操作符,THI

25、STHIS,SHORTSHORT 。类型类型 PTR PTR 表达式表达式 MOV WORD PTR BX, 5MOV WORD PTR BX, 5段操作符段操作符 MOV ES: BX, ALMOV ES: BX, ALSHORT SHORT 标号标号 JMP SHORT NEXTJMP SHORT NEXTTHIS THIS 类型类型 TA EQU THIS BYTETA EQU THIS BYTE TD DW 1234H TD DW 1234H NEXT EQU THIS FAR NEXT EQU THIS FAR MOV AX,2 MOV AX,2(6 6)分离运算符:)分离运算符:L

26、OW,HIGHLOW,HIGH。HIGHHIGH和和LOWLOW CONS EQU 1234HCONS EQU 1234H MOV AH, HIGH CONS MOV AH, HIGH CONS MOV AL, LOW CONS MOV AL, LOW CONS 4.1 汇编语言语句汇编语言语句二、汇编语言数据与运算符二、汇编语言数据与运算符4.2 伪指令伪指令v1 1 数据定义伪指令数据定义伪指令v2 2 符号定义伪指令符号定义伪指令v3 3 段定义伪指令段定义伪指令SEGMENT/ENDSSEGMENT/ENDSv4 4 假定伪指令假定伪指令ASSUMEASSUMEv5 5 定位伪指令定位

27、伪指令ORGORG与地址计数器(与地址计数器($ $)v6 6 过程定义伪指令过程定义伪指令PROC/ENDPPROC/ENDPv7 7 源程序开始和结束伪指令源程序开始和结束伪指令v 常用的数据定义伪指令有常用的数据定义伪指令有DBDB,DWDW,DDDD,DQDQ,DTDT。v 格式:格式: 变量名变量名 数据定义伪指令数据定义伪指令 表达式表达式 , v 功能:功能:定义数据存储区,类型由数据定义伪指令确定,初定义数据存储区,类型由数据定义伪指令确定,初值由表达式给定。值由表达式给定。 - - 0AH0AH 04H04H 10H10H - - 64H64H 00H00H 00H00H 0

28、1H01H FBHFBH FFHFFH - -DATA_BYTE DATA_BYTE DATA_WORD DATA_WORD 例:例:DATA_BYTE DB 10,4,10H,?DATA_WORD DW 100,100H,-5,?1 数据定义伪指令数据定义伪指令4.2 伪指令伪指令例:例:ARRAY DB HELLO DB AB DW AB 48H48H 45H45H 4CH4CH 4CH4CH 4FH4FH 41H41H 42H42H 42H42H 41H41H ARRAY ARRAY 例:例: PAR1 DW 100,200 PAR2 DW 300,400ADDR_TABLE DW PA

29、R1,PAR2VAR DB 100 DUPDUP (?) DB 2 DUPDUP (0,2 DUPDUP(1,2),3)1 数据定义伪指令数据定义伪指令4.2 伪指令伪指令OPER1 DB ?, ?OPER2 DW ?, ? MOV OPER1, 0 ;字节指令 MOV OPER2, 0 ;字指令OPER1 DB 1, 2OPER2 DW 1234H, 5678H MOV AX, OPER1+1 MOV AL, OPER2 类型不匹配 MOV AX, MOV AX, WORD PTRWORD PTR OPER1+1 OPER1+1 MOV AL, MOV AL, BYTE PTRBYTE PT

30、R OPER2 OPER2(AX)=3402H (AL)=34H1 数据定义伪指令数据定义伪指令4.2 伪指令伪指令4.2 伪指令伪指令1) 等价伪指令等价伪指令EQU2) 等号伪指令等号伪指令=3) 定义符号名伪指令定义符号名伪指令LABEL2 符号定义伪指令符号定义伪指令1 1) 等价伪指令等价伪指令EQUEQUv 格式:格式:符号名符号名 EQEQ 表达式表达式v 功能:功能:为常量、表达式及其他各种符号定义一个等价的符为常量、表达式及其他各种符号定义一个等价的符号名,但它不申请存储单元。号名,但它不申请存储单元。v 用途:用途: 用符号表示常量、数值表达式,即定义符号常用符号表示常量、

31、数值表达式,即定义符号常量。使用符号常量可使程序简单明了,增强程序的可读性量。使用符号常量可使程序简单明了,增强程序的可读性和通用性。和通用性。 EQUEQU与属性运算符与属性运算符TRTR或或THISTHIS联合使用,可以给变量或联合使用,可以给变量或标号定义新的类型属性并重新命名,但保持其段偏移地址标号定义新的类型属性并重新命名,但保持其段偏移地址属性不变。属性不变。 利用利用EQUEQU可以用一个符号名替代一个复杂的地址表达式可以用一个符号名替代一个复杂的地址表达式和其他一些符号,如指令助记符、变量名、标号、段名、和其他一些符号,如指令助记符、变量名、标号、段名、寄存器名、宏定义名等。寄

32、存器名、宏定义名等。2 符号定义伪指令符号定义伪指令等价伪指令等价伪指令EQU例如:例如: ALPHA EQU 9BETA EQU ALPHA+18BB EQU BP+84.2 伪指令伪指令v 格式:格式:符号名符号名 = = 表达式表达式v 功能:功能:为常量、表达式及其他各种符号定义一个等价为常量、表达式及其他各种符号定义一个等价的符号名,并能对所定义的符号多次重复定义,且以的符号名,并能对所定义的符号多次重复定义,且以最后一次定义的值为准。最后一次定义的值为准。【例例】定义等价符号名。定义等价符号名。COST = 20COST = 20M M= MOV= MOVLOST = LOST+1

33、0LOST = LOST+10;30LOST30LOSTM M= ADD= ADD;M=ADDM=ADD2 符号定义伪指令符号定义伪指令 等号伪指令等号伪指令=4.2 伪指令伪指令v 格式:格式:变量名或标号变量名或标号 LABELLABEL 类型类型v 功能:功能:定义与原有变量类型不同的新变量或为指令语句定义与原有变量类型不同的新变量或为指令语句定义有指定类型的标号。通常与数据定义伪指令连用,定义有指定类型的标号。通常与数据定义伪指令连用,其功能类似语句其功能类似语句“变量名或标号变量名或标号 EQU THIS EQU THIS 类型类型”。 【例例】定义新类型的变量。定义新类型的变量。

34、DDBUFDDBUF LABEL DWORDLABEL DWORDBUFBUFDBDB 200 DUP 200 DUP(0 0)A LABEL FARA LABEL FARB B: LEALEADXDX,BUFBUF 4.2 伪指令伪指令2 符号定义伪指令定义符号名伪指令符号定义伪指令定义符号名伪指令LABEL 编制一个编制一个8080X86X86汇编语言源程序,段是基础,这有两方汇编语言源程序,段是基础,这有两方面含义:一是必须按段来构造程序,二是在程序执行时,面含义:一是必须按段来构造程序,二是在程序执行时,要凭借四个段寄存器对各个段的存储单元进行访问。要凭借四个段寄存器对各个段的存储单元

35、进行访问。格式:格式:段名段名 SEGMENTSEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段体段体 段名段名 ENDSENDS功能:功能:定义一个逻辑段,指定段的名字和范围,段在内存定义一个逻辑段,指定段的名字和范围,段在内存中的起始位置、段与段之间的连接关系。中的起始位置、段与段之间的连接关系。说明:说明: 段名由用户指定,开始与结束的段名须一致。段名由用户指定,开始与结束的段名须一致。 SEGMENT/ ENDSSEGMENT/ ENDS伪指令把程序分成若干逻辑段。伪指令把程序分成若干逻辑段。 删节号为段体,段体内为指令和伪指令序列。删节号为段体,段体内为指令和伪指令序列

36、。段的长度不超过段的长度不超过64KB64KB。SEGMENTSEGMENT后面的参数是可选后面的参数是可选 项。项。4.2 伪指令伪指令3 段定义伪指令段定义伪指令SEGMENT/END 假定伪指令主要用于指示汇编程序哪些段是当前段以及这些段假定伪指令主要用于指示汇编程序哪些段是当前段以及这些段与段寄存器之间的对应关系。与段寄存器之间的对应关系。v 格式:格式:ASSUME ASSUME 段寄存器:段名段寄存器:段名 ,段寄存器:段名,段寄存器:段名 v 功能:功能:该伪指令告诉汇编程序在汇编时,段寄存器该伪指令告诉汇编程序在汇编时,段寄存器CSCS、DSDS、SSSS和和ESES应具有的符

37、号段基址,以便汇编指令时确定段和建立错误应具有的符号段基址,以便汇编指令时确定段和建立错误信息。但是段寄存器实际值信息。但是段寄存器实际值(CS(CS除外除外) )还要由传送指令在执行程还要由传送指令在执行程序时赋值。序时赋值。该伪指令一般出现在代码段中。该伪指令一般出现在代码段中。【例例】用用ASSUMEASSUME伪指令建立代码段、堆栈段与伪指令建立代码段、堆栈段与CSCS和和SSSS的对应关系。的对应关系。DATA1DATA1 SEGMENTSEGMENTA ADB 1DB 1,2 2,3 3DATA1DATA1 ENDSENDSSTACKSTACK SEGMENT STACKSEGME

38、NT STACKDBDB200 DUP200 DUP(0 0)STACKSTACK ENDSENDSDATA2DATA2 SGEMENTSGEMENTB BDB 123ABCDB 123ABCDATA2DATA2 ENDSENDS4 假定伪指令假定伪指令ASSUME4.2 伪指令伪指令DATA3DATA3SEGMENTSEGMENTC CDB DB ?,?,?,?,?DATA3DATA3ENDSENDSCODECODESEGMENTSEGMENTASSUMEASSUMEDSDS:DATA1DATA1,ESES:DATA2DATA2,CSCS:CODECODE,SSSS:STACKSTACKST

39、ARTSTART:MOVMOVAXAX,DATA1DATA1MOVMOVDSDS,AXAX ;DATA1DSDATA1DSMOVMOVAXAX,DATA3DATA3MOVMOVESES,AXAX ;DATA3ESDATA3ESQ1Q1:MOVMOVALAL,A AQ2Q2:MOVMOVC C,ALALASSUMEASSUMEDSDS:DATA2 DATA2 ;建立;建立DSDS与与 B B段的对应关系段的对应关系MOVMOV AXAX,DATA2DATA2MOVMOV DSDS,AX AX MOVMOV ALAL,B BMOVMOV C C,ALALCODECODEENDS ENDS ENDE

40、ND STARTSTART4.2 伪指令伪指令4 假定伪指令假定伪指令ASSUME5 定位伪指令定位伪指令ORG与地址计数器(与地址计数器($)4.2 伪指令伪指令v 汇编程序在汇编源程序时,每遇到一新段,就为该段设置汇编程序在汇编源程序时,每遇到一新段,就为该段设置一个初值为一个初值为0 0的汇编地址计数器,汇编程序使用汇编地址的汇编地址计数器,汇编程序使用汇编地址计数器保存正在汇编的数据或指令的目标代码在当前段内计数器保存正在汇编的数据或指令的目标代码在当前段内的偏移地址。的偏移地址。v 当前地址计数器的值可用符号当前地址计数器的值可用符号$ $表示,用户可在程序中表示,用户可在程序中直接

41、使用直接使用$ $,表示引用当前汇编地址计数器的值。例如:,表示引用当前汇编地址计数器的值。例如: ARRAY DW 4000HARRAY DW 4000H,5000H5000H,6000H6000HCOUNT EQU COUNT EQU ($ - ARRAY$ - ARRAY)/ 2 / 2 汇编地址计数器的值可以用定位伪指令汇编地址计数器的值可以用定位伪指令ORGORG设置。设置。 v 格式:格式:ORG ORG 数值表达式数值表达式v 功能:功能:将数值表达式的值赋给汇编地址计数器。数将数值表达式的值赋给汇编地址计数器。数值表达式的值须为值表达式的值须为0-655350-65535之间的

42、非负整数。之间的非负整数。 该伪指令把以下语句定义的内存数据或程序,从该伪指令把以下语句定义的内存数据或程序,从表达式指定的起点表达式指定的起点( (偏移地址偏移地址) )开始连续存放,直至开始连续存放,直至遇到新的遇到新的ORGORG指令。指令。【例例】给汇编地址计数器赋值。给汇编地址计数器赋值。DATADATASEGMENT SEGMENT ORGORG1010; 置值为置值为1010VAR1VAR1DW 100HDW 100H,200H200HORGORG+5+5; 置的值为置的值为14+514+5,即为,即为1919VAR2VAR2DB 1DB 1,2 2, +1+1,+2+2N NE

43、QU EQU -VAR2-VAR2 ; ()()=23=23DATADATAENDSENDS5 定位伪指令定位伪指令ORG与地址计数器(与地址计数器($)4.2 伪指令伪指令 在程序设计中,常把具有某种功能的程序段设计成一个在程序设计中,常把具有某种功能的程序段设计成一个过程。过程。8080X86X86宏汇编语言用于过程定义的伪指令的格式为:宏汇编语言用于过程定义的伪指令的格式为:过程名过程名 PROC NEAR PROC NEAR 或或FAR FAR ;过程体过程体 过程名过程名 ENDPENDP 其中过程名是过程入口地址的符号表示,它由程序员指其中过程名是过程入口地址的符号表示,它由程序员

44、指定,且开始处和结束处的过程名一致。过程名同标号一样,定,且开始处和结束处的过程名一致。过程名同标号一样,具有三种属性:段属性、偏移属性和类型属性,类型属性可具有三种属性:段属性、偏移属性和类型属性,类型属性可指定为指定为NEARNEAR或或FARFAR两种。默认时系统约定是两种。默认时系统约定是NEARNEAR。过程体为过。过程体为过程内的指令和伪指令序列。程内的指令和伪指令序列。 定义过程是为实现子程序调用而设的,调用格式为:定义过程是为实现子程序调用而设的,调用格式为: CALLCALL过程名过程名 过程由过程由RETRET指令返回。指令返回。6 6 过程定义伪指令过程定义伪指令PROC

45、/ENDPPROC/ENDP4.2 伪指令伪指令(1 1)源程序开始伪指令)源程序开始伪指令 在源程序开始处可以用在源程序开始处可以用NAMENAME或或TITLETITLE为模块取名字。为模块取名字。 NAMENAME伪指令伪指令 格式格式:NAME NAME 模块名模块名 汇编程序将以给出的汇编程序将以给出的“模块名模块名”作为模块的名字。作为模块的名字。 TITLETITLE伪指令伪指令 如果程序中没有如果程序中没有NAMENAME伪指令,则也可使用伪指令,则也可使用TITLETITLE伪指令。伪指令。 格式:格式:TITLE textTITLE text TITLE TITLE伪指令可

46、指定每一页上打印的标题。同时,若程序伪指令可指定每一页上打印的标题。同时,若程序中没有中没有NAMENAME伪指令,则汇编程序将用伪指令,则汇编程序将用text text 中的前中的前6 6个字符作个字符作为模块名。为模块名。texttext最多可有最多可有6060个字符。个字符。 若程序中既无若程序中既无NAMENAME又无又无TITLETITLE伪指令,则将用源程序名作伪指令,则将用源程序名作为模块名。所以为模块名。所以NAMENAME及及TITLETITLE伪指令并不是必要的,但一般常伪指令并不是必要的,但一般常使用使用TITLETITLE,以便在列表文件中能打印出标题来。以便在列表文件

47、中能打印出标题来。 7 源程序开始和结束伪指令源程序开始和结束伪指令4.2 伪指令伪指令(2 2)源程序结束伪指令源程序结束伪指令格式:格式:END END 地址表达式地址表达式 功能:功能:该语句为源程序的最后一个语句,用以标志整该语句为源程序的最后一个语句,用以标志整个程序的结束,即告诉汇编程序汇编工作到此个程序的结束,即告诉汇编程序汇编工作到此结束。结束。 其中,地址表达式为可选项,若选用地址表达式,其中,地址表达式为可选项,若选用地址表达式,则表示此程序是主程序,它可以单独执行,其地址表达则表示此程序是主程序,它可以单独执行,其地址表达式为该程序的启动地址,即程序开始运行的第一条指令式

48、为该程序的启动地址,即程序开始运行的第一条指令的地址,例如,的地址,例如,“ENDENDSTARTSTART”,此此STARTSTART是第一条指令是第一条指令的标号;若不选用表达式,则说明此程序为一子程序,的标号;若不选用表达式,则说明此程序为一子程序,不能单独运行,只能被其它程序调用。不能单独运行,只能被其它程序调用。 7 源程序开始和结束伪指令源程序开始和结束伪指令4.2 伪指令伪指令4.3 汇编语言程序的结构汇编语言程序的结构 一个汇编源程序是分段的,由若干个段形成一个源一个汇编源程序是分段的,由若干个段形成一个源程序。其中,必不可少的是代码段和堆栈段,堆栈段也程序。其中,必不可少的是

49、代码段和堆栈段,堆栈段也可以不用显示定义,可以直接使用隐式堆栈段,如果程可以不用显示定义,可以直接使用隐式堆栈段,如果程序中需要使用数据存储区,还要定义数据段,必要时还序中需要使用数据存储区,还要定义数据段,必要时还要定义附加段。要定义附加段。 一般情况下,对于不太复杂的程序只一般情况下,对于不太复杂的程序只需要三个段(即数据段、堆栈段和代码段)就可以了,需要三个段(即数据段、堆栈段和代码段)就可以了,而对于复杂的程序,除了使用上述三个段以外还可以使而对于复杂的程序,除了使用上述三个段以外还可以使用多个段,甚至可以使用多个程序模块。用多个段,甚至可以使用多个程序模块。 汇编语言源程序结构通常有

50、两种,它们的区别在于汇编语言源程序结构通常有两种,它们的区别在于代码段中某些部分的编写稍有不同。具体地说,就是用代码段中某些部分的编写稍有不同。具体地说,就是用户程序运行结束后,返回户程序运行结束后,返回DOSDOS的方法上有所不同。的方法上有所不同。完整的段定义格式完整的段定义格式 data segment data segment ; 定义数据段定义数据段 data endsdata ends;-;-extra segment extra segment ; 定义附加段定义附加段 extra endsextra ends;-;-code segment code segment ; 定义代

51、码段定义代码段 assume assume cs:codecs:code, , ds:datads:data, , es:extraes:extrastart: start: movmov ax, data ax, data movmov dsds, ax , ax ; 段地址段地址 段寄存器段寄存器 code endscode ends end start end startPSPPSPDSDSESESSSSSCSCSEXE程序的内存映象图装入模块文件头4.3 汇编语言程序的结构汇编语言程序的结构 1 1、用用INT 21HINT 21H返回返回DOSDOS的程序结构模式的程序结构模式 IN

52、T 21H INT 21H是是DOSDOS系统功能调用,用这种方法返回系统功能调用,用这种方法返回DOSDOS的的程序结构比较简单,我们编写程序常采用此结构,具体程序结构比较简单,我们编写程序常采用此结构,具体编写时只要在用户程序的最后安排两条指令即可,即:编写时只要在用户程序的最后安排两条指令即可,即:MOV AHMOV AH,4CH4CHINT 21HINT 21H2 2、用过程返回、用过程返回DOSDOS的程序结构模式的程序结构模式 采用此种方法返回采用此种方法返回DOSDOS的程序结构,要求的程序结构,要求将用户程序将用户程序定义为一个类型为定义为一个类型为FARFAR的过程的过程,在

53、用户程序的开始处要将,在用户程序的开始处要将DSDS的值压栈,偏移地址的值压栈,偏移地址0 0压栈,在程序的最后安排一条压栈,在程序的最后安排一条RETRET指令。这样当程序运行到指令。这样当程序运行到RETRET指令后便可返回指令后便可返回DOSDOS。4.3 汇编语言程序的结构汇编语言程序的结构 code segmentmain proc far assume start: push ds mov ax, 0 push ax retmain endpcode ends end startcode segmentmain proc far assume start: mov ax,4c00h

54、 int 21hmain endpcode ends end start4.3 汇编语言程序的结构汇编语言程序的结构 4.4 汇编语言程序的开发过程汇编语言程序的开发过程myfile.asm编辑程序编辑程序汇编程序汇编程序链接程序链接程序myfile.crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe1. 源程序的编辑源程序的编辑2. 源程序的汇编源程序的汇编3. 目标文件的链接目标文件的链接4.5 汇编语言程序结构设计汇编语言程序结构设计 在汇编语言程序设计中,程序有顺序、分支、在汇编语言程序设计中,程序有顺序、分支、循环和子程

55、序四种基本结构形式。循环和子程序四种基本结构形式。4.5.1 4.5.1 顺序程序设计顺序程序设计4.5.2 4.5.2 分支程序设计分支程序设计4.5.3 4.5.3 循环程序设计循环程序设计4.5.4 4.5.4 子程序的设计子程序的设计4.5.5 4.5.5 宏指令宏指令 汇编语言程序设计步骤:汇编语言程序设计步骤: (1)(1)分析问题分析问题:已知条件、要解决的问题、功能:已知条件、要解决的问题、功能/ /性能要求等。性能要求等。 (2)(2)建立数学模型建立数学模型:把问题数学化、公式化,便于计算机处理。:把问题数学化、公式化,便于计算机处理。 (3)(3)确定算法确定算法:简单、

56、速度快、精度高、代码量小、编程容易。:简单、速度快、精度高、代码量小、编程容易。 (4)(4)绘制程序流程图绘制程序流程图:用箭头、框图、菱形图等表示程序结构。:用箭头、框图、菱形图等表示程序结构。 (5)(5)内存空间分配内存空间分配:为程序或数据分配内存空间。:为程序或数据分配内存空间。 (6)(6)编制程序与静态检查编制程序与静态检查:程序结构层次简单、清楚、易懂。:程序结构层次简单、清楚、易懂。 (7)(7)程序调试程序调试:利用调试软件:利用调试软件DEBUGDEBUG进行调试。进行调试。汇编语言程序设计的特点:汇编语言程序设计的特点: (1)(1)算法要分解至算法要分解至指令级指令

57、级;高级语言为;高级语言为语句级语句级。 (2)(2)要详细考虑要详细考虑内存空间分配内存空间分配问题:任何一个变量、一条指令问题:任何一个变量、一条指令都要明确其存储位置。都要明确其存储位置。4.5 汇编语言程序结构设计汇编语言程序结构设计 顺序程序设计也称为简单程序设计,这种结顺序程序设计也称为简单程序设计,这种结构的程序不使用分支、循环结构,程序本身的逻构的程序不使用分支、循环结构,程序本身的逻辑非常简单,所以只能完成一些简单操作。其特辑非常简单,所以只能完成一些简单操作。其特点是程序顺序执行,由前向后逐条执行指令。点是程序顺序执行,由前向后逐条执行指令。【例例】试编写一程序计算下列表达

58、式的值。试编写一程序计算下列表达式的值。= =(v-v-(* *+ +-540-540)/x/x式中式中x x、v v均为有符号字数据。均为有符号字数据。设、的值存放在字变量、设、的值存放在字变量、V V中,结果存放在双字变量之中,程序的流程图中,结果存放在双字变量之中,程序的流程图如图所示。如图所示。4.5.1 顺序程序设计顺序程序设计4.5.1 顺序程序设计顺序程序设计顺序运算程序流程图顺序运算程序流程图源程序如下:源程序如下:DATADATASEGMENTSEGMENTX XDWDW200200Y YDWDW100100Z ZDWDW30003000V VDWDW1000010000W

59、WDWDW2 DUP2 DUP(?)(?)DATADATAENDSENDSSTACKSTACKSEGMENT STACKSEGMENT STACK DB 200 DUP DB 200 DUP(0 0)STACKSTACKENDSENDSCODECODESEGMENTSEGMENTASSUME DSASSUME DS:DATADATA,CSCS:CODECODE,SSSS:STACKSTACKSTARTSTART:MOVMOVAXAX,DATADATAMOVMOV DSDS,AXAX ;DATAAXDATAAXMOVMOV AXAX,X X IMULIMUL Y Y;(X X)* *(Y Y)D

60、XDX:AXAXMOVMOV CXCX,AXAXMOVMOV BXBX,DXDX ;(;(DXDX:AXAX) (BXBX:CXCX)MOVMOV AXAX,Z ZCWDCWD;(Z Z)符号扩展符号扩展ADDADD CXCX,AXAXADCADC BXBX,DXDX ;(;(BXBX:CXCX)+ + (DXDX:AXAX)(BXBX:CXCX)SUBSUB CXCX,540540SBBSBB BXBX,0 0;(;(BXBX:CXCX)-540-540 (BXBX:CXCX)MOVMOV AXAX,V V CWDCWD;(V V)符号扩展符号扩展SUBSUB AXAX,CXCXSBBSBB

温馨提示

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

评论

0/150

提交评论