第四章汇编程序精选文档.ppt

上传人:石*** 文档编号:70749495 上传时间:2023-01-27 格式:PPT 页数:62 大小:3.16MB
返回 下载 相关 举报
第四章汇编程序精选文档.ppt_第1页
第1页 / 共62页
第四章汇编程序精选文档.ppt_第2页
第2页 / 共62页
点击查看更多>>
资源描述

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

1、第四章汇编程序本讲稿第一页,共六十二页第第四章四章 汇编编语言言程序设计程序设计 汇编语言语句的类型和组成 伪操作命令 DOS系统功能调用和BIOS中断调用 汇编语言程序设计本讲稿第二页,共六十二页汇编编语言言语句的句的组成成1 1指令性语句。即执行性语句指令性语句。即执行性语句(指令指令)包括四部分:包括四部分:标号:标号:指令操作码指令操作码 操作数操作数 ;注释注释 AGANAGAN:ADC SUMADC SUM,AXAX2 2指示性语句。即说明性语句指示性语句。即说明性语句(伪指令伪指令),),由四部分组成:由四部分组成:名字名字 伪指令伪指令 操作数操作数 ;注释注释 SUMSUMD

2、W 0DW 0;为结果保留一个字为结果保留一个字3.3.宏指令语句。宏指令语句。宏名宏名 宏操作助记符宏操作助记符 操作数操作数 ;注释;注释 本讲稿第三页,共六十二页汇编编语言言对标识符的符的规定定可用符号包括数字、字母和特殊符号可用符号包括数字、字母和特殊符号?、$、_ _。数字数字不能作为名字(变量或标号)的不能作为名字(变量或标号)的第一个符号第一个符号。名字的长度名字的长度不不能超过能超过3131个字符个字符。汇编语言中有特定含义的汇编语言中有特定含义的保留字保留字,如操作码、寄存器名等,如操作码、寄存器名等,不能作为名字使用。不能作为名字使用。不不区分字母的大小写。区分字母的大小写

3、。本讲稿第四页,共六十二页DATASEGMENT;定定义数据数据段段X DB 2DATAENDS;数据数据段定段定义结结束束STACK SEGMENT PARA STACK STACK;定定义堆堆栈段段DB 100 DUP(?)(?);100字字节的的栈空空间间STACK ENDS;堆堆栈段定段定义结结束束CODESEGMENT;定定义代代码段段ASSUME DS:DATA,SS:STACK,CS:CODE;对各段各段进行行说明明BEGIN:MOV AX,DATA;DS初初始化始化为DATA MOV DS,AX MOV BH,X CODEENDS;代;代码段段结结束束ENDBEGIN;整;整个

4、程序结个程序结束束 汇编编语言言程序结构程序结构定义存储单定义存储单元的数据元的数据定义堆栈定义堆栈本讲稿第五页,共六十二页 汇编编语言开言开发过程程一、上机前的软件准备:一、上机前的软件准备:MS-DOSMS-DOS操作系统(如:操作系统(如:MSDOS6.22,MSDOS7.0 MSDOS6.22,MSDOS7.0 等)等)文本编辑器文本编辑器 (如:(如:EDIT.COM,TURBO.EXE,TC.EXE,EDIT.COM,TURBO.EXE,TC.EXE,C.EXE C.EXE 等)等)汇编程序汇编程序 (如:(如:MASM.EXE,ASM.EXE MASM.EXE,ASM.EXE 等

5、)等)连接程序连接程序 (如:(如:LINK.EXE LINK.EXE 等)等)调试程序调试程序 (如:(如:DEBUG.EXE DEBUG.EXE 等)等)本讲稿第六页,共六十二页编编辑辑文本编辑器,如 EDIT.COM源程序:文件名源程序:文件名.asm汇汇编编汇编程序,如 ML.EXE目标模块:文件名目标模块:文件名.obj连连接接连接程序,如 LINK.EXE可执行文件:文件名可执行文件:文件名.exe调调试试调试程序,如 CodeView应用程序应用程序错误错误错误错误错误错误错误错误汇编编语言言程序程序的开的开发过程程本讲稿第七页,共六十二页1.1.OFFSETOFFSET运算符运

