资源预览内容
第1页 / 共84页
第2页 / 共84页
第3页 / 共84页
第4页 / 共84页
第5页 / 共84页
第6页 / 共84页
第7页 / 共84页
第8页 / 共84页
第9页 / 共84页
第10页 / 共84页
亲,该文档总共84页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术1.字符串操作字符串操作2.宏功能程序设计宏功能程序设计3.模块化程序设计模块化程序设计第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.1.2 5.1.2 5.1.2 5.1.2 串操作指令串操作指令串操作指令串操作指令(1)MOVS(MoveString):):串传送串传送语法格式:语法格式:MOVSBMOVSWMOVSOPD,OPS功能描述:功能描述:MOVS(B/W)将将DS:SI所所指指源源串串的的1个个元元素素(字字节节/字字)复复制制到到ES:DI所所指指的的内内存存单单元元。然然后后,SI和和DI增增加加或或减减少少1/2。若若DF=0,则增加,否则减少。则增加,否则减少。对标志位的影响:无。对标志位的影响:无。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术(2 2 2 2)CMPSCMPSCMPSCMPS(Compare StringsCompare StringsCompare StringsCompare Strings):):):):串比较串比较串比较串比较 语法格式:语法格式:CMPS OPD,OPSCMPS OPD,OPSCMPSBCMPSBCMPSWCMPSW功能描述:功能描述:CMPSCMPS(B/WB/W)将将DS:SIDS:SI所所指指源源串串的的1 1个个元元素素(字字节节/ /字字)与与ES:DIES:DI所所指指目目的的串串的的1 1个个元元素素(字字节节/ /字字)进进行行比比较较,根根据据比比较较结结果果设设置置标标志志位位。然然后后,SISI和和DIDI增增加加或或减减少少1/21/2。若若DF DF = 0= 0,则增加,否则减少。则增加,否则减少。 对标志位的影响:同对标志位的影响:同CMPCMP。5.1.2 5.1.2 5.1.2 5.1.2 串操作指令串操作指令串操作指令串操作指令第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术(3 3 3 3)SCASSCASSCASSCAS(Scan StringScan StringScan StringScan String):):):):串扫描串扫描串扫描串扫描 语法格式:语法格式:SCAS OPDSCAS OPDSCASBSCASBSCASWSCASW 功功能能描描述述:SCASSCAS(B/WB/W)将将AL/AXAL/AX与与ES:DIES:DI所所指指目目的的串串的的1 1个个字字节节/ /字字进进行行比比较较,根根据据比比较较结结果果设设置置标标志志位位。然然后后,DIDI增加或减少增加或减少1/21/2。若。若DF = 0DF = 0,则增加,否则减少。则增加,否则减少。 5.1.2 5.1.2 5.1.2 5.1.2 串操作指令串操作指令串操作指令串操作指令第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术(4 4 4 4)LODSLODSLODSLODS(Load StringLoad StringLoad StringLoad String):):):):串装入串装入串装入串装入 语法格式:语法格式:LODS OPSLODS OPSLODSBLODSBLODSWLODSW功功能能描描述述: LODSLODS(B/WB/W)将将DS:SIDS:SI所所指指源源串串的的1 1个个元元素素(字字节节/ /字字)复复制制到到AL/AXAL/AX。然然后后,SISI增增加加或或减减少少1/2/41/2/4。若若DF = 0DF = 0,则增加,否则减少。则增加,否则减少。 对标志位的影响:无。对标志位的影响:无。5.1.2 5.1.2 5.1.2 5.1.2 串操作指令串操作指令第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术(5 5 5 5)STOSSTOSSTOSSTOS(Store StringStore StringStore StringStore String):):):):串存储串存储串存储串存储 语法格式:语法格式:STOS OPDSTOS OPDSTOSBSTOSBSTOSWSTOSW功功能能描描述述: STOSSTOS(B/WB/W)将将AL/AXAL/AX的的值值复复制制到到ES:DIES:DI所所指指的的内内存存单单元元。然然后后,DIDI增增加加或或减减少少1/21/2。若若DF DF = = 0 0,则则增增加,否则减少。加,否则减少。 对标志位的影响:无。对标志位的影响:无。5.1.2 5.1.2 5.1.2 5.1.2 串操作指令串操作指令第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术(6 6 6 6)重复前缀重复前缀重复前缀重复前缀REPREP; ; 当当CX 0CX 0时,重复执行后面的串指令时,重复执行后面的串指令; ; 每执行每执行1 1次,次,CX = CX CX = CX 1 1; ; 只能用在只能用在MOVSMOVS、LODSLODS或或STOSSTOS(B/WB/W)之前)之前REPZ/REPEREPZ/REPE; ;当当CX 0CX 0且且ZF = 1ZF = 1时,重复执行后面的串指令时,重复执行后面的串指令; ; 每执行每执行1 1次,次,CX = CX CX = CX 1 1; ; 只能用在只能用在CMPSCMPS(B/W/DB/W/D)或)或SCASSCAS(B/WB/W)之前)之前REPNZ/REPNEREPNZ/REPNE ; ; 当当CX 0CX 0且且ZF = 0ZF = 0时,重复执行后面的串指令时,重复执行后面的串指令; ; 每执行每执行1 1次,次,CX = CX CX = CX 1 1; ; 只能用在只能用在CMPSCMPS(B/W/DB/W/D)或)或SCASSCAS(B/WB/W)之前)之前说明:若说明:若CXCX初值为初值为0 0,则不执行任何操作,而且标志位不变。,则不执行任何操作,而且标志位不变。5.1.2 5.1.2 5.1.2 5.1.2 串操作指令串操作指令串操作指令串操作指令第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术 1. 1. 串指令的共性串指令的共性源串:地址由源串:地址由DS:SIDS:SI表示。表示。目的串:地址由目的串:地址由ES:DIES:DI表示。表示。自自动动修修改改地地址址:每每次次数数据据操操作作后后,SISI和和DIDI自自动动递递增增或或递递减减,取取决决于于操操作作的的数数据据类类型型(字字节节、字字)以以及及DFDF的的值值。若若DF DF = = 0 0, 则则SISI和和DIDI自自动动增增加加1 1、2 2。否否则则,减减1 1、2 2。可可以使用以使用CLDCLD或或STDSTD指令设置指令设置DFDF。计计数数器器:使使用用重重复复前前缀缀时时,由由CXCX表表示示数数据据个个数数,每每重重复复1 1次操作,次操作,CXCX减减1 1。5.1.1 5.1.1 5.1.1 5.1.1 串操作指令简介(总结)串操作指令简介(总结)串操作指令简介(总结)串操作指令简介(总结)第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术2. 2. 串指令的用途串指令的用途串串指指令令主主要要用用于于处处理理连连续续的的内内存存单单元元,与与重重复复前前缀缀配配合合使使用更有效。例如:用更有效。例如:MOVSMOVS用于将一个内存块的数据复制到另一块;用于将一个内存块的数据复制到另一块;CMPSCMPS用于比较两个内存区的数据;用于比较两个内存区的数据;SCASSCAS可可以以在在一一个个内内存存区区中中扫扫描描与与给给定定值值首首次次匹匹配配或或不不匹匹配配的元素;的元素;STOSSTOS能将一个内存区的所有单元初始化为给定值。能将一个内存区的所有单元初始化为给定值。LODSLODS一般不用重复前缀。一般不用重复前缀。5.1.1 5.1.1 5.1.1 5.1.1 串操作指令简介(总结)串操作指令简介(总结)串操作指令简介(总结)串操作指令简介(总结)第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.1 5.1 5.1 5.1 字符串操作字符串操作字符串操作字符串操作实例实例实例实例例例1 1 将将以以STR1STR1为为首首址址的的字字节节存存储储区区中中存存放放的的字字符符串串传传送送到到以以STR2STR2为首址的字节存储区。为首址的字节存储区。DATA SEGMENTSTR1 DB ABCDEFGHIGKLLCOUNT = $-STR1STR2 DB COUNT DUP(0)DATA ENDSSTACK SEGMENT STACKDB 100 DUP(0)STACK ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,STR1LEADI,STR2MOVCX,COUNTCLDREPMOVSBMOVAH,4CHINT21HCODE ENDSEND BEGIN第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.1 5.1 5.1 5.1 字符串操作字符串操作字符串操作字符串操作实例实例实例实例例例2 2 从从键键盘盘输输入入一一字字符符串串至至STR1STR1为为首首址址的的字字节节缓缓冲冲区区,试试比比较较该该串串与与字字节节字字符符串串STR2STR2是是否否相相等等,若若相相等等,那那么么0BX0BX;否否则,则,0FFFFHBX0FFFFHBX。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.1 5.1 5.1 5.1 字符串操作字符串操作字符串操作字符串操作实例实例实例实例例例3 3 在字符串在字符串STRSTR中搜索子中搜索子串串AM,出现的次数送入,出现的次数送入BX。P:REPNE SCASB JE AJMP OUT1A:CMP BYTE PTR DI,MJNE BINC BXB:CMP CX,0JNE POUTA:第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.1 5.1 5.1 5.1 字符串操作字符串操作字符串操作字符串操作实例实例实例实例例例5 5 在在TABTAB命命令令存存储储区区中中存存放放着着若若干干条条命命令令,其其中中每每条条命命令令的的前前一一个个字字节节存存放放着着命命令令串串的的长长度度加加1 1,后后面面一一个个字字存存放放着着该该命命令令处处理理子子程程序序的的入入口口地地址址。设设计计一一命命令令解解释释程程序序,其其功功能能为为:检检查查用用户户输输入入的的命命令令,如如果果在在TABTAB存存储储区区能能查查到到该该命命令令,则则转转入入相相应应的的命命令令处处理理子子程程序序执执行行;如如果果查查不不到到,则则给给出出错错误误提提示示后后再再输输入入;如如果果用用户户未未输输入入命命令令,则则退退出出本程序的执行。本程序的执行。TAB: DB 4,DIRDW DIRDB 7,RENAMEDW RENAMEDB 4,DELDW DELDB 5,COPYDW COPY第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2 5.2 5.2 5.2 宏功能程序设计宏功能程序设计宏功能程序设计宏功能程序设计80868086宏宏汇汇编编语语言言提提供供的的宏宏功功能能主主要要包包括括:宏宏指指令令的的定定义与调用、重复汇编和条件汇编等。义与调用、重复汇编和条件汇编等。宏宏指指令令允允许许用用户户为为重重复复的的语语句句序序列列定定义义一一个个名名字字,然然后后在在程程序序中中用用这这个个名名字字代代替替这这个个语语句句序序列列,并并允允许许传传递递多多个参数,参数传递方式比子程序简单。个参数,参数传递方式比子程序简单。宏指令的使用步骤:宏指令的使用步骤:1.1.宏定义:宏定义:MACROMACRO、ENDMENDM;2.2.宏调用;宏调用;3.3.宏扩展。宏扩展。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.1 5.2.1 5.2.1 5.2.1 宏定义宏定义宏定义宏定义格式:格式:宏指令名宏指令名MACRO MACRO 形参表形参表 宏体宏体ENDMENDMMACROMACRO:宏定义的开始;:宏定义的开始;宏指令名:宏定义为宏指令序列规定的名称;宏指令名:宏定义为宏指令序列规定的名称;形形参参:个个数数不不限限,但但字字符符个个数数不不得得超超过过132132个个,形形参参间间用用逗逗 号隔开;号隔开;宏宏体体:宏宏指指令令代代替替的的程程序序段段,由由一一系系列列机机器器指指令令语语句句和和伪伪指令语句组成;指令语句组成;ENDMENDM:表示宏定义的结束,与:表示宏定义的结束,与MACROMACRO成对出现。成对出现。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.1 5.2.1 5.2.1 5.2.1 宏定义宏定义宏定义宏定义注意事项:注意事项:1.1.宏宏指指令令一一定定要要先先定定义义后后调调用用,因因此此,宏宏定定义义一一定定要要放放在在它的第一次调用之前;它的第一次调用之前;2.2.宏宏指指令令名名可可以以与与伪伪指指令令、机机器器指指令令的的助助记记符符同同名名且且具具有有比比机机器器指指令令、伪伪指指令令更更高高的的优优先先级级。当当它它们们同同名名时时,宏宏汇编程序将它们一律处理成相应的宏扩展。汇编程序将它们一律处理成相应的宏扩展。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.1 5.2.1 5.2.1 5.2.1 宏定义宏定义宏定义宏定义例例:某某程程序序中中要要经经常常输输出出缓缓冲冲区区中中的的字字符符串串,通通过过反反复复进进行行9 9号号DOSDOS功能调用完成:功能调用完成:LEA DX,BUF1LEA DX,BUF1MOVMOV AH,9AH,9INT 21HINT 21HLEA DX,BUF2LEA DX,BUF2MOVMOV AH,9AH,9INT 21HINT 21HWRITEMACROALEADX,AMOVAH,9INT21H可定义为宏可定义为宏第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.2 5.2.2 5.2.2 5.2.2 宏调用宏调用宏调用宏调用格式:格式:宏指令号宏指令号 实参表实参表 注注意意:实实参参要要与与宏宏定定义义中中的的形形参参按按位位置置关关系系一一一一对对应应。如如果果实实参参的的个个数数多多于于形形参参个个数数,多多余余的的实实参参被被忽忽略略;如果实参少于形参,则缺少的实参被处理为空白。如果实参少于形参,则缺少的实参被处理为空白。例如,对前面的宏定义可按下面的形式调用:例如,对前面的宏定义可按下面的形式调用:WRITE BUF1WRITE BUF1WRITE BUF2WRITE BUF2第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.3 5.2.3 5.2.3 5.2.3 宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数一、带间隔符的实参一、带间隔符的实参在在宏宏调调用用中中,有有时时实实参参是是一一串串带带间间隔隔符符(如如空空格格、逗逗号号等等)的的字字符符串串,为为了了防防止止混混淆淆,应应该该用用尖尖括括号号将将它它们们括起来,尖括号中的内容为一个实参。括起来,尖括号中的内容为一个实参。例如对堆栈段的宏定义:例如对堆栈段的宏定义:STACKMMACROASTACKSEGMENTSTACKDBASTACKENDSENDM第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.3 5.2.3 5.2.3 5.2.3 宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数一、带间隔符的实参一、带间隔符的实参在在当当前前程程序序中中,需需要要建建立立一一个个500500字字节节、初初值值均均为为0 0的堆栈段,宏调用为:的堆栈段,宏调用为:相应的宏扩展为:相应的宏扩展为:STACKM500DUP(0)+STACKSEGMENT+STACK+DB500DUP(0)+STACKENDS第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.3 5.2.3 5.2.3 5.2.3 宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数二、数字参数二、数字参数在在某某些些情情况况下下,需需要要以以实实参参符符号号的的值值而而不不是是符符号号本本身身来来替替换换形形参参,这这种种参参数数的的替替换换称称数数字字参参数数的的替替换换。特特殊殊宏宏操操作作符符% %将将其其后后的的表表达达式式转转换换成成它它所所代代表表的的数数值值,并并将将此此数值的数值的ASCIIASCII码字符嵌入到宏扩展中。码字符嵌入到宏扩展中。例如:例如:DATA1MACROA,B,C,DDWA,B,CDBDDUP(0)ENDM第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.3 5.2.3 5.2.3 5.2.3 宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数二、数字参数二、数字参数如果宏调用为:如果宏调用为:DW12,5,30DB15DUP(0)DWX+2,5,X+YDBY-5DUP(0)X=10Y=20DATA1%X+2,5,%X+Y,%Y-5DATA1X+2,5,X+Y,Y-5则相应的宏扩展为:则相应的宏扩展为:第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.3 5.2.3 5.2.3 5.2.3 宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数三、宏参数的连接三、宏参数的连接在在宏宏定定义义中中,有有些些形形参参夹夹在在字字符符串串中中,为为了了将将这这种种形形参参标标识识出出来来,需需在在这这样样的的形形参参前前面面加加符符号号& &,如如果果形形参参后后面还跟有字符串,则还应在形参后面加符号面还跟有字符串,则还应在形参后面加符号& &。例如:例如:SHIFTMACROA,B,CMOVCL,AS&BC,CLENDM第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.3 5.2.3 5.2.3 5.2.3 宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数三、宏参数的连接三、宏参数的连接如果宏调用为:如果宏调用为:MOV CL,4SALAX,CLMOV CL,2SARBH,CLSHIFT4,AL,AXSHIFT2,AR,BH则相应的宏扩展为:则相应的宏扩展为:第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.3 5.2.3 5.2.3 5.2.3 宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数四、宏体中的变量与标号四、宏体中的变量与标号在在宏宏定定义义中中,常常常常需需要要定定义义一一些些变变量量与与标标号号。当当这这些些宏宏定定义义在在同同一一程程序序中中多多次次调调用用并并扩扩展展后后,会会出出现现变变量量或或标号重复定义的错误。标号重复定义的错误。例如:例如:SUMMACROA,BMOVCX,AMOVBX,BMOVAX,0NEXT: ADDAX,BXADDBX,2LOOPNEXTENDM第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.3 5.2.3 5.2.3 5.2.3 宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数四、宏体中的变量与标号四、宏体中的变量与标号如果宏调用为:如果宏调用为:MOV CX,50MOVBX,1MOVAX,0NEXT:ADDAX,BXADDBX,2LOOPNEXTSUM 50,1SUM 20,10则相应的宏扩展为:则相应的宏扩展为:MOV CX,20MOVBX,10MOVAX,0NEXT:ADDAX,BXADDBX,2LOOPNEXT第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.3 5.2.3 5.2.3 5.2.3 宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数四、宏体中的变量与标号四、宏体中的变量与标号为为避避免免宏宏扩扩展展后后出出现现变变量量或或标标号号重重复复错错误误,80868086宏宏汇编语言了伪指令汇编语言了伪指令LOCALLOCAL来解决这一问题。来解决这一问题。语句格式:语句格式:LOCALLOCAL形式参数形式参数 ,形式参数,形式参数 功功能能:在在宏宏扩扩展展时时,汇汇编编程程序序自自动动为为其其后后的的形形参参生生成成特特殊殊符符号号(?0000?0000?FFFF?FFFF),并并用用这这些些特特殊殊符符号号来来取取代代宏宏体体中中的形参。的形参。注意:注意:LOCALLOCAL语句只能作为宏体的第一条语句。语句只能作为宏体的第一条语句。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.3 5.2.3 5.2.3 5.2.3 宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数宏定义与宏调用中的参数四、宏体中的变量与标号四、宏体中的变量与标号对对于于前前面面求求若若干干个个奇奇数数(偶偶数数)各各的的宏宏定定义义,可可以以改写为如下形式:改写为如下形式:SUMMACROA,BLOCALNEXTMOVCX,AMOVBX,BMOVAX,0NEXT: ADDAX,BXADDBX,2LOOPNEXTENDMMOV CX,50MOVBX,1MOVAX,0?0000:ADDAX,BXADDBX,2LOOPNEXTMOV CX,20MOVBX,10MOVAX,0?0001:ADDAX,BXADDBX,2LOOPNEXT第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.6 5.2.6 5.2.6 5.2.6 宏库的使用宏库的使用宏库的使用宏库的使用一、宏库的定义一、宏库的定义对对于于经经常常使使用用的的宏宏定定义义,可可将将它它们们集集中中在在一一起起,供供随时调用,例如建立宏库随时调用,例如建立宏库MACRO.LIBMACRO.LIB:READ MACROALEADX,AMOVAH,10INT21HENDMWRITEMACROALEADX,AMOVAH,9INT21HENDM第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.6 5.2.6 5.2.6 5.2.6 宏库的使用宏库的使用宏库的使用宏库的使用二、宏库的使用二、宏库的使用当当程程序序中中需需要要调调用用时时,首首先先将将宏宏库库加加入入自自己己的的源源文文件,然后按宏库中各宏定义的规定调用。件,然后按宏库中各宏定义的规定调用。语句格式:语句格式:INCLUDE INCLUDE 文本文件名文本文件名功功能能:将将指指定定的的文文本本文文件件从从本本行行起起加加入入汇汇编编,直直到到该该文文本本的最后一行汇编完后,再继续汇编的最后一行汇编完后,再继续汇编INCLUDEINCLUDE后面的语句。后面的语句。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.6 5.2.6 5.2.6 5.2.6 宏库的使用宏库的使用宏库的使用宏库的使用二、宏库的使用二、宏库的使用示示例例:从从键键盘盘输输入入一一串串字字符符到到BUFBUF缓缓冲冲区区,将将其其中中的的小小写写字字母转换成大写字母(其余字符不变)后仍在显示器上输出。母转换成大写字母(其余字符不变)后仍在显示器上输出。实实现现方方案案:利利用用MACRO.LIBMACRO.LIB中中的的宏宏定定义义READREAD、OUT1OUT1、CRLFCRLF实实现字符串的输入、显示一个字符、输出回车换行。现字符串的输入、显示一个字符、输出回车换行。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术READMACRO ALEA DX,AMOV AH,10INT 21HENDMCRLFMACROMOV AH,2MOV DL,0AHINT 21HMOV DL,0DHINT 21HENDMOUTCH MACRO AMOV DL,AMOV AH,2INT 21HENDMSTACKMMACRO ASTACK SEGMENT STACKDB ASTACK ENDSENDM文件文件MACRO.LIB中的宏定义:中的宏定义:第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术INCLUDE MACRO.LIBDATASEGMENTBUFDB 79DB 0DB 80 DUP(0)DATAENDSSTACKMCODESEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART: MOV AX,DATAMOV DS,AXREAD BUFLEA SI,BUF+2MOV CL,BUF+1MOV CH,0CLDCRLFY1:LODSBCMP AL,aJB Y2CMP AL,zJA Y2SUB AL,20HY2:OUTCH ALLOOP Y1CRLFMOV AH,4CHINT 21HCODEENDSEND START利用宏定义实现题目要求的功能:利用宏定义实现题目要求的功能:第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.7 5.2.7 5.2.7 5.2.7 宏指令与子程序的比较宏指令与子程序的比较宏指令与子程序的比较宏指令与子程序的比较1.1.处理时间不同:处理时间不同:宏宏指指令令在在汇汇编编期期间间由由宏宏汇汇编编程程序序处处理理,子子程程序序调调用用是是在目标程序执行期间由在目标程序执行期间由CPUCPU直接执行。直接执行。2.2.处理方式不同:处理方式不同:宏宏指指令令必必须须先先定定义义、后后调调用用,宏宏调调用用是是用用宏宏体体置置换换宏宏指指令令名名,实实参参置置换换形形参参,汇汇编编结结束束,宏宏定定义义也也随随之之消消失。子程序调用不发生代码和参数的置换。失。子程序调用不发生代码和参数的置换。3.3.目标程序的长度不同:目标程序的长度不同:宏宏指指令令导导致致目目标标程程序序长长,占占用用空空间间大大;而而子子程程序序无无论论调调用用多多少少次次,子子程程序序的的目目标标代代码码仅仅出出现现一一次次,因因此此目目标程序短,占用存储空间小。标程序短,占用存储空间小。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.2.7 5.2.7 5.2.7 5.2.7 宏指令与子程序的比较宏指令与子程序的比较宏指令与子程序的比较宏指令与子程序的比较4.4.执行速度不同:执行速度不同:调调用用子子程程序序需需要要使使用用堆堆栈栈保保护护和和恢恢复复现现场场,需需要要专专门门的的指指令令传传递递参参数数,因因此此执执行行速速度度慢慢;宏宏指指令令不不存存在在这这些问题,因此执行速度快。些问题,因此执行速度快。5.5.参数传递方式不同:参数传递方式不同:宏宏调调用用可可实实现现参参数数的的置置换换,参参数数的的形形式式不不受受限限制制,简简单单、方方便便、灵灵活活,不不容容易易出出错错;而而子子程程序序的的参参数数一一般般为为地地址址或或操操作作数数,传传递递方方式式由由用用户户编编程程时时具具体体安安排排,参数较多时容易出错。参数较多时容易出错。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3 5.3 5.3 5.3 模块化程序设计模块化程序设计模块化程序设计模块化程序设计 对对大大型型的的复复杂杂问问题题,如如果果将将整整个个程程序序放放在在一一个个模模块块中中实现会存在以下问题:实现会存在以下问题:1.1.无法进行多人合作共同完成任务;无法进行多人合作共同完成任务;2.2.影响编程的效率和质量,难以保证程序的可靠性;影响编程的效率和质量,难以保证程序的可靠性;3.3.程序调试困难;程序调试困难;4.4.调调试试过过程程中中需需要要多多次次汇汇编编,源源程程序序越越长长,汇汇编编的的速速度越慢,浪费时间。度越慢,浪费时间。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3 5.3 5.3 5.3 模块化程序设计模块化程序设计模块化程序设计模块化程序设计正确地解决大型、复杂问题的方法:正确地解决大型、复杂问题的方法: 采采用用自自顶顶向向下下、逐逐步步求求精精的的模模块块化化和和结结构构化化的的设设计计方方法法,将将一一个个任任务务按按其其需需要要实实现现的的主主要要功功能能分分解解为为若若干干相相对对独独立立的的模模块块,并并确确定定好好各各模模块块之之间间的的调调用用关关系系和和参参数数传传递递方方式式,对对其其中中的的公公共共部部分分还还可可以以抽抽出出来来作作为为独独立立的的公公用用子子程程序序模模块块供供大大家家调调用用,然然后后将将这这些些模模块块分分配配给给各各个个开开发发人人员员,分分别别编编写写、调调试试,最最后后再再将将它它们们的的目目标标模模块块连连接接装装配配成一个完整的系统。成一个完整的系统。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3 5.3 5.3 5.3 模块化程序设计模块化程序设计模块化程序设计模块化程序设计模块划分与设计的参考规则:模块划分与设计的参考规则:1.1.如如果果一一个个程程序序段段被被多多个个模模块块公公用用,则则它它应应是是一一个个独独立立的的模模块;块;2.2.如如果果若若干干个个程程序序段段处处理理的的数数据据是是公公用用的的,则则这这些些程程序序应应放放在一个模块中;在一个模块中;3.3.若两个程序段的租用率差别很大,则应分属于两个模块;若两个程序段的租用率差别很大,则应分属于两个模块;4.4.模块的规模要适当,既不能过大、也不能过小;模块的规模要适当,既不能过大、也不能过小;第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3 5.3 5.3 5.3 模块化程序设计模块化程序设计模块化程序设计模块化程序设计模块划分与设计的参考规则:模块划分与设计的参考规则:5.5.应力求使模块具有通用性;应力求使模块具有通用性;6.6.各各模模块块应应在在功功能能、逻逻辑辑上上相相互互独独立立,避避免免用用转转移移语语句句在在模模块间转移;块间转移;7.7.各各模模块块间间的的接接口口应应该该简简单单,要要尽尽量量减减少少公公共共符符号号的的个个数数,尽量不共用数据存储单元;尽量不共用数据存储单元;8.8.每个模块的结构应尽量设计成单入口、单出口的形式。每个模块的结构应尽量设计成单入口、单出口的形式。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3 5.3 5.3 5.3 模块化程序设计模块化程序设计模块化程序设计模块化程序设计 汇汇编编语语言言程程序序设设计计中中使使模模块块化化程程序序设设计计成成为为可可能能的的关关键键可可重重定定位位技技术术和和连连接接程程序序(LINKLINK),连连接接程程序序将将多多个个目目标模块连接在一起时,必须要有以下两方面的信息:标模块连接在一起时,必须要有以下两方面的信息:1.1.各各模模块块间间的的通通信信方方式式:一一个个模模块块访访问问其其它它模模块块中中定定义的标号(包括过程名)、变量或常量;义的标号(包括过程名)、变量或常量;2.2.各各段段之之间间的的组组合合方方式式:每每个个模模块块都都可可能能包包含含多多个个段段,将将多多个个模模块块连连接接在在一一起起时时,这这些些段段以以什什么么方方式式进进行行组合。组合。 这这些些信信息息是是在在编编程程时时,使使用用伪伪指指令令通通过过宏宏汇汇编编程程序序产产生生的目标文件提供给连接程序。的目标文件提供给连接程序。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式段定义伪指令的完整格式:段名SEGMENT定位方式组合方式类别段名ENDS功能:定义一个段。其定位方式、组合方式、类别为赋给段的属性用方括号括起来表示可以省略,若不省略,各项的顺序不能错,且用空格分隔,类别的引号不能省。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式一、定位方式一、定位方式一、定位方式一、定位方式从汇编语言的角度来看,8086/80888086/8088物理地址的构成:PA=PA=(所在段的段寄存器)左移四位+EA+EA当EA=0EA=0时,物理地址的最低四位总是0 0,即段首地址能被1616整除。实际上,连接程序允许段首地址从任何字节开始,或者从某一字开始、或从某一页开始,并由用户自由选择,这就是定位方式的选择。定位方式:是对该段的起始地址所提出的要求,即告诉连接程序,在将各段装配到一起时,前一段放完后,后面的段从什么样的起始边界开始存放。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式一、定位方式一、定位方式一、定位方式一、定位方式定位方式有四种选择:PARAPARA:从能被1616整除的地址开始,即段首PAPA最低4 4位为0 0;WORDWORD:从偶数地址开始,即段首PAPA最低1 1位为0 0;BYTEBYTE:可以从任何物理地址开始存放;PAGEPAGE:从能被256256整除的地址开始,即段首PAPA最低8 8位为0 0;其中PARAPARA为系统隐含的定位方式。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式一、定位方式一、定位方式一、定位方式一、定位方式例:已知程序中的DATA1DATA1段和DATA2DATA2段的定义如下,如果这两个段分别为当前数据段和附加数据段,试分析不同的定位方式下连接程序对它们边界的处理方法。DATA1DATA1SEGMENTSEGMENTA ADB 55H DUPDB 55H DUP(0FFH0FFH)DATA1 DATA1 ENDSENDSDATA2DATA2SEGMENTSEGMENTDB 64H DUPDB 64H DUP(0 0)DATA2DATA2ENDSENDS第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式二、类别二、类别二、类别二、类别 段的类别是用单引号括起来的字符串,可以是任何合法的名称。 连接程序在进行处理时,将把类别相同的所有段(不一定同名)存放在连续的存储区中,先出现的在前,后出现的在后(但仍然是不同的段)且每段都有自己的起始地址。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式二、类别(例)二、类别(例)二、类别(例)二、类别(例)A A SEGMENT SEGMENT DATADATAB B SEGMENT SEGMENT CODECODEC SEGMENT C SEGMENT TOTOD D SEGMENT SEGMENT DATADATAE SEGMENT E SEGMENT TOTOA A SEGMENT SEGMENT DATADATAD D SEGMENT SEGMENT DATADATAB B SEGMENT SEGMENT CODECODEC SEGMENT C SEGMENT TOTOE SEGMENT E SEGMENT TOTO连接后连接后连接后连接后复习:同名段如何处理?问题:同名不同类别段如何处理?第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式二、类别(验证二、类别(验证二、类别(验证二、类别(验证1 1 1 1:同名段):同名段):同名段):同名段)DATA1 SEGMENT DB DATA1DATA1 ENDSDATA1 SEGMENT DB DATA2DATA1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA1START:MOV AX,DATA1CODE ENDSEND START第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式二、类别(验证二、类别(验证二、类别(验证二、类别(验证2 2 2 2:不同名同类别段):不同名同类别段):不同名同类别段):不同名同类别段)DATA1 SEGMENT D1DB DATA1DATA1 ENDSDATA2 SEGMENT D1DB DATA2DATA2 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA1START:MOV AX,DATA1CODE ENDSEND START第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式二、类别(验证二、类别(验证二、类别(验证二、类别(验证3 3 3 3:同名段不同类别段):同名段不同类别段):同名段不同类别段):同名段不同类别段)DATA1 SEGMENT D1DB DATA1DATA1 ENDSDATA1 SEGMENT D2DB DATA2DATA1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA1START:MOV AX,DATA1CODE ENDSEND START第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式三、组合方式三、组合方式三、组合方式三、组合方式 80868086只允许同时访问4 4个段,为简便起见,前面学习时采用的方式:将相同性质的段,如全部代码段、全部数据段,组合在一起成为一个代码段、一个数据段。 限制:组合起来的各段总长度必须小于64K64K。 为了解决这一问题,连接程序还提供了其它组合方式,由段定义中的“组合方式”属性指定,包括不选择、PUBLICPUBLIC、COMMONCOMMON、“ATAT表达式”、STACKSTACK和MEMORYMEMORY。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式三、组合方式三、组合方式三、组合方式三、组合方式1.1.不选择:本段与其它段逻辑上不发生关联(隐含方式);2.2.PUBLICPUBLIC:将本段与其它模块中的同名、同类别段按各模块连接的顺序相邻地连接在一起,组成一个物理段,该段大小不能超过64K64K。3.3.STACKSTACK:与PUBLICPUBLIC同样处理,但运行时该段作为堆栈段;4.4.COMMNCOMMN:本段与同名、同类别的其它段具有相同的段首址。即将本段与这些段相覆盖,长度取决于最长的COMMNCOMMN段;5.5.AT AT 表达式:将本段装在根据表达式求值得到的1616位段地址上。6.6.MEMORYMEMORY:将本段定位在被连接在一起的其它所有段之上。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.1 5.3.1 5.3.1 5.3.1 组合方式组合方式组合方式组合方式三、组合方式(例)三、组合方式(例)三、组合方式(例)三、组合方式(例)A SEGMENT PARA PUBLIC A SEGMENT PARA PUBLIC SEG1SEG1A1 DB 55H DUPA1 DB 55H DUP(0 0)A ENDSA ENDSB SEGMENT PARA COMMON B SEGMENT PARA COMMON SEG2SEG2B1 DB 202H DUP(0)B1 DB 202H DUP(0)B ENDSB ENDS END ENDA SEGMENT PARA PUBLIC A SEGMENT PARA PUBLIC SEG1SEG1A2 DB 104H DUPA2 DB 104H DUP(0 0)A ENDSA ENDSB SEGMENT PARA COMMON B SEGMENT PARA COMMON SEG2SEG2B2 DB 104H DUP(0)B2 DB 104H DUP(0)B ENDSB ENDSC SEGMENTC SEGMENTCC DB 100H DUP(33H)CC DB 100H DUP(33H)C ENDSC ENDS END END第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.2 5.3.2 5.3.2 5.3.2 通信方式通信方式通信方式通信方式1. 1. 公共符号说明语句格式:PUBLIC PUBLIC 符号, 符号 功能:说明其后的符号是公共符号,可以被其它模块所引用。2. 2. 外部符号说明语句格式:EXTRN EXTRN 符号:类型, 符号:类型 功能:说明本模块中需要引用的、由其它模块所定义的符号。其中类型包括:ABSABS(符号常量)、BYTEBYTE、WORDWORD、DWORDDWORD、NEARNEAR、FARFAR第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.3.2 5.3.2 5.3.2 5.3.2 通信方式(通信方式(通信方式(通信方式(例例例例)EXTRNEXTRNWAN2WAN2:FARFARPUBLICPUBLICDIV0DIV0,COUNTCOUNTEND STARTEND STARTEXTRNEXTRNDIV0DIV0:WORDWORD,COUNTCOUNT:WORDWORDPUBLICPUBLICWAN2WAN2,COUNTCOUNTWAR2WAR2PROCPROCFARFARENDEND第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术5.4 5.4 5.4 5.4 源程序综合举例源程序综合举例源程序综合举例源程序综合举例例例1 1: 编写将十六进制代码加密和解密的程序,要求如下:编写将十六进制代码加密和解密的程序,要求如下:# #;显示命令提示符,等待用户键入加密或解密命令。;显示命令提示符,等待用户键入加密或解密命令。#G#G:G G命命令令为为等等待待用用户户从从键键盘盘输输入入待待加加密密的的十十六六进进制制代代码码(最后以(最后以ZZ作结束),加密后送入作结束),加密后送入CHANCHAN字节存储区。字节存储区。#J#J: :对对CHANCHAN字字节节存存储储区区中中的的加加密密代代码码解解密密后后送送OBJEOBJE字字节节存存储区。储区。# # :结束操作,返回:结束操作,返回DOSDOS。第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术第五章第五章 程序设计的其他方法和技术程序设计的其他方法和技术
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号