微机系统与接口:第四章 汇编语言程序设计_

上传人:新** 文档编号:570325758 上传时间:2024-08-03 格式:PPT 页数:113 大小:727.50KB
返回 下载 相关 举报
微机系统与接口:第四章 汇编语言程序设计__第1页
第1页 / 共113页
微机系统与接口:第四章 汇编语言程序设计__第2页
第2页 / 共113页
微机系统与接口:第四章 汇编语言程序设计__第3页
第3页 / 共113页
微机系统与接口:第四章 汇编语言程序设计__第4页
第4页 / 共113页
微机系统与接口:第四章 汇编语言程序设计__第5页
第5页 / 共113页
点击查看更多>>
资源描述

《微机系统与接口:第四章 汇编语言程序设计_》由会员分享,可在线阅读,更多相关《微机系统与接口:第四章 汇编语言程序设计_(113页珍藏版)》请在金锄头文库上搜索。

1、第四章第四章8086/8088汇编语言汇编语言4.1程序设计语言概述程序设计语言概述4.28086/8088汇编语言的基本语法汇编语言的基本语法4.38086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法4.1程序设计语言概述程序设计语言概述一、机器语言一、机器语言机器语言机器语言是由是由0、1二进制代码书写和存储的指二进制代码书写和存储的指令与数据。令与数据。二、汇编语言二、汇编语言汇编语言汇编语言是用指令的助记符、符号地址、标号是用指令的助记符、符号地址、标号等书写程序的语言,简称符号语言。等书写程序的语言,简称符号语言。三、高级语言三、高级语言高级语言高级语言是脱离具体机器的

2、通用语言,不依赖是脱离具体机器的通用语言,不依赖于特定计算机的结构和指令系统。于特定计算机的结构和指令系统。4.28086/8088汇编语言的基本语法汇编语言的基本语法一、汇编语言语句一、汇编语言语句1、语句的种类、语句的种类在在8086/8088汇编语言中,有三种基本语句:汇编语言中,有三种基本语句:指令语句、伪指令语句和宏指令语句。指令语句、伪指令语句和宏指令语句。指令语句是一种执行性语句,它在汇编时,指令语句是一种执行性语句,它在汇编时,汇编程序将为之产生对应的机器目标代码。汇编程序将为之产生对应的机器目标代码。伪指令语句伪指令语句是一种说明性语句,是一种说明性语句,它在汇编时只为汇编程

3、序提供进行汇它在汇编时只为汇编程序提供进行汇编所需要的有关信息,而本身不生成编所需要的有关信息,而本身不生成目标代码。目标代码。宏指令宏指令是以某个宏名字定义的一是以某个宏名字定义的一段指令程序,在汇编时,凡有宏指令段指令程序,在汇编时,凡有宏指令的地方都将用相应的指令序列的目标的地方都将用相应的指令序列的目标代码插入。宏指令语句是一般性指令代码插入。宏指令语句是一般性指令语句的扩展。语句的扩展。2、语句格式、语句格式(1)指令语句的格式)指令语句的格式标号:标号:前缀前缀指令助记符指令助记符操作数表操作数表;注;注释释其中,其中,表示可以任选的部分;操作数表是表示可以任选的部分;操作数表是由

4、逗号分隔开的多个操作数。由逗号分隔开的多个操作数。(2)伪指令语句的格式)伪指令语句的格式名字名字伪操作命令伪操作命令操作数表操作数表;注释;注释注意,注意,名字的后面没有冒号名字的后面没有冒号,这是伪,这是伪指令语句和指令语句在格式的指令语句和指令语句在格式的主要区别。主要区别。实实例例:求求从从1开开始始连连续续50个个奇奇数数之之和和,并并将将结结果果存存于于SUM存储单元中。存储单元中。DATASEGMENT;定义数据段,定义数据段,DATA为段名为段名SUM DW0;由变量名由变量名SUM指定的内存单指定的内存单元定义为一个字,初值为元定义为一个字,初值为0DATAENDS;定义数据

5、段结束定义数据段结束STACKSEGMENT;定义堆栈段,定义堆栈段,STACK为段名为段名DB200DUP(0);定义堆栈段为定义堆栈段为200个字节的个字节的连续存储区,每个字节值为连续存储区,每个字节值为0STACKENDS;定义堆栈段结束定义堆栈段结束CODESEGMENT;定义代码段,定义代码段,CODE为段名为段名ASSUMEDS:DATA,SS;STACK,CS:CODESTART:MOVAX,DATA;将将DS初始化为数据初始化为数据段首址段首址DATAMOVDS,AXMOVCX,50;CX置入循环初值。置入循环初值。MOVAX,0MOVBX,1NEXT:ADDAX,BXINC

6、BXINCBXLOOPNEXTMOVSUM,AXMOVAH,4CH ;DOS功能调用,功能调用,INT21H;结束程序,并返回;结束程序,并返回DOSCODEENDS;代码段结束代码段结束ENDSTART;整个程序汇编结束整个程序汇编结束(二)(二)指令语句指令语句1、标号、标号标号表示指令地址,是指令的符号地址。标号表示指令地址,是指令的符号地址。通常,通常,“标号标号”只在循环、转移和调用指令只在循环、转移和调用指令中使用。中使用。标号用一标识符定义,即以字母开头,由字标号用一标识符定义,即以字母开头,由字母、数字、特殊字符组成的字符串表示。标号的母、数字、特殊字符组成的字符串表示。标号的