6、算符当当OFFSETOFFSET运算符置于变量或标号前时,汇编程序就自动运算符置于变量或标号前时,汇编程序就自动计算出该变量或标号在它段内的偏移地址。计算出该变量或标号在它段内的偏移地址。如:如:BUFFER DB 34BUFFER DB 34,5656,7979,1212 MOV SIMOV SI,OFFSET BUFFEROFFSET BUFFER 运算符运算符本讲稿第八页,共六十二页运算符运算符2.PTR2.PTR运算符运算符表达式返回一个与原操作数具有相同的段基址和偏移量,表达式返回一个与原操作数具有相同的段基址和偏移量,但类型不同的操作数。但类型不同的操作数。格式:格式:类型类型 P

7、TR PTR 地址表达式地址表达式如:如:MOV BYTE PTR MOV BYTE PTRSISI,20H20H MOV WORD PTR MOV WORD PTRSISI,20H20H本讲稿第九页,共六十二页基本基本伪指令指令-符号定义伪指令符号定义伪指令 基本形式:基本形式:符号名符号名EQUEQU表达式表达式 符号名符号名 =常数表达式常数表达式功能:给表达式指定一个等价的符号名。功能:给表达式指定一个等价的符号名。说明:说明:(1 1)=后后的的表表达达式式只只能能是是常常数数,对对于于字字符符或或字字符符串串,汇汇编编时时按按整整数处理。例如:数处理。例如:COUNTCOUNT=2

8、020MOV CX,COUNTMOV CX,COUNT;等价于等价于MOV CX,20MOV CX,20(2 2)EQUEQU后后的的表表达达式式可可以以是是数数值值、字字符符串串、寄寄存存器器名名、指指令令助助记记符符等。等。(3 3)EQUEQU不不能能重重复复定定义义,而而 =可可重重复复定定义义,其其作作用用域域从从定定义义点到重新定义之前。点到重新定义之前。本讲稿第十页,共六十二页基本基本伪指令指令-数据数据类型型定定义伪指令指令DB DB(Define ByteDefine Byte)DW DW(Define WordDefine Word)DDDD (Define DWordDe

9、fine DWord)操作数可以为:操作数可以为:(1 1)数值表达式;)数值表达式;(2 2)ASCASC码字符串;码字符串;(3 3)地址表达式;)地址表达式;(4 4)?(只保存内存空间,未定义初始值);)?(只保存内存空间,未定义初始值);(5 5)DUP DUP 子句子句格式:格式:重复次数重复次数 DUP DUP (操作数,(操作数,操作数),操作数)DUPDUP子句可以嵌套。子句可以嵌套。本讲稿第十一页,共六十二页DBDB、DW DW 的应用特点的应用特点DATA SEGMENTARE1 DB 20H,30H ARE2 DW 2030HARE3 DB A B ARE4 DW?DA

10、TA ENDS20H30H30H20H41H42H00H00HARE1ARE1ARE2ARE2ARE3ARE3ARE4ARE4V1 DB 20 DUPV1 DB 20 DUP(?)(?)V2 DW 4 DUPV2 DW 4 DUP(3 3,5 5)V3 DB 5 DUPV3 DB 5 DUP(3 DUP3 DUP(2 2),),7 7)V4 DB 10 DUPV4 DB 10 DUP(ABCDABCD)基本基本伪指令指令-数据数据类型型定定义伪指令指令本讲稿第十二页,共六十二页基本基本伪指令指令-地址地址计数计数器器伪指令$表示下一个地址变量的偏移地址值表示下一个地址变量的偏移地址值 SORT

11、D SEGMENT ARRAY DB 25,46,3,75,5 COUNT EQU$-ARRAY SORTD ENDS ARRAY的偏移地址值为的偏移地址值为0000H$的偏移地址值为的偏移地址值为0005H COUNT=0005H 0000H=525463755ARRAYARRAY0000H0000H0005H0005H$本讲稿第十三页,共六十二页 汇编编语言言程序设计程序设计程序设计一般应按下述步骤进行程序设计一般应按下述步骤进行(对于给定的课题进行程序设计):(对于给定的课题进行程序设计):1 1依据设计任务,建立数学模型。依据设计任务,建立数学模型。2 2确定算法或求解的具体步骤和方法

