四章汇编语言程序设计.ppt

上传人:豆**** 文档编号:77602952 上传时间:2023-03-15 格式:PPT 页数:98 大小:1.46MB
返回 下载 相关 举报
四章汇编语言程序设计.ppt_第1页
第1页 / 共98页
四章汇编语言程序设计.ppt_第2页
第2页 / 共98页
点击查看更多>>
资源描述

《四章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《四章汇编语言程序设计.ppt(98页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、四章汇编语言程序设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望第四章第四章 汇编语言程序设计汇编语言程序设计 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 汇编语言语句汇编语言语句 在了解和熟悉了在了解和熟悉

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

3、句。前两种是最常见、最基本的语句。指令语句和伪指令语句不仅在程序中的功能不同,而且实现其功能的方法和时语句不仅在程序中的功能不同,而且实现其功能的方法和时间也是不同的。间也是不同的。1 1、指令语句、指令语句 指令语句就是计算机中指令系统的各条指令,每条指令指令语句就是计算机中指令系统的各条指令,每条指令语句在汇编时都产生一个供语句在汇编时都产生一个供CPUCPU执行的机器目标代码。执行的机器目标代码。计算机中每条指令语句表示一种基本功能,这些基本功计算机中每条指令语句表示一种基本功能,这些基本功能是在程序运行期间由计算机硬件来实现的。一条指令语句能是在程序运行期间由计算机硬件来实现的。一条指

4、令语句由四个字段组成,其一般格式如下:由四个字段组成,其一般格式如下:标号:标号:指令助记符指令助记符 操作数操作数 ;注释;注释 一、汇编语言语句种类及其格式一、汇编语言语句种类及其格式2 2、伪指令语句伪指令语句 伪指令语句指示汇编程序在汇编源程序时完成某些工伪指令语句指示汇编程序在汇编源程序时完成某些工作,比如完成数据定义、分配存储区、指示程序结束等。作,比如完成数据定义、分配存储区、指示程序结束等。伪伪指指令令属属于于汇汇编编控控制制命命令令,它它所所指指示示的的操操作作是是由由汇汇编编程程序序在在汇汇编编源源程程序序时时完完成成的的,在在汇汇编编时时,它它不不产产生生目目标标代代码,

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

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

7、NTSEGMENT,定义过程伪指令定义过程伪指令PROCPROC等等。等等。(3 3)操作数)操作数 伪伪指指令令中中的的操操作作数数可可以以是是常常数数、字字符符串串、变变量量、表表达达式式,其个数由具体的伪指令决定,各个操作数之间用其个数由具体的伪指令决定,各个操作数之间用“,”分隔。分隔。(4 4)注释)注释 伪指令语句的注释也是可选项,需要时必须以伪指令语句的注释也是可选项,需要时必须以“;”开始。开始。4.1 汇编语言语句汇编语言语句一、汇编语言语句种类及其格式一、汇编语言语句种类及其格式3 3、标识符、标识符 指指令令语语句句中中的的标标号号和和伪伪指指令令语语句句中中的的符符号号

8、名名统统称称为为标标识符。它们由若干字符组成,标识符的组成规则如下:识符。它们由若干字符组成,标识符的组成规则如下:(1 1)一个标识符由)一个标识符由1-31-3个字符组成。个字符组成。(2 2)组组成成标标识识符符的的字字符符可可以以是是字字母母(A-ZA-Z或或a-za-z)、数数字字(0-90-9)、专专用用字字符符(“?”、“”、“”、“$”、“下划线下划线_ _”)。)。(3 3)除除数数字字外外,上上述述其其余余字字符符均均可可作作为为标标识识符符的的首首字字符符,“”只能作为标识符的首字符。只能作为标识符的首字符。(4 4)不能使用属于系统的专用保留字。)不能使用属于系统的专用

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