7、最大长度一般不超过最大长度一般不超过31个字符,除宏指令外,标个字符,除宏指令外,标号不能与保留字相同。号不能与保留字相同。2 2 2 2、前缀、前缀、前缀、前缀8086/80888086/8088中有些特殊指令中有些特殊指令中有些特殊指令中有些特殊指令, ,它们常作为前缀同其它们常作为前缀同其它们常作为前缀同其它们常作为前缀同其他指令配合使用他指令配合使用他指令配合使用他指令配合使用, ,例如例如例如例如 串操作指令的重复前缀(串操作指令的重复前缀(串操作指令的重复前缀(串操作指令的重复前缀(REPREP、REPE/REPZREPE/REPZ、REPNE/REPNZ),REPNE/REPNZ

8、),以及总线封锁指令以及总线封锁指令以及总线封锁指令以及总线封锁指令LOCKLOCK等等等等, ,都是前缀。都是前缀。都是前缀。都是前缀。3、指令助记符、指令助记符执行性指令中的执行性指令中的指令助记符指令助记符主要为主要为8086/8088CPU指令系统中的指令助记符。指令系统中的指令助记符。4、操作数、操作数8086、8088汇编语言中的操作数有如下几种形式:汇编语言中的操作数有如下几种形式:(1)立即操作数)立即操作数(2)寄存器操作数)寄存器操作数(3)存储器操作数)存储器操作数(可可“段超越段超越”)5、各种寻址方式下操作数的表达式、各种寻址方式下操作数的表达式(1)常量与数值表达式

9、)常量与数值表达式1)常量是指那些在汇编过程中已经有确定数值的)常量是指那些在汇编过程中已经有确定数值的量,它主要用作指令语句中的立即操作数、变址寻址量,它主要用作指令语句中的立即操作数、变址寻址和基址加变址寻址中的或在伪指令语句中用于给变量和基址加变址寻址中的或在伪指令语句中用于给变量赋初值。赋初值。2)常量分)常量分“数值常量数值常量”与与“符号变量符号变量”两种。两种。3)各种形式的常量格式)各种形式的常量格式4)数值表达式)数值表达式符号常量:符号常量: 预先给常量定义一个预先给常量定义一个“名字名字”,然后在汇编语句中用该,然后在汇编语句中用该“名字名字”表示该常量。表示该常量。 采

10、用符号常量的优点是改善程序的采用符号常量的优点是改善程序的可读性可读性;如果将符号常;如果将符号常量作为程序的参数,则可方便地实现参数的修改,增强程序量作为程序的参数,则可方便地实现参数的修改,增强程序的的通用性通用性。 其定义需用伪指令:其定义需用伪指令:“”或或“”。例:例:*,即把即把*+=送。送。 常量是没有属性的纯数据,其常量是没有属性的纯数据,其值是在汇编时确定值是在汇编时确定的。的。数值表达式数值表达式一个能被计算并产生数值的表达式称为一个能被计算并产生数值的表达式称为数值表达式(数值表达式(Constant ExpressionConstant Expression)。)。 一

11、个数值表达式可自由常量、字符常量一个数值表达式可自由常量、字符常量以及代表常量或串常量的名字等以以及代表常量或串常量的名字等以算术、逻算术、逻辑和关系运算符辑和关系运算符(OperatorOperator)连接而成。)连接而成。(2)变量和地址表达式)变量和地址表达式1)变量及其属性)变量及其属性段属性:段属性:表示与该变量相对应的数据区所在段表示与该变量相对应的数据区所在段的段基址。的段基址。偏移值属性:偏移值属性:表示该变量与段起始地址相距的表示该变量与段起始地址相距的字节数。字节数。类型属性:类型属性:表示数据区中数据项的存取单位是表示数据区中数据项的存取单位是字节、字、双字、字节、字、

12、双字、4字或字或10字节。字节。2)变量的定义)变量的定义变量一般都在数据段或附加段中使用伪指令变量一般都在数据段或附加段中使用伪指令DB、DW、DD、DQ和和DT来定义,这些伪指令称为数据区来定义,这些伪指令称为数据区定义伪操作命令,定义伪操作命令,其格式为:其格式为:变量名变量名数据区定义伪操作命令数据区定义伪操作命令表达表达式式3)变量的使用)变量的使用变量是存储器数据区的符号表示,因此指令中的变量是存储器数据区的符号表示,因此指令中的存储器操作数可以用变量形式给出。使用变量作为存存储器操作数可以用变量形式给出。使用变量作为存储器操作数时要注意几个问题。储器操作数时要注意几个问题。)地址

13、表达式)地址表达式汇编语言中表达式有两类汇编语言中表达式有两类数值表达式数值表达式:在汇编时产生一数值,仅具有大小而无:在汇编时产生一数值,仅具有大小而无其他属性,可作为执行性指令中的立即操作数和数据区中其他属性,可作为执行性指令中的立即操作数和数据区中的初值使用。的初值使用。地址表达式地址表达式:它表示存储器地址,其值一般都是段内:它表示存储器地址,其值一般都是段内的偏移地址,因此它具有段属性、偏移值属性、类型属性。的偏移地址,因此它具有段属性、偏移值属性、类型属性。地址表达式主要用来表示执行性指令中的多种形式的操作地址表达式主要用来表示执行性指令中的多种形式的操作数。数。地址表达式由变量、

14、标号、常量、寄存器,地址表达式由变量、标号、常量、寄存器,的内容(用寄存器名以及方括号表示)以及一,的内容(用寄存器名以及方括号表示)以及一些运算符组成。些运算符组成。(3)(3)运算符综述运算符综述IBMIBM宏汇编中有宏汇编中有5 5种运算符种运算符, ,即即: :算术运算符算术运算符(Arithmetic operators)(Arithmetic operators)逻辑运算符逻辑运算符(Logical operators)(Logical operators)关系运算符关系运算符(Relational operators)(Relational operators)分析运算符分析运算

15、符(Analytic operators)(Analytic operators)合成运算符合成运算符(Synthetic operators)(Synthetic operators)前面前面3 3种运算符已经介绍了种运算符已经介绍了, ,下面对后下面对后2 2种运算种运算符作一简单介绍。符作一简单介绍。1)1)分析运算符分析运算符分析运算符用来把存储器操作数分析运算符用来把存储器操作数( (变量或标号变量或标号) )分解为它的组成部分分解为它的组成部分( (段地址、偏移值、类型段地址、偏移值、类型 、数据字节总数、数据项总数等数据字节总数、数据项总数等),),并以数值形式回并以数值形式回送