12、。确定算法或求解的具体步骤和方法。3 3绘制出程序流程框图。绘制出程序流程框图。4 4分配存储空间及工作单元(包括寄存器)。分配存储空间及工作单元(包括寄存器)。5 5依据流程图编写程序。依据流程图编写程序。6 6静态检查(检查指令是否合适,是否有语法和格式错误)。静态检查(检查指令是否合适,是否有语法和格式错误)。7 7上机调试。上机调试。本讲稿第十四页,共六十二页 基本程序设计基本程序设计顺序程序设计顺序程序设计 指令指针指令指针IPIP值线性增加值线性增加条件程序设计条件程序设计 IPIP值受标志位的影响而跳变值受标志位的影响而跳变循环程序设计循环程序设计 IPIP值受计数器值受计数器C

13、XCX中的值不为零而循环中的值不为零而循环本讲稿第十五页,共六十二页DOS系统功能调用 DOS系统将输入/输出管理程序编写成一系列子程序,不仅系统可以使用,用户也可以像调用子程序一样方便的使用它们。在IBM PC系统中,除了DOS系统中有一组输入/输出子程序可供用户调用外,在系统的ROM中也有一组输入/输出管理程序可供用户使用,这组程序常称为ROM BIOS(ROM Basic I/O System)。本讲稿第十六页,共六十二页DOS系统功能调用 DOS DOS 共提供了共提供了约100100个个功功能能调用用,按其完按其完成成的功的功能能大致大致可可以以分分为以以下下几几类:基本输入基本输入

14、/输出的管理(如键盘、显示器等)输出的管理(如键盘、显示器等)文件管理文件管理 目录管理等目录管理等 调用方法:调用方法:为了使用的方便,为了使用的方便,DOSDOS所有功能的子程序已按序编号所有功能的子程序已按序编号功功能号,从能号,从00H-68H00H-68H。DOSDOS规定用定用软件件中中断指令断指令INT 21HINT 21H进入入DOSDOS功功能能调用子用子程序程序的的总入口入口,再再以以具具体体的功的功能能号号进入相入相应应各各个个子子程序程序的入口的入口。本讲稿第十七页,共六十二页DOS系统功能调用具体调用方法为:具体调用方法为:MOV AHMOV AH,功能号,功能号入口

15、参数入口参数指定寄存器指定寄存器INT 21HINT 21H取出口参取出口参数数 常用功能子程序功能号键盘输入单字符01H键盘输入字符串0AH输出单字符02H输出字符串09H返回操作系统4CH本讲稿第十八页,共六十二页带回回显的字符的字符输入入,功功能能号号01H01H功能功能:从标准输入设备(如键盘)输入一个字符,并显示在标:从标准输入设备(如键盘)输入一个字符,并显示在标 准输出设备(如准输出设备(如CRTCRT)上。如无字符输入,则等待。)上。如无字符输入,则等待。入口参数入口参数:无:无返回值返回值:AL=AL=输入字符的输入字符的ASCIIASCII码码例:例:MOV AH MOV

16、AH,01H01H;功能编号;功能编号 INT 21HINT 21H;调用;调用 CMP ALCMP AL,0DH0DH;输入字符是回车符吗?;输入字符是回车符吗?本讲稿第十九页,共六十二页字符字符输出出,功功能能号号02H02H功能功能:将一个字符(:将一个字符(ASCIIASCII码)输出到标准输出设备(如码)输出到标准输出设备(如 CRT CRT)上)上入口参数入口参数:DL=DL=即将输出字符的即将输出字符的ASCIIASCII码码返回值返回值:无:无例:例:MOV DL MOV DL,$;欲输出一个;欲输出一个“$”$”符号符号 MOV AHMOV AH,02H02H;功能编号;功能

17、编号 INT 21HINT 21H;调用;调用本讲稿第二十页,共六十二页输出字符串出字符串,功功能能号号0 09H H功能功能:向标准输出设备输出以:向标准输出设备输出以“$”$”为结束符的字符串(为结束符的字符串(“$”$”符不显示),串中不含控制符符不显示),串中不含控制符入口参数:入口参数:地址指针地址指针DSDS:DXDX,指向待输出的字符串首址,指向待输出的字符串首址返回值返回值:无:无例:例:STR DB Today is MondaySTR DB Today is Monday$;即将输出的字符串;即将输出的字符串 LDS DX LDS DX,STRSTR;DSDS:DXDX为指

