《第四章汇编程序精选PPT.ppt》由会员分享,可在线阅读,更多相关《第四章汇编程序精选PPT.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章汇编程序第1页,此课件共62页哦第第四章四章 汇编编语言言程序设计程序设计 汇编语言语句的类型和组成 伪操作命令 DOS系统功能调用和BIOS中断调用 汇编语言程序设计第2页,此课件共62页哦汇编编语言言语句的句的组成成1 1指令性语句。即执行性语句指令性语句。即执行性语句(指令指令)包括四部分:包括四部分:标号:标号:指令操作码指令操作码 操作数操作数 ;注释注释 AGANAGAN:ADC SUMADC SUM,AXAX2 2指示性语句。即说明性语句指示性语句。即说明性语句(伪指令伪指令),),由四部分组成:由四部分组成:名字名字 伪指令伪指令 操作数操作数 ;注释注释 SUMSUMD
2、W 0DW 0;为结果保留一个字为结果保留一个字3.3.宏指令语句。宏指令语句。宏名宏名 宏操作助记符宏操作助记符 操作数操作数 ;注释;注释 第3页,此课件共62页哦汇编编语言言对标识符的符的规定定可用符号包括数字、字母和特殊符号可用符号包括数字、字母和特殊符号?、$、_ _。数字数字不能作为名字(变量或标号)的不能作为名字(变量或标号)的第一个符号第一个符号。名字的长度名字的长度不不能超过能超过3131个字符个字符。汇编语言中有特定含义的汇编语言中有特定含义的保留字保留字,如操作码、寄存器名等,如操作码、寄存器名等,不能作为名字使用。不能作为名字使用。不不区分字母的大小写。区分字母的大小写
3、。第4页,此课件共62页哦DATASEGMENT;定定义数据数据段段X DB 2DATAENDS;数据数据段定段定义结结束束STACK SEGMENT PARA STACK STACK;定定义堆堆栈段段DB 100 DUP(?)(?);100字字节的的栈空空间间STACKENDS;堆堆栈段定段定义结结束束CODESEGMENT;定定义代代码段段ASSUME DS:DATA,SS:STACK,CS:CODE;对各段各段进行行说明明BEGIN:MOV AX,DATA;DS初初始化始化为DATA MOV DS,AX MOV BH,X CODEENDS;代;代码段段结结束束ENDBEGIN;整;整个程
4、序结个程序结束束 汇编编语言言程序结构程序结构定义存储单定义存储单元的数据元的数据定义堆栈定义堆栈第5页,此课件共62页哦 汇编编语言开言开发过程程一、上机前的软件准备:一、上机前的软件准备: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 等)等)第6页,此课件共62页哦编编辑辑文本编辑器,如 EDIT.COM源程序:文件名源程序:文件名.asm汇汇编编汇编程序,如 ML.EXE目标模块:文件名目标模块:文件名.obj连连接接连接程序,如 LINK.EXE可执行文件:文件名可执行文件:文件名.exe调调试试调试程序,如 CodeView应用程序应用程序错误错误错误错误错误错误错误错误汇编编语言言程序程序的开的开发过程程第7页,此课件共62页哦1.1.OFFSETOFFSET运算符运算
6、符当当OFFSETOFFSET运算符置于变量或标号前时,汇编程序就自动运算符置于变量或标号前时,汇编程序就自动计算出该变量或标号在它段内的偏移地址。计算出该变量或标号在它段内的偏移地址。如:如:BUFFER DB 34BUFFER DB 34,5656,7979,1212MOV SIMOV SI,OFFSET BUFFEROFFSET BUFFER 运算符运算符第8页,此课件共62页哦运算符运算符2.PTR2.PTR运算符运算符表达式返回一个与原操作数具有相同的段基址和偏移量,但类型表达式返回一个与原操作数具有相同的段基址和偏移量,但类型不同的操作数。不同的操作数。格式:格式:类型类型 PTR
7、 PTR 地址表达式地址表达式如:如:MOV BYTE PTR MOV BYTE PTRSISI,20H20H MOV WORD PTR MOV WORD PTRSISI,20H20H第9页,此课件共62页哦基本基本伪指令指令-符号定义伪指令符号定义伪指令 基本形式:基本形式:符号名符号名EQUEQU表达式表达式 符号名符号名 =常数表达式常数表达式功能:给表达式指定一个等价的符号名。功能:给表达式指定一个等价的符号名。说明:说明:(1 1)=后后的的表表达达式式只只能能是是常常数数,对对于于字字符符或或字字符符串串,汇汇编编时时按按整数处理。例如:整数处理。例如:COUNTCOUNT=202
8、0MOV CX,COUNTMOV CX,COUNT;等价于等价于MOV CX,20MOV CX,20(2 2)EQUEQU后后的的表表达达式式可可以以是是数数值值、字字符符串串、寄寄存存器器名名、指指令令助助记记符等。符等。(3 3)EQUEQU不不能能重重复复定定义义,而而 =可可重重复复定定义义,其其作作用用域域从从定定义义点到重新定义之前。点到重新定义之前。第10页,此课件共62页哦基本基本伪指令指令-数据数据类型型定定义伪指令指令DB DB(Define ByteDefine Byte)DW DW(Define WordDefine Word)DDDD (Define DWordDef
9、ine DWord)操作数可以为:操作数可以为:(1 1)数值表达式;)数值表达式;(2 2)ASCASC码字符串;码字符串;(3 3)地址表达式;)地址表达式;(4 4)?(只保存内存空间,未定义初始值);)?(只保存内存空间,未定义初始值);(5 5)DUP DUP 子句子句格式:格式:重复次数重复次数 DUP DUP (操作数,(操作数,操作数),操作数)DUPDUP子句可以嵌套。子句可以嵌套。第11页,此课件共62页哦DBDB、DW DW 的应用特点的应用特点DATA SEGMENTARE1 DB 20H,30H ARE2 DW 2030HARE3 DB A B ARE4 DW?DAT
10、A 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)基本基本伪指令指令-数据数据类型型定定义伪指令指令第12页,此课件共62页哦基本基本伪指令指令-地址地址计数计数器器伪指令$表示下一个地址变量的偏移地址值表示下一个地址变量的偏移地址值 SORTD
11、 SEGMENT ARRAY DB 25,46,3,75,5 COUNT EQU$-ARRAY SORTD ENDS ARRAY的偏移地址值为的偏移地址值为0000H$的偏移地址值为的偏移地址值为0005H COUNT=0005H 0000H=525463755ARRAYARRAY0000H0000H0005H0005H$第13页,此课件共62页哦 汇编编语言言程序设计程序设计程序设计一般应按下述步骤进行程序设计一般应按下述步骤进行(对于给定的课题进行程序设计):(对于给定的课题进行程序设计):1 1依据设计任务,建立数学模型。依据设计任务,建立数学模型。2 2确定算法或求解的具体步骤和方法。
12、确定算法或求解的具体步骤和方法。3 3绘制出程序流程框图。绘制出程序流程框图。4 4分配存储空间及工作单元(包括寄存器)。分配存储空间及工作单元(包括寄存器)。5 5依据流程图编写程序。依据流程图编写程序。6 6静态检查(检查指令是否合适,是否有语法和格式错误)。静态检查(检查指令是否合适,是否有语法和格式错误)。7 7上机调试。上机调试。第14页,此课件共62页哦 基本程序设计基本程序设计顺序程序设计顺序程序设计 指令指针指令指针IPIP值线性增加值线性增加条件程序设计条件程序设计 IPIP值受标志位的影响而跳变值受标志位的影响而跳变循环程序设计循环程序设计 IPIP值受计数器值受计数器CX
13、CX中的值不为零而循环中的值不为零而循环第15页,此课件共62页哦DOS系统功能调用 DOS系统将输入/输出管理程序编写成一系列子程序,不仅系统可以使用,用户也可以像调用子程序一样方便的使用它们。在IBM PC系统中,除了DOS系统中有一组输入/输出子程序可供用户调用外,在系统的ROM中也有一组输入/输出管理程序可供用户使用,这组程序常称为ROM BIOS(ROM Basic I/O System)。第16页,此课件共62页哦DOS系统功能调用 DOS DOS 共提供了共提供了约100100个个功功能能调用用,按其完按其完成成的功的功能能大致大致可可以以分分为以以下下几几类:基本输入基本输入/
14、输出的管理(如键盘、显示器等)输出的管理(如键盘、显示器等)文件管理文件管理 目录管理等目录管理等 调用方法:调用方法:为了使用的方便,为了使用的方便,DOSDOS所有功能的子程序已按序编号所有功能的子程序已按序编号功功能号,从能号,从00H-68H00H-68H。DOSDOS规定用定用软件件中中断指令断指令INT 21HINT 21H进入入DOSDOS功功能能调用子用子程序程序的的总入口入口,再再以以具具体体的功的功能能号号进入相入相应应各各个个子子程序程序的入口的入口。第17页,此课件共62页哦DOS系统功能调用具体调用方法为:具体调用方法为:MOV AHMOV AH,功能号,功能号入口参
15、数入口参数指定寄存器指定寄存器INT 21HINT 21H取出口参取出口参数数 常用功能子程序功能号键盘输入单字符01H键盘输入字符串0AH输出单字符02H输出字符串09H返回操作系统4CH第18页,此课件共62页哦带回回显的字符的字符输入入,功功能能号号01H01H功能功能:从标准输入设备(如键盘)输入一个字符,并显示在标:从标准输入设备(如键盘)输入一个字符,并显示在标 准输出设备(如准输出设备(如CRTCRT)上。如无字符输入,则等待。)上。如无字符输入,则等待。入口参数入口参数:无:无返回值返回值:AL=AL=输入字符的输入字符的ASCIIASCII码码例:例:MOV AH MOV A
16、H,01H01H;功能编号;功能编号 INT 21HINT 21H;调用;调用 CMP ALCMP AL,0DH0DH;输入字符是回车符吗?;输入字符是回车符吗?第19页,此课件共62页哦字符字符输出出,功功能能号号02H02H功能功能:将一个字符(:将一个字符(ASCIIASCII码)输出到标准输出设备(如码)输出到标准输出设备(如 CRT CRT)上)上入口参数入口参数:DL=DL=即将输出字符的即将输出字符的ASCIIASCII码码返回值返回值:无:无例:例:MOV DL MOV DL,$;欲输出一个;欲输出一个“$”$”符号符号 MOV AHMOV AH,02H02H;功能编号;功能编
17、号 INT 21HINT 21H;调用;调用第20页,此课件共62页哦输出字符串出字符串,功功能能号号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;调用;调用第21页,此课件共62页哦带缓冲区的字符串冲区的字符串输入入,功功能能号号0AH0AH功能:功能:由用户提供缓冲区,从标准输入设备输入一个以回车符由用户提供缓冲区,从标准输入设备输入一个以回车符 (0DH0DH)结束的字符串并接收在缓冲区内,同时回显在标)结束的字符串并接收在缓冲区内,同时回显在标 准输出设备上(不显示回车符)。准输出设备上(不显示回车符)。入口参数:入口参数:地址指针地址指针DSDXDSDX,指向接收缓冲区的首址,指向接收缓冲区的首址返回值返回值:无:无例:例:STR
19、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;实际串长;实际串长第22页,此课件共62页哦例例1 1:计算:计算Y=X1+X2+X3Y=X1+X2+X3。表达式表达式Y=X1+X2+X3Y=X1+X2
20、+X3的计算过程可采用顺序执行的方法来完的计算过程可采用顺序执行的方法来完成成:首先读入数据首先读入数据X1X1、X2X2、X3X3;其次计算;其次计算X1X1、X2X2、X3X3的和;的和;最后保存结果到指定变量最后保存结果到指定变量Y Y中。中。根据计算步骤编写汇编语言程序:利用伪指令确定存储器根据计算步骤编写汇编语言程序:利用伪指令确定存储器的分配,将的分配,将X1X1、X2X2、X3X3定义为字变量;按照汇编语言源程序结定义为字变量;按照汇编语言源程序结构要求编写源程序。构要求编写源程序。思考:计算思考:计算D=(A+B)*4D=(A+B)*4C C第23页,此课件共62页哦DATA
21、SEGMENTDATA SEGMENT DATA1 DW X1,X2,X3,?DATA1 DW X1,X2,X3,?DATA ENDSDATA ENDSCODE 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 DATA1+
22、6DATA1+6,AX,AX HLT HLTCODE ENDSCODE ENDS END START END START第24页,此课件共62页哦例例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,07H A
23、DD 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第25页,此课件共62页哦 例例3 3:用查表法求:用查表法求Z=XZ=X3 3DATA SEGMENT DATA SEGMENT TABLE DB 0,1,8,27,64,125,TABLE DB 0,1,8,27,64,125,216 216 XVAL DB 6 XVAL DB 6 YVAL DB?YVAL DB?DATA ENDSDATA ENDSSTACK SEGMENTSTAC
24、K 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 END START
25、第26页,此课件共62页哦分支分支结构程序设计结构程序设计 程序中所产生的分支是由条件转移指令来完成的。程序中所产生的分支是由条件转移指令来完成的。第27页,此课件共62页哦例例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 ;为零结束;为零结束 CMP ALCMP
26、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:MOV AHLP2:
27、MOV AH,4CH 4CH ;带返回码结束;带返回码结束INT 21HINT 21H INT 21H INT 21H 第28页,此课件共62页哦例例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 MOV AL,1 MOV
28、 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第31页,此课件共62页哦例例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、分析:分析:第32页,此课件共62页哦 循循环环结结构构程程序序设设计计针针对对的的是是处处理理一一些些重重复复进进行行的的过过程程的的操操作作。使用循环结构形式设计程序时,使用循环结构形式设计程序时,通常将循环程序划分三个部分:通常将循环程序划分三个部分:循环的初始化部分:循环的初始化部分:变量赋初值。变量赋初值。循环体:循环体:可以有一个或多个。可以有一个或多个。循环控制部分:循环控制部分:是否结束循环的条件。是否结束循环的条件。知道循环次数:可采用循环计数控制循环的结束;知道循环次数:可采用循环计数控制循环的结束;不不知知道道循循环环次次数数:多多采采用用结结果果及及给给定定特特征征作作
31、为为条条件件来来控控制制循循环环的的结结束。束。循环程序设计循环程序设计第37页,此课件共62页哦一般循环次数有可能为零时,选择一般循环次数有可能为零时,选择DO_WHILEDO_WHILE形式结构,形式结构,否则选择否则选择DO_UNTILDO_UNTIL结构形式。结构形式。循环程序设计循环程序设计DO_UNTILDO_UNTIL(直到型循环结构)(直到型循环结构)DO_WHILEDO_WHILE(当型循环结构)(当型循环结构)第38页,此课件共62页哦 (a)(a)单循环结构;单循环结构;(b)(b)双循环结构双循环结构 在多重循环程序设计中应注意:在多重循环程序设计中应注意:内循环体可以
32、几个并列在外内循环体可以几个并列在外循环体内,但内循环体之间不循环体内,但内循环体之间不得交叉。得交叉。多重循环中可从内循环体转多重循环中可从内循环体转移到外循环体,但不允许外循移到外循环体,但不允许外循环体直接转到内循环体中。环体直接转到内循环体中。所编程序不能形成死循环程所编程序不能形成死循环程序。序。循环程序设计循环程序设计第39页,此课件共62页哦例例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第40页,此课件共62页哦 例2:计算和清和清0 AX计数初值计数初值100
34、CX(AX)=(AX)+(CX)(CX)=(CX)-1(CX)=0 SUM=(AX)Y YN N流程图流程图第41页,此课件共62页哦数表的处理 气泡法排序功功 能:能:表中数据从乱序表中数据从乱序2525、46 46、3 3、75 75、5 5、3030 到升序到升序 3 3、5 5、25 25、30 30、46 46、75 75 方方 法:法:全比较法全比较法 (效率较低)(效率较低)标志位识别法标志位识别法 (本例所用)(本例所用)综合合程序设计程序设计实例例1 1 第44页,此课件共62页哦数数表的表的处理理 气泡法气泡法排序排序方法一方法一 全比较法全比较法 若表数据项为若表数据项为
35、N N,要进行,要进行N-1N-1次排序操作次排序操作第一次,经比较将最小数放入表顶第一次,经比较将最小数放入表顶 第二次,经比较将次小数放入表次顶第二次,经比较将次小数放入表次顶 .第第N-2N-2次,经比较将次大数放入表次底次,经比较将次大数放入表次底 第第N-1N-1次,经比较将最大数放入表底次,经比较将最大数放入表底 第45页,此课件共62页哦数数表的表的处理理 气泡法气泡法排序排序方法二方法二 标志位识别法标志位识别法 设排序标志设排序标志 F F 若标志若标志 F=-1F=-1 进入比较排序程序进入比较排序程序 若标志若标志 F=0 F=0 数己排好,退出比较排序程序数己排好,退出
36、比较排序程序 注注:对对 N N 项数,排序次数项数,排序次数 N-1 N-1 第46页,此课件共62页哦数数表的表的处理理 气泡法气泡法排序排序流流程程图标志(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第47页,此课件共62页哦数数表的表的处理理 气泡法气泡法排序排序数据段定义数据段定义 SORTD SEGMENTSORTD SEGMENT ;段名;段名 SORTDSORTD ARRAY DB 25AR
37、RAY DB 25,4646,3 3,7575,5 5,3030 COUNT EQU$-ARRAYCOUNT EQU$-ARRAY ;数据个数;数据个数 SORTD ENDSSORTD ENDS第48页,此课件共62页哦数数表的表的处理理 气泡法气泡法排序排序气泡图(从下向上比大)25463755303254657530352546307535253046753525304675原数据原数据第一次第一次第二次第二次第三次第三次重排一次重排一次第49页,此课件共62页哦数数表的表的处理理 气泡法气泡法排序排序代码段编程代码段编程 CODE SEGMENT CODE SEGMENT ;段名为;段名
38、为 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 ;过程定义标准写法;过程定义标准写法第50页,此课件共62页哦 MOV BL,0FFH ;MOV BL,0FFH ;标志标志(BL)=-1(BL)=-1AG0:CMP B
39、L,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 AL,SI 1 MOV SI,AL ;SI M
40、OV 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 START ;END START ;汇编结束汇
41、编结束第51页,此课件共62页哦数数表的表的处理理 气泡法气泡法排序排序程序的改进程序的改进 在显示屏上观察排序的过程在显示屏上观察排序的过程 方法方法 在指令在指令 JNZ AG1JNZ AG1与指令与指令 JMP AG0 JMP AG0 之间之间 插入显示程序插入显示程序过程过程 JNZ AG1 ;JNZ AG1 ;一个数排好一个数排好 插入显示程序插入显示程序 JMP AG0 ;JMP AG0 ;所有数排好所有数排好 第52页,此课件共62页哦数数表的表的处理理 气泡法气泡法排序排序显示程序显示程序 MOV DH,COUNT ;MOV DH,COUNT ;显示显示COUNTCOUNT个数
42、据个数据(本例为本例为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 21HMOV AH,2 ;INT 21H的的2 2号功能为
43、显示字符号功能为显示字符 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 ;显示两数间的空格显示两数间的空格 第53页,此课件共62页哦综合程序程序设计实例2 有一组数据(16位而进制数)存放在缓冲区BUF1中,数据个数保存在BUF的头两个字
44、节中。要求编写程序实现在缓冲区中查找某一数据,如果缓冲区中没有该数据,则将它插入到缓冲区的最后;如果缓冲区中有多个被查找的数据,则只保留第一个,将其余的删除。第54页,此课件共62页哦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 DW 10 DUP(?)NEW DW 56AAH DAT
45、A ENDS 第55页,此课件共62页哦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 第56页,此课件共62页哦;搜索指定的数据 MOV CX,BUF LEA SI,BUF+2 MOV AX,NEW L1:CMP AX,SI JZ L2 INC SI INC SI LOOP L1;没有找到,则插入数据;没有找到,则插入数据 MOV SI,AX MOV SI,AX INC BUF INC BUF
46、 JMP OKJMP OK ;找到后,在剩余部分搜索重复的数据 L2:DEC CX INC SI INC SI L3:CMP AX,SI JZ L4 INC SI INC SI LOOP L3 JMP OK 第57页,此课件共62页哦;找到一个重复数据,则删除它 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 INT 21H CODE ENDS END START 第5
47、8页,此课件共62页哦综合程序程序设计实例3 存储器中有一串字符串首地址为BUF,字符串长度小于256,要求分别求出其中数字“0”“9”,字母“A”“Z”和其他字符的个数,并分别将他们的个数存放到此字符串的下面三个单元中。第59页,此课件共62页哦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第60页,此课件共62页哦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第61页,此课件共62页哦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第62页,此课件共62页哦
限制150内