16、给存储器操作数送给存储器操作数( (变量或标号变量或标号) )。 常用运算符:常用运算符:SEG,OFFSET,LENGTH,SIZE例:例:DATA1DW100DUP(?)LENGTHDATA1的值为的值为100SIZEDATA1的值为的值为2002)2)合成运算符合成运算符合成运算符用来把存储器操作数的属性部分建立一个合成运算符用来把存储器操作数的属性部分建立一个新的存储器地址操作数。新的存储器地址操作数。PTR例:例:ADDBYTEPTRDI,45H例例: : INCBYTEPTRES:BP+3 ES:ES:为为跨段前缀跨段前缀, , 指明操作数当前在附加段。指明操作数当前在附加段。 如

17、果没有跨段前缀如果没有跨段前缀“ES:ES:”, ,那么那么, ,由由BP+3BP+3地址表地址表达式所表示的偏移地址将被系统默认为是在堆栈段中。达式所表示的偏移地址将被系统默认为是在堆栈段中。THIS例:例:DATABEQUTHISBYTEDATAWDW?DATAB与与DATAW有有相同的段和偏移地址相同的段和偏移地址,但,但,DATABDATAB的类型是的类型是字节字节,DATAWDATAW的类型是的类型是字字。 3) 3) 运算符的优先级运算符的优先级(三)伪指令语句(三)伪指令语句伪指令语句又称为说明性指令或指示语句。伪指令语句又称为说明性指令或指示语句。伪指令语句的格式为:伪指令语句

18、的格式为:名字名字伪操作指令伪操作指令操作数据表操作数据表;注释;注释名字是一标志符,一般不能有名字是一标志符,一般不能有“:”结尾,结尾,名字可以是符号常量名、段名、变量名等,由不名字可以是符号常量名、段名、变量名等,由不同的伪操作命令决定。操作数表是用同的伪操作命令决定。操作数表是用“,”分隔开的分隔开的一系列操作数。一系列操作数。常用伪指令,见表常用伪指令,见表4.1(P128)1、数据定义伪指令、数据定义伪指令(1)5种数据定义命令种数据定义命令DB(定义字节)定义字节)DW(定义字)定义字)DD(定义双字)定义双字)DQ(定义定义4字)字)DT(定义定义10字节)字节)例:例:DSE

19、GSEGMENTTABLEDW12DW34DATA1DB5TABLE2DW67DW89DW1011;3F3hDATA2DB12RATESDW1314;522hOTHRATDD1718;6B6hARRAYDB2DUP(1,2,2DUP(3,4,5)CHAR1DBHELLO;定义字符串只能用定义字符串只能用“DB”DAT1DBAB;41H,42HDAT2DWAB;4142HDSEGENDS(2)存储器初始化)存储器初始化DB、DW、DD可用于初始化存储器可用于初始化存储器。这些伪这些伪指令的右边有一表达式,表达式之值即该存储指令的右边有一表达式,表达式之值即该存储“单单位位”的初值。一个存储器单位

20、可以是字节、字、双的初值。一个存储器单位可以是字节、字、双字。字。表达式有数值表达式与地址表达式之分表达式有数值表达式与地址表达式之分,在使在使用用地址表达式地址表达式来初始化存储器时,这样的表达式只来初始化存储器时,这样的表达式只可在可在DW或或DD伪操作命令中出现,伪操作命令中出现,绝不允许出现在绝不允许出现在DB中。中。例:例:EOO SEGMENTAT55H;段基值定义为;段基值定义为0055HZERO DB0;内容为内容为ONEDWONE;内容为内容为TWODDTWO;内容为内容为FOURDWFOUR+5;内容为内容为SIXDWZEROTWO;内容为内容为ATEDB5*6;内容为内容

21、为FOOENDS0001H00550003H7+5=12=0CH0-3=-3=0FFFDh3000H2、符号定义伪指令、符号定义伪指令(1)EQU格式为:名字格式为:名字EQU表达式表达式例:例:ONEEQU1TWOEQU2BYTESDB4DUP(?)FIRSTWEQUWORDPTRBYTES(2)它与它与EQU基本相似,起赋值作用。基本相似,起赋值作用。例:例:X=12X=X+1“EQU”与与“=”区别:区别:1)使用)使用“”定义的定义的符号名可以被重新定义符号名可以被重新定义,使,使符号名具有新值。符号名具有新值。2)习惯上)习惯上“”主要用来定义符号常量。主要用来定义符号常量。(3)L

22、ABELLABEL伪操作指令为当前存储单元定义一个指定伪操作指令为当前存储单元定义一个指定类型的变量或符号。类型的变量或符号。其格式为:其格式为:变量名或符号名变量名或符号名LABEL类型类型对于对于数据数据项,类型可以是项,类型可以是BYTE、WORD、DWORD;对于可执行的指令对于可执行的指令代码代码,类型为,类型为NEAR和和FAR。例:例:ARRAY_BYTELABELBYTE;为变量为变量ARRAY_BYTE定义定义;一个字节类型的数据区;一个字节类型的数据区ARRAY_WORDDW50DUP(?);为变量为变量ARRAY_WORD定义定义;一个字类型的数据区;一个字类型的数据区则

23、程序中可用指令:则程序中可用指令:MOVAL,ARRAY_BYTEMOVBX,ARRAY_WORD3、段定义伪指令、段定义伪指令(1)SEGMENT和和ENDS伪指令伪指令SEGMENT和和ENDS伪指令用来把程序模块伪指令用来把程序模块中的指令或语句分成若干逻辑段,其格式如下:中的指令或语句分成若干逻辑段,其格式如下:段名段名SEGMENT段名段名ENDS1)定位类型)定位类型表示该段对起始边界地址的要求,有表示该段对起始边界地址的要求,有4种定位类型:种定位类型:BYTE起始地址起始地址=XXXXXXXXXXXXXXXXXXXX,即字节型即字节型WORD起始地址起始地址=XXXXXXXXX