10、常量分为数值常量、字符串常量和符号常量,它主序运行中也不会发生变化。常量分为数值常量、字符串常量和符号常量,它主要用于指令语句中的立即数或伪指令语句中给变量赋初值等。要用于指令语句中的立即数或伪指令语句中给变量赋初值等。1 1)数值常量)数值常量数值常量分为整数和实数。数值常量分为整数和实数。例如:例如:1110001111100011B B,45693 45693,0 0FF2AH FF2AH,356703356703Q Q都是正确的整数形式,都是正确的整数形式,又如:又如:543.567543.567,45.2345.23,1.21.2E2E2,45.4E945.4E9都是正确的实数形式。

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

12、),如3131H H,32H32H,41H41H,42H42H表示字符串表示字符串1212ABAB。3 3)符号常量符号常量符号常量是指用符号常量是指用EQUEQU伪指令或赋值语句伪指令或赋值语句“=”定义过的符号名,可作操作数定义过的符号名,可作操作数项或在表达式中使用。项或在表达式中使用。4.1 汇编语言语句汇编语言语句二、汇编语言数据与运算符二、汇编语言数据与运算符2 2、变量、变量 在在汇汇编编语语言言中中,变变量量是是一一个个数数据据存存储储单单元元的的名名称称,即即数数据据存存放放地地址址的的符符号号表表示示。它它代代表表存存放放在在某某些些存存储储单单元元的的数数据据,这这些些数

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

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

15、 c)?)?表达式表达式 (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)。标标号号的的类类型型属属性性表表示示了了它它的的转转移移特特性性,即即该该标标号号是是作作为为段段内内还还是是段段间间转转移移(或或调调用用)指指令令的的目标地址。标号的类型属性有目标地址。标号的类型属性有2

19、 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)关系运算符:)关系运算符:EQ,NE,LT,LE,GT,GEEQ,NE,LT,LE,GT,GE。当关系成立时,结果为。当

23、关系成立时,结果为0FFFFH,0FFFFH,当关系不成立时,结果为当关系不成立时,结果为0 0。(d d)数值回送运算符:)数值回送运算符:SEG,OFFSET,TYPE,SIZE,LENGTHSEG,OFFSET,TYPE,SIZE,LENGTH。4.1 汇编语言语句汇编语言语句二、汇编语言数据与运算符二、汇编语言数据与运算符OFFSETOFFSET/SEGSEG 变量变量 /标号标号功能:功能:回送变量或标号的偏址回送变量或标号的偏址 /段址段址TYPE TYPE 变量变量 /标号标号 /常数常数 DB DW DD DF DQ DT NEAR FAR DB DW DD DF DQ DT

24、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*TYPELENGTH*TYPE(3)表达式运算符)表达式运算符(5 5)属性运算符:)属性运算符:PTR,PTR,段操作符,段操作符,THISTHIS,SHORTSHORT 。类型类型 PTR PTR 表达式表达式 MOV WORD PTR BX,5MOV WORD PTR BX,5段操作符段操

25、作符 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)分离运算符:)分离运算符:LOW,HIGHLOW,HIGH。HIGHHIGH和和LOWLOW CONS EQU 1234HCONS EQU 1234H MOV AH,HIGH CONS MOV A

26、H,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 定位伪指令定位伪指令ORGORG与地址计数器(与地址计数器($)v6 6 过程定义伪指令过程定义伪指令PROC/ENDPPROC/ENDPv7 7 源程序开始和结束伪指令源程序开始和结束伪指

27、令v常用的数据定义伪指令有常用的数据定义伪指令有DBDB,DWDW,DDDD,DQDQ,DTDT。v格式:格式:变量名变量名 数据定义伪指令数据定义伪指令 表达式表达式,v功能:功能:定义数据存储区,类型由数据定义伪指令确定,初定义数据存储区,类型由数据定义伪指令确定,初值由表达式给定。值由表达式给定。-0AH0AH 04H04H 10H10H -64H64H 00H00H 00H00H 01H01H FBHFBH FFHFFH -DATA_BYTE DATA_BYTE DATA_WORD DATA_WORD 例:例:DATA_BYTE DB 10,4,10H,?DATA_WORD DW 10

28、0,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 PAR1,PAR2VAR DB 100 DUPDUP(?)DB 2 DUPDUP(0,2 DUPDUP(1,2),3)1数据定义伪指令数据定义伪指令4.2 伪指令伪指令OPER1 DB?,?OPER2 DW?,?MOV

29、 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 PTR OPER2 OPER2(AX)=3402H (AL)=34H1数据定义伪指令数据定义伪指令4.2 伪指令伪指令4.2 伪指令伪指令1)等价伪指令等价伪指令EQU2)等号伪指令等号伪指令=3)定义符号名伪指令定义符号名伪指令LABEL2符号定义伪指令