18、针为指针 MOV AHMOV AH,09H09H;功能编号;功能编号 INT 21HINT 21H;调用;调用本讲稿第二十一页,共六十二页带缓冲区的字符串冲区的字符串输入入,功功能能号号0AH0AH功能:功能:由用户提供缓冲区,从标准输入设备输入一个以回车符由用户提供缓冲区,从标准输入设备输入一个以回车符 (0DH0DH)结束的字符串并接收在缓冲区内,同时回显在标)结束的字符串并接收在缓冲区内,同时回显在标 准输出设备上(不显示回车符)。准输出设备上(不显示回车符)。入口参数:入口参数:地址指针地址指针DSDXDSDX,指向接收缓冲区的首址,指向接收缓冲区的首址返回值返回值:无:无例:例:ST

19、R DB 20STR DB 20,?,?,20 DUP20 DUP(?);用户定义的缓冲区(?);用户定义的缓冲区 LEN DB LEN DB?;实际串长单元;实际串长单元 LDS DXLDS DX,STRSTR;DSDS:DXDX为为STRSTR指针指针 MOV AHMOV AH,0AH0AH;功能编号;功能编号 INT 21HINT 21H;调用;调用 LEA SILEA SI,STRSTR MOV LEN MOV LEN,SI+1SI+1;实际串长;实际串长本讲稿第二十二页,共六十二页例例1 1:计算:计算Y=X1+X2+X3Y=X1+X2+X3。表达式表达式Y=X1+X2+X3Y=X1

20、+X2+X3的计算过程可采用顺序执行的方法来完的计算过程可采用顺序执行的方法来完成成:首先读入数据首先读入数据X1X1、X2X2、X3X3;其次计算;其次计算X1X1、X2X2、X3X3的和;的和;最后保存结果到指定变量最后保存结果到指定变量Y Y中。中。根据计算步骤编写汇编语言程序:利用伪指令确定存储器根据计算步骤编写汇编语言程序:利用伪指令确定存储器的分配,将的分配,将X1X1、X2X2、X3X3定义为字变量;按照汇编语言源程序结定义为字变量;按照汇编语言源程序结构要求编写源程序。构要求编写源程序。思考:计算思考:计算D=(A+B)*4D=(A+B)*4C C本讲稿第二十三页,共六十二页D

21、ATA SEGMENTDATA SEGMENT DATA1 DW X1,X2,X3,?DATA1 DW X1,X2,X3,?DATA ENDSDATA ENDS CODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATA START:START:MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX MOV AX,MOV AX,DATA1DATA1 ADD AX,ADD AX,DATA1+2DATA1+2 ADD AX,ADD AX,DATA1+4DATA1+4 MOV MOV D

22、ATA1+6DATA1+6,AX,AX HLT HLTCODE ENDSCODE ENDS END START END START本讲稿第二十四页,共六十二页例例2 2:把:把BXBX中的二进制数用十六进制形式显示出来。中的二进制数用十六进制形式显示出来。MOV CH,4 MOV CH,4AGAIN:MOV CL,4AGAIN:MOV CL,4 ROL BX,CL ROL BX,CL MOV AL,BL MOV AL,BL AND AL,0FH AND AL,0FH OR AL,30H OR AL,30H CMP AL,3AH CMP AL,3AH JB NEXT JB NEXT ADD AL

23、,07H ADD AL,07HNEXT:MOV DL,ALNEXT:MOV DL,AL MOV AH,2 MOV AH,2 INT 21H INT 21H DEC CH DEC CH JNZ AGAIN JNZ AGAIN本讲稿第二十五页,共六十二页 例例3 3:用查表法求:用查表法求Z=XZ=X3 3DATA SEGMENT DATA SEGMENT TABLE DB 0,1,8,27,64,125,216 TABLE DB 0,1,8,27,64,125,216 XVAL DB 6 XVAL DB 6 YVAL DB?YVAL DB?DATA ENDSDATA ENDSSTACK SEGM