24、XXXXXXXXXX0,即字型即字型PARA起始地址起始地址=XXXXXXXXXXXXXXXX0000,即节型即节型PAGE起始地址起始地址=XXXXXXXXXXXX00000000,即页型即页型PARA隐含值隐含值2)组合类型)组合类型指示连接程序如何将某段与其他段组合起来的关系。指示连接程序如何将某段与其他段组合起来的关系。有有6种:种:NONE表示该段与其他段在逻辑上不发生关系表示该段与其他段在逻辑上不发生关系PUBLIC表示该段与其他用表示该段与其他用PUBLIC说明的说明的同同名同类别的段联接名同类别的段联接成一个逻辑段,运成一个逻辑段,运行时装入同一物理段中,是用同一段行时装入同一

25、物理段中,是用同一段基址。基址。STACK连接时将具有连接时将具有STACK类型的同名段连接类型的同名段连接成一个大堆栈,由各模块共享。成一个大堆栈,由各模块共享。COMMON表示该段与其他有表示该段与其他有COMMON说明的同说明的同名同类别的段连接时,被名同类别的段连接时,被重叠地放重叠地放在一起。这样可使在一起。这样可使不同模块的变量、标号使用同一存储区,便于模块间不同模块的变量、标号使用同一存储区,便于模块间通信。通信。MEMORY由由MEMORY说明的段连接时被放说明的段连接时被放在所有在所有段的最后段的最后(高段地址高段地址)。若有几个段都是。若有几个段都是MEMORY类类型,则汇

26、编时遇到的第一个段认为型,则汇编时遇到的第一个段认为MEMORY类型,类型,其他段为其他段为COMMON类型。类型。AT表达式表达式表达式的值即该段的段基址。表达式的值即该段的段基址。它不能用它不能用来指定代码段。来指定代码段。默认类别默认类别NONE3)类别类别表示该段的类别,连接时只使同类别的段发生关联。表示该段的类别,连接时只使同类别的段发生关联。典型的类别有典型的类别有CODE、STACK|、DATA等,等,也可用其他类别名。也可用其他类别名。例:例:数据段:数据段:DATASEGMENTPARAPUBLICDATA代码段:代码段:CODESEGMENTPARAPUBLICCODE堆栈

27、段:堆栈段:STACKSEGMENTPARASTACKSTACK(2)ASSUME伪指令伪指令ASSUME伪指令一般出现在代码段中,它用来告诉汇编伪指令一般出现在代码段中,它用来告诉汇编程序,哪一个段寄存器是其对应段的段地址寄存器。程序,哪一个段寄存器是其对应段的段地址寄存器。其格式为:其格式为:ASSUME段寄存器:段名段寄存器:段名,段寄存器名:段名,段寄存器名:段名其中其中“段名段名”可以是程序中已定义过的任何段名或组名,可以是程序中已定义过的任何段名或组名,也可以是表达式也可以是表达式“SEG变量变量”或或“SEG标号标号”,或者是关键字,或者是关键字NOTHING。例:例:ASSUM

28、ECS:CODE,DS:DATA,SS:STACK(3)ORG伪指令伪指令 ORG 例:例:ORG100H4、过程定义伪指令、过程定义伪指令(1)过程)过程汇编语言中,用汇编语言中,用CALL指令来调用过程,用指令来调用过程,用RET指令结束过程并返回指令结束过程并返回CALL指令的后继指令。指令的后继指令。过程分为两类:过程分为两类:外部过程和内部过程外部过程和内部过程(2)过程定义伪指令格式:)过程定义伪指令格式:过程名过程名PROC类型类型.过程名过程名ENDP类型:类型:NEAR(隐含值隐含值)、)、FAR5、结束语句、结束语句ENDENDEND语句标志整个源程序结束,汇编工作到语句标