30、符号定义伪指令1 1)等价伪指令等价伪指令EQUEQUv格式:格式:符号名符号名 EQEQ 表达式表达式v功功能能:为为常常量量、表表达达式式及及其其他他各各种种符符号号定定义义一一个个等等价价的的符符号名,但它不申请存储单元。号名,但它不申请存储单元。v用用途途:用用符符号号表表示示常常量量、数数值值表表达达式式,即即定定义义符符号号常常量量。使使用用符符号号常常量量可可使使程程序序简简单单明明了了,增增强强程程序序的的可可读读性性和通用性。和通用性。EQUEQU与与属属性性运运算算符符TRTR或或THISTHIS联联合合使使用用,可可以以给给变变量量或或标标号号定定义义新新的的类类型型属属

31、性性并并重重新新命命名名,但但保保持持其其段段偏偏移移地地址址属性不变。属性不变。利用利用EQUEQU可以用一个符号名替代一个复杂的地址表达式可以用一个符号名替代一个复杂的地址表达式和其他一些符号,如指令助记符、变量名、标号、段名、和其他一些符号,如指令助记符、变量名、标号、段名、寄存器名、宏定义名等。寄存器名、宏定义名等。2符号定义伪指令符号定义伪指令等价伪指令等价伪指令EQU例如:例如:ALPHAEQU9BETAEQUALPHA+18BBEQUBP+84.2 伪指令伪指令v格式:格式:符号名符号名 =表达式表达式v功功能能:为为常常量量、表表达达式式及及其其他他各各种种符符号号定定义义一一

32、个个等等价价的的符符号号名名,并并能能对对所所定定义义的的符符号号多多次次重重复复定定义义,且且以以最后一次定义的值为准。最后一次定义的值为准。【例例】定义等价符号名。定义等价符号名。COST=20COST=20M M=MOV=MOVLOST=LOST+10LOST=LOST+10;30LOST30LOSTM M=ADD=ADD;M=ADDM=ADD2符号定义伪指令符号定义伪指令等号伪指令等号伪指令=4.2 伪指令伪指令v格式:格式:变量名或标号变量名或标号 LABELLABEL 类型类型v功功能能:定定义义与与原原有有变变量量类类型型不不同同的的新新变变量量或或为为指指令令语语句句定定义义有

33、有指指定定类类型型的的标标号号。通通常常与与数数据据定定义义伪伪指指令令连连用用,其其功功能类似语句能类似语句“变量名或标号变量名或标号 EQU THIS EQU THIS 类型类型”。【例例】定义新类型的变量。定义新类型的变量。DDBUFDDBUF LABEL DWORDLABEL DWORDBUFBUFDBDB 200 DUP 200 DUP(0 0)A LABEL FARA LABEL FARB B:LEALEADXDX,BUFBUF 4.2 伪指令伪指令2符号定义伪指令符号定义伪指令定义符号名伪指令定义符号名伪指令LABEL 编编制制一一个个8080X86X86汇汇编编语语言言源源程程