24、ENTSTACK SEGMENT DB 100 DUP(DB 100 DUP(?)STACK ENDSSTACK ENDSCODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATA STARTSTART:MOV AX,DATAMOV AX,DATA MOV DS,AX MOV DS,AX LEA BX,TABLE LEA BX,TABLE MOV AL,XVAL MOV AL,XVAL XLAT XLAT MOV YVAL,AL MOV YVAL,ALCODE ENDSCODE ENDS END START EN

25、D START本讲稿第二十六页,共六十二页分支分支结构程序设计结构程序设计 程序中所产生的分支是由条件转移指令来完成的。程序中所产生的分支是由条件转移指令来完成的。本讲稿第二十七页,共六十二页例例1 1:从键盘上输入字符,若为:从键盘上输入字符,若为A AZ Z,显示;若为,显示;若为0 0,则结束输,则结束输入。入。LP1:MOV AHLP1:MOV AH,01H 01H ;置键盘输入并回显置键盘输入并回显 INT 21H INT 21H ;系统功能调用;系统功能调用 CMP ALCMP AL,0 0 ;输入字符与输入字符与0 0比较比较 JE LP2 JE LP2 ;为零结束;为零结束 C

26、MP ALCMP AL,A A ;判断是否小于大写字母;判断是否小于大写字母A A JL LP1 JL LP1 ;小于大写字母小于大写字母A A返回重新输入返回重新输入 CMP ALCMP AL,Z Z ;判断是否大于大写字母判断是否大于大写字母Z Z JG LP1 JG LP1 ;大于大写字母大于大写字母Z Z返回重新输入返回重新输入 MOV DLMOV DL,AL AL ;将将ALAL内容送内容送DL,DL,作为输入参数作为输入参数 MOV AHMOV AH,02 02 ;置显示输出;置显示输出 INT 21H INT 21H ;将;将AZAZ的字符从显示器输出的字符从显示器输出 LP2:

27、MOV AHLP2:MOV AH,4CH 4CH ;带返回码结束;带返回码结束INT 21HINT 21H INT 21H INT 21H 本讲稿第二十八页,共六十二页例例2 2:实现表达式:实现表达式波形图波形图Y=Y=1 1(X 0X 0)0 0(X=0X=0)-1-1(X 0X=0 ;X=0转转BIGERBIGER MOV AL,0FFH MOV AL,0FFH ;-1 ;-1的补码为的补码为FFHFFH MOV Y,AL MOV Y,AL ;Y=-1 ;Y=-1 JMP NEXT JMP NEXTBIG:JE EQUL BIG:JE EQUL ;X=0 ;X=0转转EQULEQUL M

28、OV AL,1 MOV AL,1 MOV Y,AL MOV Y,AL ;Y=1 ;Y=1 JMP NEXT JMP NEXTEQUL:MOV Y,AL EQUL:MOV Y,AL ;Y=0 ;Y=0NEXT:HLTNEXT:HLTCODE ENDS CODE ENDS END START END START本讲稿第三十一页,共六十二页例例3 3:从键盘接收:从键盘接收0 09 9范围的数字字符,按值显示对应的英语单词,范围的数字字符,按值显示对应的英语单词,如如“0”0”显示显示“Zero”Zero”、“1”1”显示显示“One”One”等,若为其它字符,则等,若为其它字符,则不做任何处理。不

29、做任何处理。可在程序中安排十条分支以显示十个不同的英语单词。可在程序中安排十条分支以显示十个不同的英语单词。利用跳转表(地址表),具体算法如下:利用跳转表(地址表),具体算法如下:将将不不同同分分支支的的入入口口地地址址L0,L1,.,L9L0,L1,.,L9顺顺序序存存入入表表中中,每每个个入入口口地地址址占占一一个个字字,设设表表首首址址为为TABTAB,用用户户键键入入数数字字为为i i,则:,则:LiLi的存放地址的存放地址TABTAB2*i2*i 将将LiLi的存放地址送的存放地址送BXBX,然后用指令,然后用指令“JMP WORD PTR BX”JMP WORD PTR BX”实现

30、分支转移。实现分支转移。分析:分析:本讲稿第三十二页,共六十二页 循循环环结结构构程程序序设设计计针针对对的的是是处处理理一一些些重重复复进进行行的的过过程程的的操操作作。使使用用循环结构形式设计程序时,循环结构形式设计程序时,通常将循环程序划分三个部分:通常将循环程序划分三个部分:循环的初始化部分:循环的初始化部分:变量赋初值。变量赋初值。循环体:循环体:可以有一个或多个。可以有一个或多个。循环控制部分:循环控制部分:是否结束循环的条件。是否结束循环的条件。知道循环次数:可采用循环计数控制循环的结束;知道循环次数:可采用循环计数控制循环的结束;不不知知道道循循环环次次数数:多多采采用用结结果

31、果及及给给定定特特征征作作为为条条件件来来控控制制循循环的结束。环的结束。循环程序设计循环程序设计本讲稿第三十七页,共六十二页一般循环次数有可能为零时,选择一般循环次数有可能为零时,选择DO_WHILEDO_WHILE形式结构,形式结构,否则选择否则选择DO_UNTILDO_UNTIL结构形式。结构形式。循环程序设计循环程序设计DO_UNTILDO_UNTIL(直到型循环结构)(直到型循环结构)DO_WHILEDO_WHILE(当型循环结构)(当型循环结构)本讲稿第三十八页,共六十二页 (a)(a)单循环结构;单循环结构;(b)(b)双循环结构双循环结构 在多重循环程序设计中应注意:在多重循环

32、程序设计中应注意:内循环体可以几个并列在外内循环体可以几个并列在外循环体内,但内循环体之间不循环体内,但内循环体之间不得交叉。得交叉。多重循环中可从内循环体转多重循环中可从内循环体转移到外循环体,但不允许外循移到外循环体,但不允许外循环体直接转到内循环体中。环体直接转到内循环体中。所编程序不能形成死循环程所编程序不能形成死循环程序。序。循环程序设计循环程序设计本讲稿第三十九页,共六十二页例例1 1:要求将偏移地址为:要求将偏移地址为1000H1000H开始存放的开始存放的100100个字节的数据传送个字节的数据传送到偏移地址为到偏移地址为1500H1500H开始的连续内存区。假设它们的段地址存

33、开始的连续内存区。假设它们的段地址存放在放在DSDS中,段地址为中,段地址为2000H2000H。MOV AX MOV AX,2000H2000H MOV DS MOV DS,AXAX MOV SI MOV SI,1000H1000H MOV DI MOV DI,1500H1500H MOV CX MOV CX,100 100 LOOPLOOP:MOV ALMOV AL,SISI MOV MOV DIDI,ALAL INC SI INC SI INC DI INC DI DEC CX DEC CX JNZ LOOP JNZ LOOP HLT HLT 本讲稿第四十页,共六十二页 例2:计算和清和

34、清0 AX计数初值计数初值100 CX(AX)=(AX)+(CX)(CX)=(CX)-1(CX)=0 SUM=(AX)Y YN N流程图流程图本讲稿第四十一页,共六十二页数表的处理 气泡法排序功功 能:能:表中数据从乱序表中数据从乱序2525、46 46、3 3、75 75、5 5、3030 到升序到升序 3 3、5 5、25 25、30 30、46 46、75 75 方方 法:法:全比较法全比较法 (效率较低)(效率较低)标志位识别法标志位识别法 (本例所用)(本例所用)综合合程序设计程序设计实例例1 1 本讲稿第四十四页,共六十二页数数表的表的处理理 气泡法气泡法排序排序方法一方法一 全比

35、较法全比较法 若表数据项为若表数据项为N N,要进行,要进行N-1N-1次排序操作次排序操作第一次,经比较将最小数放入表顶第一次,经比较将最小数放入表顶 第二次,经比较将次小数放入表次顶第二次,经比较将次小数放入表次顶 .第第N-2N-2次,经比较将次大数放入表次底次,经比较将次大数放入表次底 第第N-1N-1次,经比较将最大数放入表底次,经比较将最大数放入表底 本讲稿第四十五页,共六十二页数数表的表的处理理 气泡法气泡法排序排序方法二方法二 标志位识别法标志位识别法 设排序标志设排序标志 F F 若标志若标志 F=-1F=-1 进入比较排序程序进入比较排序程序 若标志若标志 F=0 F=0

36、数己排好,退出比较排序程序数己排好,退出比较排序程序 注注:对对 N N 项数,排序次数项数,排序次数 N-1 N-1 本讲稿第四十六页,共六十二页数数表的表的处理理 气泡法气泡法排序排序流流程程图标志(BL)=-1 开开 始始(BL)=0 结束结束(BL)=0 标志标志(CX)=N 1 计数计数(SI)=N 1 指针指针 j-1 j j-1 j(BL)=-1(SI)=(SI)-1(CX)=(CX)-1(CX)=0 Y YY YY Y本讲稿第四十七页,共六十二页数数表的表的处理理 气泡法气泡法排序排序数据段定义数据段定义 SORTD SEGMENTSORTD SEGMENT ;段名;段名 SO

37、RTDSORTD ARRAY DB 25ARRAY DB 25,4646,3 3,7575,5 5,3030 COUNT EQU$-ARRAYCOUNT EQU$-ARRAY ;数据个数;数据个数 SORTD ENDSSORTD ENDS本讲稿第四十八页,共六十二页数数表的表的处理理 气泡法气泡法排序排序气泡图(从下向上比大)25463755303254657530352546307535253046753525304675原数据原数据第一次第一次第二次第二次第三次第三次重排一次重排一次本讲稿第四十九页,共六十二页数数表的表的处理理 气泡法气泡法排序排序代码段编程代码段编程 CODE SEGM

38、ENT CODE SEGMENT ;段名为;段名为 CODECODE ASSUME CS:CODE,DS:SORTD ASSUME CS:CODE,DS:SORTD SORD PROC FAR SORD PROC FAR ;过程名为;过程名为 SORDSORD START:PUSH DS START:PUSH DS MOV AX,0 MOV AX,0 PUSH AX PUSH AX MOV AX,SORTD MOV AX,SORTD MOV DS,AX MOV DS,AX ;过程定义标准写法;过程定义标准写法本讲稿第五十页,共六十二页 MOV BL,0FFH ;MOV BL,0FFH ;标志标

39、志(BL)=-1(BL)=-1AG0:CMP BL,0AG0:CMP BL,0 JZ DONE JZ DONE MOV BL,0 MOV BL,0 MOV CX,COUNT MOV CX,COUNT DEC CX ;(CX)=N 1 DEC CX ;(CX)=N 1 MOV SI,COUNT MOV SI,COUNT DEC SI ;SI DEC SI ;SI指向表底指向表底 AG1:MOV AL,SIAG1:MOV AL,SI CMP AL,SI 1 CMP AL,SI 1 JAE UNCH ;SI SI-1 JAE UNCH ;SI SI-1 不交换不交换 XCHG AL,SI 1XCHG

40、 AL,SI 1 MOV SI,AL ;SI MOV SI,AL ;SISI-1SI-1交换交换 MOV BL,0FFH ;MOV BL,0FFH ;有交换有交换,未排好未排好,重排重排,(BL)=-1,(BL)=-1 UNCH:DEC SIUNCH:DEC SI DEC CX DEC CX JNZ AG1 ;JNZ AG1 ;一个数排好一个数排好 JMP AG0 ;JMP AG0 ;所有数排好所有数排好DONE:RET ;DONE:RET ;过程返回过程返回 SORD ENDP ;SORD ENDP ;过程结束过程结束 CODE ENDS ;CODE ENDS ;代码段结束代码段结束 END

41、 START ;END START ;汇编结束汇编结束本讲稿第五十一页,共六十二页数数表的表的处理理 气泡法气泡法排序排序程序的改进程序的改进 在显示屏上观察排序的过程在显示屏上观察排序的过程 方法方法 在指令在指令 JNZ AG1JNZ AG1与指令与指令 JMP AG0 JMP AG0 之间之间 插入显示程序插入显示程序过程过程 JNZ AG1 ;JNZ AG1 ;一个数排好一个数排好 插入显示程序插入显示程序 JMP AG0 ;JMP AG0 ;所有数排好所有数排好 本讲稿第五十二页,共六十二页数数表的表的处理理 气泡法气泡法排序排序显示程序显示程序 MOV DH,COUNT ;MOV

42、DH,COUNT ;显示显示COUNTCOUNT个数据个数据(本例为本例为6 6个个)LEA DI,ARRAY ;LEA DI,ARRAY ;从表首址开始从表首址开始 ABC:MOV AL,DIABC:MOV AL,DI MOV AH,0 ;MOV AH,0 ;将将ALAL扩展到扩展到AXAX MOV BH,10 ;MOV BH,10 ;除数为除数为1010 DIV BH ;DIV BH ;数的十位数的十位 (AL),(AL),个位个位 (AH)(AH)MOV BH,AH ;BH MOV BH,AH ;BH暂存暂存AHAH中数中数,AH,AH下面要用下面要用 MOV AH,2 ;INT 21H

43、MOV AH,2 ;INT 21H的的2 2号功能为显示字符号功能为显示字符 MOV DL,ALMOV DL,AL ADD DL,30H ;AL ADD DL,30H ;AL中数的中数的ASCIIASCII码入码入DLDL INT 21H ;INT 21H ;显示十位数显示十位数 MOV DL,BHMOV DL,BH ADD DL,30H ADD DL,30H INT 21H ;INT 21H ;显示个位数显示个位数 MOV DL,MOV DL,INT 21H ;INT 21H ;显示两数间的空格显示两数间的空格 本讲稿第五十三页,共六十二页综合程序程序设计实例2 有一组数据(16位而进制数)

44、存放在缓冲区BUF1中,数据个数保存在BUF的头两个字节中。要求编写程序实现在缓冲区中查找某一数据,如果缓冲区中没有该数据,则将它插入到缓冲区的最后;如果缓冲区中有多个被查找的数据,则只保留第一个,将其余的删除。本讲稿第五十四页,共六十二页STACK SEGMENT STACK STACK DW 100H DUP(?)TOP LABEL WORD STACK ENDS;设缓冲区原有10个字,指定的数据为(NEW)56AAH DATA SEGMENT BUF DW 10 DW 1000H,0025H,6730H,6758H,7344H,2023H,0025H6745H,10A7H,0B612H

45、DW 10 DUP(?)NEW DW 56AAH DATA ENDS 本讲稿第五十五页,共六十二页CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP 本讲稿第五十六页,共六十二页;搜索指定的数据 MOV CX,BUF LEA SI,BUF+2 MOV AX,NEW L1:CMP AX,SI JZ L2 INC SI INC SI LOOP L1;没有找到,则插入数据;没有找到,则插入数据 MOV S

46、I,AX MOV SI,AX INC BUF INC BUF JMP OKJMP OK ;找到后,在剩余部分搜索重复的数据 L2:DEC CX INC SI INC SI L3:CMP AX,SI JZ L4 INC SI INC SI LOOP L3 JMP OK 本讲稿第五十七页,共六十二页;找到一个重复数据,则删除它 L4:PUSH SI DEC CX PUSH CX MOV DI,SI INC SI INC SI CLD REP MOVSW DEC BUF POP CX POP SI JMP L3;删除后,返回继续搜索重复的数据 OK:MOV AH,4CH;返回DOS MOV AL,0

47、 INT 21H CODE ENDS END START 本讲稿第五十八页,共六十二页综合程序程序设计实例3 存储器中有一串字符串首地址为BUF,字符串长度小于256,要求分别求出其中数字“0”“9”,字母“A”“Z”和其他字符的个数,并分别将他们的个数存放到此字符串的下面三个单元中。本讲稿第五十九页,共六十二页DATA SEGMENTBUF DB N DB 01H,38H,47H,50H,.,56HNUM DB 3 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV CH,N MOV BX,1 MOV DX,0本讲稿第六十页,共六十二页LP:MOV AH,BUFBX CMP AH,30H JL NEXT CMP AH,39H JG ABC INC DH JMP NEXTABC:CMP AH,41H JL NEXT CMP AH,5AH JG NEXT INC DL本讲稿第六十一页,共六十二页NEXT:INC BX DEC CH JNZ LP MOV BUFBX,DH MOV BUFBX+1,DL MOV AH,N SUB AH,DH SUB AH,DL MOV BUFBX+2,AHCODE ENDS END START本讲稿第六十二页,共六十二页

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

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

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

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