29、志整个源程序结束,汇编工作到此结束。此结束。表达式必须产生一个存储器地址,该地址为程表达式必须产生一个存储器地址,该地址为程序执行的第一条指令的地址。序执行的第一条指令的地址。4.38086/8088汇编语言程序设计汇编语言程序设计基本方法基本方法汇编语言的一般上机操作过程:汇编语言的一般上机操作过程:1利用编辑软件产生汇编源程序利用编辑软件产生汇编源程序*.ASM文件。文件。CEDIT*.ASM2利用宏汇编程序利用宏汇编程序MASM对汇编源程序(对汇编源程序(*.ASM)进行汇编,进行汇编,产生产生*.OBJ文件。文件。CMASM*.ASM3利用利用LINK对对*.OBJ连接,产生连接,产生

30、*.EXE文件文件CLINK*.OBJ4运行或调试文件。运行或调试文件。运行:运行:DOS下直接键入文件名即可下直接键入文件名即可调试:调试:CDEBUG*.EXE编程举例:编程举例:一、一、顺序结构程序顺序结构程序二、二、分支结构程序分支结构程序三、三、循环结构程序循环结构程序四、四、DOS及及BIOS中断调用中断调用例例(P146):对对两两个个8字字节节无无符符号号数数D1、D2求求和和,两两数数之之和和按按从从高高到到底底顺顺序序依依次次存存于于SI、BX、CX、DX中中,最高位进位存于最高位进位存于AL中。中。DSEGMENTD1DB12H,34H,56H,78H,9AH,0ABH,

31、0BCH,0CDHD2DB0CDH,0BCH,0ABH,9AH,78H,56H,34H,12HDENDSCSEGMENTASSUMECS:C,DS:DBG:MOVAX,DMOVDS,AXLEA DI,D1MOVDX,DIMOVCX,DI+2MOVBX,DI+4MOVSI,DI+6LEA DI,D2ADD DX,DIADC CX,DI+2ADC BX,DI+4ADC SI,DI+6MOVAL,0ADC AL,0;产生最高位进位产生最高位进位MOVAH,4CH;返回返回DOSINT 21HCENDSEND BG 例例(P149):比比较较以以存存储储变变量量D1和和D2表表示示的的两两个个有有符符

32、号号字字数数据据的的大大小小,将将其其中中较较大大的的数数据据放放在在BX寄寄存器中,程序如下:存器中,程序如下:DATASEGMENTD1DW-123;补码为补码为FF85HD2DW-120;补码为补码为FF88HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AX;给给DS赋值赋值MOVBX,D1CMPBX,D2JGENEXTMOVBX,D2NEXT:MOVAH,4CHINT21HCODEENDSENDBEGIN例例(P149):找出找出无符号数无符号数字节数据存储变量字节数据存储变量VAR开始存放的开始存放的N个

33、数中的个数中的最大数最大数放在放在BH中。中。程序如下:程序如下:DESGSEGMENTVARDB5,7,19H,23H,0A0HNEQU$VARDESGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGBG:MOVAX,DSEGMOVDS,AX;给给DS赋值赋值MOVCX,N-1;置循环控制数置循环控制数MOVSI,0MOVBH,VARSI;取第取第1字节数到字节数到BHJCXZLAST;如果如果CX=0则转则转;只有一个数,无需比较只有一个数,无需比较AGIN:INCSICMPBH,VARSIJAENEXT;小于等于前一个数小于等于前一个数MOVBH,VARSI;大于

34、前一个数大于前一个数NEXT:LOOPAGAIN;CX=CX-1,若若CX不等于不等于0则转则转LAST:MOVAH,4CH;返回返回DOSINT21HCSEGENDSENDBG冒泡法排序:冒泡法排序:P150例例:将将一一组组有有符符号号存存储储字字节节数数据据按按从从小小到到大大的的顺顺序序排序。设数组变量为排序。设数组变量为VAR,数组元素个数为数组元素个数为N。冒泡法排序基本思想:冒泡法排序基本思想:反反复复对对相相邻邻的的数数两两两两比比较较,并并使使相相邻邻两两数数按按从从小小到到大大顺顺序序排排列列,直直到到数数组组中中任任意意两两个个相相邻邻的的数数都是从小到大的顺序,则排序结

35、束。都是从小到大的顺序,则排序结束。具体算法:具体算法:对对N个数据作个数据作N-1轮比较:轮比较:。第第1轮:轮:从第从第1个数到第个数到第N个数两两比较个数两两比较(比较比较N-1次次),并将小数放前并将小数放前,大数放后大数放后,最后将最大的数沉到最后将最大的数沉到最底(放到第最底(放到第N个数的位置)。个数的位置)。第第2轮:轮:将剩余的将剩余的N-1个数从第个数从第1个数到第个数到第N-1个数依次个数依次两两比较两两比较(比较比较N-2次次),并将小数放前,并将小数放前,大数放大数放后后,最后将最大的数沉到最底(放到第最后将最大的数沉到最底(放到第N-1个数个数的位置)。的位置)。第

36、第N-1轮:轮:从第从第1个数到第个数到第2个数两两比较个数两两比较(比较比较N-(N-1)次次),并将小数放前,并将小数放前,大数放后大数放后,最后最大的数沉最后最大的数沉到最底(放到第到最底(放到第2个数的位置)。个数的位置)。注:注:也可以倒过来,每次从最后一个数开始向前两两也可以倒过来,每次从最后一个数开始向前两两比较,将最小的数浮到最上面。同样经比较,将最小的数浮到最上面。同样经N-1轮比较轮比较交换后,从小到大的排序完成。交换后,从小到大的排序完成。编程编程:DSEGMENTVAR DB1,10,100,27H,0AH,47HNEQU$VARDENDSCSEGMENTASSUMEC

37、S:C,DS:DB:MOVAX,DMOVDS,AXMOVCX,N-1;设置设置N-1轮比较次数轮比较次数MOVDX,1;比较轮次计数比较轮次计数AG:CALLSUBP;作作N-1轮比较交换轮比较交换INC DXLOOPAGMOVAH,4CHINT 21HSUBPPROCNEARPUSHCXMOVCX,NSUB CX,DX;作作Ni次两两比较及交换次两两比较及交换MOVSI,0RECMP:MOVAL,VARSICMP AL,VARSI+1JLE NOCH;前一个小于后一个,无需调整前一个小于后一个,无需调整XCHGAL,VARSI+1;前一个大于后一个前一个大于后一个XCHGAL,VARSI;将

38、大的放到后面将大的放到后面NOCH:INC SILOOPRECMPPOP CXRETSUBPENDPCENDSEND B四、四、DOS及及BIOS中断调用中断调用(一)(一)ROMBIOS:基本输入输出系统基本输入输出系统DOS:磁盘操作系统磁盘操作系统IBMBIO.COM(输入输出设备处理程序)(输入输出设备处理程序)IBMDOS.COM(文件管理和处理程序)(文件管理和处理程序)COMMAND.COM(命令处理程序)(命令处理程序)(二)(二)DOS模块和模块和ROMBIOS的关系的关系IBMDOS.COMIBMBIO.COMROMBIOS外外设设( (二二) )中断调用及中断服务子程序返

39、回中断调用及中断服务子程序返回中断调用是一种内部中断方式,它是通过执中断调用是一种内部中断方式,它是通过执行行INT n INT n 指令来实现的指令来实现的。执行执行INT nINT n指令,使指令,使CPUCPU根据中断类型码根据中断类型码“”找中断向量表中第项作为此服务程序的入口。找中断向量表中第项作为此服务程序的入口。INT nINT n指令功能:指令功能:当前标志寄存器的内容压栈,保存当前标志寄存器的内容压栈,保存TFTF TF TF , IF IF 当前断点的值压栈,当前当前断点的值压栈,当前IPIP值压栈值压栈当中断服务子程序返回时,要执行当中断服务子程序返回时,要执行IRET指

40、指令,其功能是:令,其功能是:1、栈顶弹出一个字到、栈顶弹出一个字到IP2、栈顶弹出一个字到栈顶弹出一个字到CS3、栈顶弹出一个字到标志寄存器栈顶弹出一个字到标志寄存器中断调用的步骤如下:中断调用的步骤如下:1、准备入口参数、准备入口参数2、功能号送、功能号送AH3、INTn(三)(三)DOS常用中断调用举例常用中断调用举例在在DOS中断服务程序中,功能最多的是中断服务程序中,功能最多的是矢矢量号为量号为21H的矢量中断。的矢量中断。(1)返回)返回DOS矢量号矢量号21H功能号功能号4CH例例:MOVAH,4CHINT21H2、键盘输入并显示、键盘输入并显示矢量号矢量号21H功能号功能号1该