34、序序,段段是是基基础础,这这有有两两方方面面含含义义:一一是是必必须须按按段段来来构构造造程程序序,二二是是在在程程序序执执行行时时,要凭借四个段寄存器对各个段的存储单元进行访问。要凭借四个段寄存器对各个段的存储单元进行访问。格格式式:段段名名 SEGMENTSEGMENT 定定位位类类型型 组组合合类类型型 类类别别 段体段体 段名段名 ENDSENDS功能:功能:定义一个逻辑段,指定段的名字和范围,段在内存定义一个逻辑段,指定段的名字和范围,段在内存中的起始位置、段与段之间的连接关系。中的起始位置、段与段之间的连接关系。说明:说明:段名由用户指定,开始与结束的段名须一致。段名由用户指定,开

35、始与结束的段名须一致。SEGMENT/ENDSSEGMENT/ENDS伪指令把程序分成若干逻辑段。伪指令把程序分成若干逻辑段。删节号为段体,段体内为指令和伪指令序列。删节号为段体,段体内为指令和伪指令序列。段的长度不超过段的长度不超过64KB64KB。SEGMENTSEGMENT后面的参数是可选后面的参数是可选 项。项。4.2 伪指令伪指令3段定义伪指令段定义伪指令SEGMENT/END 假定伪指令主要用于指示汇编程序哪些段是当前段以及这些段假定伪指令主要用于指示汇编程序哪些段是当前段以及这些段与段寄存器之间的对应关系。与段寄存器之间的对应关系。v格式:格式:ASSUME ASSUME 段寄存

36、器:段名段寄存器:段名 ,段寄存器:段名,段寄存器:段名 v功功能能:该该伪伪指指令令告告诉诉汇汇编编程程序序在在汇汇编编时时,段段寄寄存存器器CSCS、DSDS、SSSS和和ESES应应具具有有的的符符号号段段基基址址,以以便便汇汇编编指指令令时时确确定定段段和和建建立立错错误误信信息息。但但是是段段寄寄存存器器实实际际值值(CS(CS除除外外)还还要要由由传传送送指指令令在在执执行行程程序序时时赋赋值值。该伪指令一般出现在代码段中。该伪指令一般出现在代码段中。【例例】用用ASSUMEASSUME伪指令建立代码段、堆栈段与伪指令建立代码段、堆栈段与CSCS和和SSSS的对应关系。的对应关系。

37、DATA1DATA1 SEGMENTSEGMENTA ADB 1DB 1,2 2,3 3DATA1DATA1 ENDSENDSSTACKSTACK SEGMENT STACKSEGMENT STACKDBDB200 DUP200 DUP(0 0)STACKSTACK ENDSENDSDATA2DATA2 SGEMENTSGEMENTB BDB DB 123ABC123ABCDATA2DATA2 ENDSENDS4假定伪指令假定伪指令ASSUME4.2 伪指令伪指令DATA3DATA3SEGMENTSEGMENTC CDB DB?,?,?,?,?DATA3DATA3ENDSENDSCODECOD

38、ESEGMENTSEGMENTASSUMEASSUMEDSDS:DATA1DATA1,ESES:DATA2DATA2,CSCS:CODECODE,SSSS:STACKSTACKSTARTSTART:MOVMOVAXAX,DATA1DATA1MOVMOVDSDS,AXAX;DATA1DSDATA1DSMOVMOVAXAX,DATA3DATA3MOVMOVESES,AXAX;DATA3ESDATA3ESQ1Q1:MOVMOVALAL,A AQ2Q2:MOVMOVC C,ALALASSUMEASSUMEDSDS:DATA2 DATA2 ;建立;建立DSDS与与 B B段的对应关系段的对应关系MOVM

39、OV AXAX,DATA2DATA2MOVMOV DSDS,AX AX MOVMOV ALAL,B BMOVMOV C C,ALALCODECODEENDS ENDS ENDEND STARTSTART4.2 伪指令伪指令4假定伪指令假定伪指令ASSUME5定位伪指令定位伪指令ORG与地址计数器(与地址计数器($)4.2 伪指令伪指令v汇编程序在汇编源程序时,每遇到一新段,就为该段设置汇编程序在汇编源程序时,每遇到一新段,就为该段设置一个初值为一个初值为0 0的汇编地址计数器,汇编程序使用汇编地址的汇编地址计数器,汇编程序使用汇编地址计数器保存正在汇编的数据或指令的目标代码在当前段内计数器保存

40、正在汇编的数据或指令的目标代码在当前段内的偏移地址。的偏移地址。v 当前地址计数器的值可用符号当前地址计数器的值可用符号$表示,用户可在程序中表示,用户可在程序中直接使用直接使用$,表示引用当前汇编地址计数器的值。例如:,表示引用当前汇编地址计数器的值。例如:ARRAY DW 4000HARRAY DW 4000H,5000H5000H,6000H6000HCOUNT EQU COUNT EQU ($-ARRAY$-ARRAY)/2 /2 汇编地址计数器的值可以用定位伪指令汇编地址计数器的值可以用定位伪指令ORGORG设置。设置。v格式:格式:ORG ORG 数值表达式数值表达式v功功能能:将

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

42、的值为置的值为14+514+5,即为,即为1919VAR2VAR2DB 1DB 1,2 2,+1+1,+2+2N NEQU EQU-VAR2-VAR2;()()=23=23DATADATAENDSENDS5定位伪指令定位伪指令ORG与地址计数器(与地址计数器($)4.2 伪指令伪指令 在在程程序序设设计计中中,常常把把具具有有某某种种功功能能的的程程序序段段设设计计成成一一个个过过程。程。8080X86X86宏汇编语言用于过程定义的伪指令的格式为:宏汇编语言用于过程定义的伪指令的格式为:过程名过程名 PROC NEAR PROC NEAR 或或FAR FAR ;过程体过程体 过程名过程名 EN

43、DPENDP 其其中中过过程程名名是是过过程程入入口口地地址址的的符符号号表表示示,它它由由程程序序员员指指定定,且且开开始始处处和和结结束束处处的的过过程程名名一一致致。过过程程名名同同标标号号一一样样,具具有有三三种种属属性性:段段属属性性、偏偏移移属属性性和和类类型型属属性性,类类型型属属性性可可指指定定为为NEARNEAR或或FARFAR两两种种。默默认认时时系系统统约约定定是是NEARNEAR。过过程程体体为为过过程程内内的的指令和伪指令序列。指令和伪指令序列。定义过程是为实现子程序调用而设的,调用格式为:定义过程是为实现子程序调用而设的,调用格式为:CALLCALL过程名过程名 过

44、程由过程由RETRET指令返回。指令返回。6 6 过程定义伪指令过程定义伪指令PROC/ENDPPROC/ENDP4.2 伪指令伪指令(1 1)源程序开始伪指令)源程序开始伪指令 在源程序开始处可以用在源程序开始处可以用NAMENAME或或TITLETITLE为模块取名字。为模块取名字。NAMENAME伪指令伪指令 格式格式:NAME NAME 模块名模块名 汇编程序将以给出的汇编程序将以给出的“模块名模块名”作为模块的名字。作为模块的名字。TITLETITLE伪指令伪指令 如果程序中没有如果程序中没有NAMENAME伪指令,则也可使用伪指令,则也可使用TITLETITLE伪指令。伪指令。格式

45、:格式:TITLE textTITLE text TITLETITLE伪伪指指令令可可指指定定每每一一页页上上打打印印的的标标题题。同同时时,若若程程序序中中没没有有NAMENAME伪伪指指令令,则则汇汇编编程程序序将将用用text text 中中的的前前6 6个个字字符符作作为模块名。为模块名。texttext最多可有最多可有6060个字符。个字符。若若程程序序中中既既无无NAMENAME又又无无TITLETITLE伪伪指指令令,则则将将用用源源程程序序名名作作为为模模块块名名。所所以以NAMENAME及及TITLETITLE伪伪指指令令并并不不是是必必要要的的,但但一一般般常常使用使用TI

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

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

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

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

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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