41、功能从键盘输入一个字符,将其该功能从键盘输入一个字符,将其ASCII码码保存在保存在AL中,输入字符中,输入字符回显回显在在CRT上。上。例例:MOVAH,1INT21H中断返回时,输入字符的中断返回时,输入字符的ASCII码被存放码被存放在在AL中,该字符并显示在屏幕上。中,该字符并显示在屏幕上。3、键盘输入但、键盘输入但不显示不显示输入字符输入字符矢量号矢量号21H功能号功能号8该功能输入一字符,其该功能输入一字符,其ASCII码存放码存放在在AL中,但不显示。这种功能往往在中,但不显示。这种功能往往在设设置口令置口令时使用。时使用。例例:MOVAH,8INT21H4、显示一字符、显示一字

42、符矢量号矢量号21H功能号功能号2入口参数:入口参数:DL=待显示字符的待显示字符的ASCII码码5、在打印机上打印一字符、在打印机上打印一字符矢量号矢量号21H功能号功能号5入口参数:入口参数:DL=待打印字符的待打印字符的ASCII码码6、显示以、显示以“$”结尾的字符串结尾的字符串矢量号矢量号21H功能号功能号9入口参数:入口参数:DS:DX指向字符串的首地址指向字符串的首地址7、字符串输入(、字符串输入(回车回车字符串输入字符串输入结束符结束符)矢量号矢量号21H功能号功能号0AH入口参数:入口参数:DS:DX指向输入缓冲区。指向输入缓冲区。注:输入缓冲区第一个单元设置字符串注:输入缓

43、冲区第一个单元设置字符串最大最大输入长度输入长度输入缓冲区第二个单元为输入缓冲区第二个单元为实际实际输入字符串长度输入字符串长度例:例:( (P156P156) 在在显显示示器器上上显显示示“How How are are you?you?”, ,然然后后读读一一个个字字符符,但但不不显显示示此此字字符符,若若读读入入字字符符是是y y, ,则显示则显示okok。DSEGMENTD1DBHowareyou?,0DH,0AH,$D2DBOK,0DH,0AH,$DENDSCSEGMENTASSUMECS:C,DS:DBG: MOVAX, DMOVDS, AXMOVDX, OFFSET D1MOVA

44、H, 9INT21H ;显示提示信息显示提示信息MOVAH, 8INT21H;输入字符不回显输入字符不回显CMPAL, YJNENEXTLEADX, D2;显示显示MOVAH, 9INT21HNEXT:MOVAH, 4CHINT21HCENDSENDBG例:例:( (P157)P157) 屏屏幕幕显显示示“PASSWORD?PASSWORD?”, ,随随后后从从键键盘盘读读入入字字符符串串,并并比比较较这这个个字字符符串串与与内内部部设设定定的的字字符符串串,若若两两者者相相同同,则则显显示示“okok”, ,否否则则不不作作任任何显示。何显示。DSEGMENTPASS1DB12ABNEQU$

45、-PASS1D1 DB“PASSWORD”,0DH,0AH,$PASS2 DB 20;最大长度最大长度DB?;实际长度实际长度DB20DUP(?)D2DBOK$DENDSCSEGMENTASSUMECS:C,S:D,ES:DBG:MOVAX,DMOVDS, AXMOVES, AXLEADX,D1MOVAH,9INT21H;显示显示“PASSWORD”LEADX,PASS2MOVAH,0AHINT 21H;等待键盘输入字符串等待键盘输入字符串LEASI,PASS1LEADI,PASS2CMPBYTEPTRDI+1,N;检查字符个数是否相等检查字符个数是否相等JNE LASTMOVCX,NLEAD

46、I,PASS2+2CLDREPZCMPSB;检查字符是否匹配检查字符是否匹配JZLAST;不匹配,程序结束不匹配,程序结束DISOK:LEADX,D2;匹配,显示匹配,显示OKMOVAH,9INT 21HLAST: MOVAH,4CHINT21HCENDSENDBG8、异步通信口输入、异步通信口输入矢量号矢量号21H功能号功能号3出口参数:出口参数:AL=串口输入的字符串口输入的字符9、异步通信口输出、异步通信口输出矢量号矢量号21H功能号功能号4入口参数:入口参数:DL=待输出的数据待输出的数据应用举例待第应用举例待第7章介绍章介绍10、设置日期、设置日期矢量号矢量号21H功能号功能号2BH

47、入口参数:入口参数:CX=年号(年号(19802099)DH=月份,月份,DL=日日11、取日期、取日期矢量号矢量号21H功能号功能号2AH出口参数:同上出口参数:同上 例例:将将微微机机日日期期设设置置成成19991999年年1111月月1212日。日。MOV CX,1999MOV DH,11MOV DL,12MOV AH,2BHINT21H12、设置时间设置时间矢量号矢量号21H功能号功能号2DH入口参数:入口参数:CH=小时(小时(023),),CL=分(分(059)DH=秒(秒(059),),DL=百分之一秒百分之一秒13、取时间取时间矢量号矢量号21H功能号功能号2CH出口参数:同上

48、出口参数:同上注:注:程序中的程序中的“延时延时”可通过读取时间并计算时间间可通过读取时间并计算时间间隔隔来实现来实现例:例:将微机时间设置成将微机时间设置成9 9:30:30。MOV CH,9MOV CL,30MOV DH,0MOV DL,0MOV AH,2DHINT21H(四)(四)ROMBIOS常用中断调常用中断调用举例用举例1、设置显示方式、设置显示方式矢量号矢量号10H功能号功能号0入口参数:入口参数:AL=显示方式号(显示方式号(07)()(P159)2、设置光标位置、设置光标位置矢量号矢量号10H功能号功能号2入口参数:入口参数:BH=页号,页号,DH=行号,行号,DL=列号列号

49、 例:屏幕设置为例:屏幕设置为80802525彩色文本方式彩色文本方式MOVAH,0MOVAL,3INT10H 例:将光标位置设置在屏幕第例:将光标位置设置在屏幕第1010行第行第3030列。列。MOVBH,0MOVDH,10MOVDL,30MOVAH,2INT10H3、设置光标大小、设置光标大小矢量号矢量号10H功能号功能号1入口参数:入口参数:CH=光标顶值,光标顶值,CL=光标底值光标底值4、屏幕上滚、屏幕上滚矢量号矢量号10H功能号功能号6入口参数:入口参数:AL=上滚行数,上滚行数,AL=0时,清除屏幕时,清除屏幕CH、CL=屏幕滚动区域左上角行、列号屏幕滚动区域左上角行、列号DH、

50、DL=屏幕滚动区域右下角行、列号屏幕滚动区域右下角行、列号BH=增加空行的属性,属性字节含意如下增加空行的属性,属性字节含意如下闪烁闪烁背景色背景色字符色彩字符色彩5、屏幕下滚、屏幕下滚矢量号矢量号10H功能号功能号7入口参数:与功能入口参数:与功能6滚动方向相反,其他相同滚动方向相反,其他相同6、在当前光标处写字符和属性、在当前光标处写字符和属性矢量号矢量号10H功能号功能号9LRGBIRGB入口参数:入口参数:BH=页号页号AL=显示字符的显示字符的ASCII码码BL=属性属性CX=重复显示次数重复显示次数7、在光标位置写字符(不改属性)、在光标位置写字符(不改属性)矢量号矢量号10H功能

51、号功能号0AH入口参数:入口参数:BH=页号页号AL=显示字符的显示字符的ASCII码码CX=重复显示次数重复显示次数8、设置图形方式显示的背景和彩色组设置图形方式显示的背景和彩色组矢量号矢量号10H功能号功能号0BH9、写光点、写光点向量号向量号10H功能号功能号0CH10、读点读点矢量号矢量号10H功能号功能号0DH11、读当前显示状态读当前显示状态矢量号矢量号10H功能号功能号0FH例例:设设置置屏屏幕幕显显示示方方式式为为80802525彩彩色色文文本本方方式式。用用兰兰色清屏,然后在第色清屏,然后在第1010行行3030列显示列显示2020个红底白字个红底白字A A。 MOVAH,0

52、MOVAL,3INT10H ;设置显示方式设置显示方式MOVCH,0MOVCL,0;设置滚动区左上角;设置滚动区左上角MOVDH,24MOVDL,79;设置滚动区右下角;设置滚动区右下角MOVAL,0;清除屏幕清除屏幕MOVBH,10H;蓝色背景蓝色背景MOVAH,6;屏幕上滚屏幕上滚INT10H;清屏清屏 MOVAH,2MOVBH,0MOVDH,10MOVDL,30INT10H;设置光标第设置光标第10行,第行,第30列列MOVAL,AMOVCX,20MOVBH,0MOVBL,27H;字符属性为红底白字字符属性为红底白字MOVAH,9INT10H;显示显示20个个A12、读键盘、读键盘(1)

53、矢量号矢量号16H功能号功能号0返回参数:返回参数:AL=输入字符的输入字符的ASCII码码AH=键盘扫描玛键盘扫描玛(b7:1键按下,键按下,0键松开键松开)应用:键盘模拟电子琴应用:键盘模拟电子琴(2)矢量号)矢量号16H功能号功能号1返回参数:按过键,返回参数:按过键,ZF=0,AL=输入字符的输入字符的ASCII码码;未按键,未按键,ZF=1;(3)矢量号)矢量号16H功能号功能号2返回参数:返回参数:AL=特殊功能键的状态特殊功能键的状态例:例:键盘按键、扬声器发声模拟电子琴。键盘按键、扬声器发声模拟电子琴。MOVAH,0INT16HANDAL,0FHMOVBX,OFFSETKEY-

54、TIMERXLAT;查表将输入键值转换为扬声器定时常数查表将输入键值转换为扬声器定时常数TESTAH,80H;b7=1?JNZSOUND;判断键正按下,则扬声器发声判断键正按下,则扬声器发声;否则扬声器停止发声否则扬声器停止发声SOUND:13、通信口初始化、通信口初始化矢量号矢量号14H功能号功能号0入口参数:入口参数:AL=初始化参数(初始化参数(P161P162)DX:0串串口口1,1串串口口214、通信口输出、通信口输出矢量号矢量号14H功能号功能号1入口参数:入口参数:AL=待输出数据待输出数据DX:0串串口口1,1串串口口215、通信口输入、通信口输入矢量号矢量号14H功能号功能号

55、2入口参数:入口参数:DX:0串口串口1,1串口串口2返回参数:输入成功时,返回参数:输入成功时,AH的的b7=0,AL=输入数据输入数据输入失败时,输入失败时,AH的的b7=1,b0b6=通信口状态(通信口状态(P162)补充补充(郁慧娣书)(郁慧娣书)1、数据块传送、数据块传送2、代码转换、代码转换键盘输入键盘输入ASCII码码数字存储、运算数字存储、运算二进制、十六进制、二进制、十六进制、BCD码码屏幕显示屏幕显示ASCII码码LED显示显示七段码七段码1.1.数据块传送(数据块传送(P78)P78) 注注意意比比较较源源数数据据块块初初始始地地址址(SISI)和和目目标标数数据据块块初

56、初始始地地址址(DIDI)的的大大小小,来来选选择择增增量量传传送送(DF=0DF=0)或或减减量量传传送送( (DF=1)DF=1)若两数据块若两数据块地址不重叠地址不重叠,则增量传送、减量传送都可以;,则增量传送、减量传送都可以;若两数据块若两数据块地址有重叠地址有重叠,SI DISI DI,则选择则选择增量增量传送;传送; SI DISI DI,增量传送增量传送STD;SIDI,减量传送减量传送ADD SI,STRE1;指向源数据块最高地址指向源数据块最高地址ADD DI,STRE1;指向目标数据块最高地址指向目标数据块最高地址OK:REP MOVSBRET;返回;返回DOSSTARTE

57、NDPCOSEGENDSEND START2.ASCII码码BCD码(压缩)码(压缩)1)ASCII码码BCD码(压缩)码(压缩)(P72)偶数个偶数个ASCII码码每每2BASCII码码1BBCD码码 低字节低字节与与0Fh+高字节高字节左移左移4位位BCD码(码(1B)奇数个奇数个ASCII码码先将最低字节先将最低字节与与0Fh1BBCD码;码;剩余偶数个剩余偶数个ASCII码再按上述方法,码再按上述方法,每每2BASCII码码1BBCD码。码。编程举例编程举例DATASEGMENTASCBUF DB31h,32h,34h,35h,36h,37h,38h,39h,30hCOUNTEQU $

58、ASCBUF;ASCBUF定义的字节个数定义的字节个数BCDBUF DB5DUP(?)DATAENDSSTACKSEGMENTPARASTACKSTACKSTAPNDB100DUP(?)STACK ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTRPROCFARGO:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVES,AXMOVSI,OFFSETASCBUFMOVDI,OFFSETBCDBUFMOVCX,COUNTROR CX,1JNC NEXT ;COUNT为偶数转移为偶数转移ROL CX,1;

59、恢复恢复CX内容内容LODSB;CX为奇数,先转换最低字节为奇数,先转换最低字节AND AL,0FHSTOSBDECCX;余下的每余下的每2B转换一次转换一次RORCX,1;CX/2LODSBANDAL,0FHMOVBL,ALLODSBPUSHCXMOVCL,4SALAL,CLPOPCXNEXT:ADDAL,BLSTOSBLOOPNEXTRETSTRENDPCODEENDSEND GO2)BCD码(压缩)码(压缩)ASCII码码(P74)BCD码码与与0Fh+30hASCII码码(存为低字节)(存为低字节)BCD码码逻辑右移逻辑右移4位位+30hASCII码码(存为高字节(存为高字节)3ASC

60、II码码二进制数二进制数一位一位ASCII码码012930h31h32h39h00h01h02h09h二进制数二进制数一位十进制数(一位十进制数(09).各位十进制数组合各位十进制数组合二进制数(和)二进制数(和)SUM累加和,初值累加和,初值=0Di一位十进制数(一位十进制数(09)二进制数(和)二进制数(和)=(SUM10+Dn)10+Dn-1)10+D0例例7155二进制数(和)二进制数(和)=(010+7)10+1)10+5)10+5=7155编程举例编程举例(P75)DATASEGMENTASCBUF DB7155COUNT EQU $ASCBUF;ASCBUF定义的字节个数定义的字

61、节个数SAVEDX DW 0DATAENDSSTACKSEGMENTPARASTACKSTACKSTAPNDB100DUP(?)STACKENDSCOSEGSEGMENTASSUMECS:COSEG,DS:DATA,ES:DATA,SS:STACKSTARTPROCFARPUSHDSMOVAX,0(可用可用SUBAX,AXXORAX,AX代替代替)PUSHAXMOVAX,DATAMOVDS,AXMOVES,AXMOVSI,OFFSETASCBUFMOVCX,COUNTCMP CX,4JAINVALID ;ASCII码位数超过码位数超过4个,无效个,无效CLDSUB DX,DX;DX放累加和放累

62、加和SUM,初值,初值=0NEXTCHAR:CALLMUL10;调用调用10的过程的过程LODSB;ALSI,SI65536,无效,无效LOOPNEXTCHARMOVAX,DX;AX存放转换好的二进制数存放转换好的二进制数JMPEXITINVALID:STC;CF=1,转换结果无效的标志转换结果无效的标志EXIT:RET ;与前面三句一起完成程序结束与前面三句一起完成程序结束;返回返回DOS的功能的功能STARTENDP MUL10PROCNEARMOVSAVEDX,DXSHLDX,1;2SHLDX,1;再;再2ADDDX,SAVEDX;原始值原始值5SHLDX,1;原始值原始值10RETMU

63、L10ENDPCOSEGENDSEND START 思考题思考题运算结果(二进制数)运算结果(二进制数)ASCII码码字字符符串,送屏幕显示串,送屏幕显示提示提示:1.二进制数二进制数10取余数取余数十进制数十进制数2.十进制数十进制数30hASCII码字符码字符3.循环重复循环重复1、2步,得到步,得到ASCII码字符串码字符串4.BCD码(压缩)码(压缩)二进制数二进制数 1B1)BCD2BCD1二进制数二进制数高高4位位低低4位位BCD210+BCD12)二进制数)二进制数(099)BCD码码二进制数二进制数10BCD2BCD1商商余数余数多字节多字节(思考)(思考)5.十六进制数十六进

64、制数七段码(数码管)七段码(数码管)(P76) 查表查表0F的七段码按顺序存于内存表中的七段码按顺序存于内存表中XLATALDS:BX+AL七段码七段码表基址表基址表索引(十六进制数)表索引(十六进制数)DATASEGMENTNUMDB?;十六进制数十六进制数SSCODDB?;七段码七段码TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HDATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTARTMOVAX, DATAMOVDS, AXMOVAL, NUMMOVBX, OFFSETTABLEXLATMOVSSCOD,ALHLTCODEENDSENDSTART

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号