程序设计的其他方法和技术.ppt
《程序设计的其他方法和技术.ppt》由会员分享,可在线阅读,更多相关《程序设计的其他方法和技术.ppt(84页珍藏版)》请在三一办公上搜索。
1、1.字符串操作2.宏功能程序设计3.模块化程序设计,5.1.2 串操作指令,(1)MOVS(Move String):串传送 语法格式:MOVSBMOVSW MOVS OPD,OPS 功能描述:MOVS(B/W)将DS:SI所指源串的1个元素(字节/字)复制到ES:DI所指的内存单元。然后,SI和DI增加或减少1/2。若DF=0,则增加,否则减少。对标志位的影响:无。,(2)CMPS(Compare Strings):串比较 语法格式:CMPS OPD,OPSCMPSBCMPSW功能描述:CMPS(B/W)将DS:SI所指源串的1个元素(字节/字)与ES:DI所指目的串的1个元素(字节/字)进
2、行比较,根据比较结果设置标志位。然后,SI和DI增加或减少1/2。若DF=0,则增加,否则减少。对标志位的影响:同CMP。,5.1.2 串操作指令,(3)SCAS(Scan String):串扫描 语法格式:SCAS OPDSCASBSCASW 功能描述:SCAS(B/W)将AL/AX与ES:DI所指目的串的1个字节/字进行比较,根据比较结果设置标志位。然后,DI增加或减少1/2。若DF=0,则增加,否则减少。,5.1.2 串操作指令,(4)LODS(Load String):串装入 语法格式:LODS OPSLODSBLODSW功能描述:LODS(B/W)将DS:SI所指源串的1个元素(字节
3、/字)复制到AL/AX。然后,SI增加或减少1/2/4。若DF=0,则增加,否则减少。对标志位的影响:无。,5.1.2 串操作指令,(5)STOS(Store String):串存储 语法格式:STOS OPDSTOSBSTOSW功能描述:STOS(B/W)将AL/AX的值复制到ES:DI所指的内存单元。然后,DI增加或减少1/2。若DF=0,则增加,否则减少。对标志位的影响:无。,5.1.2 串操作指令,(6)重复前缀REP;当CX 0时,重复执行后面的串指令;每执行1次,CX=CX 1;只能用在MOVS、LODS或STOS(B/W)之前REPZ/REPE;当CX 0且ZF=1时,重复执行后
4、面的串指令;每执行1次,CX=CX 1;只能用在CMPS(B/W/D)或SCAS(B/W)之前REPNZ/REPNE;当CX 0且ZF=0时,重复执行后面的串指令;每执行1次,CX=CX 1;只能用在CMPS(B/W/D)或SCAS(B/W)之前说明:若CX初值为0,则不执行任何操作,而且标志位不变。,5.1.2 串操作指令,1.串指令的共性源串:地址由DS:SI表示。目的串:地址由ES:DI表示。自动修改地址:每次数据操作后,SI和DI自动递增或递减,取决于操作的数据类型(字节、字)以及DF的值。若DF=0,则SI和DI自动增加1、2。否则,减1、2。可以使用CLD或STD指令设置DF。计数
5、器:使用重复前缀时,由CX表示数据个数,每重复1次操作,CX减1。,5.1.1 串操作指令简介(总结),2.串指令的用途串指令主要用于处理连续的内存单元,与重复前缀配合使用更有效。例如:MOVS用于将一个内存块的数据复制到另一块;CMPS用于比较两个内存区的数据;SCAS可以在一个内存区中扫描与给定值首次匹配或不匹配的元素;STOS能将一个内存区的所有单元初始化为给定值。LODS一般不用重复前缀。,5.1.1 串操作指令简介(总结),5.1 字符串操作实例,例1 将以STR1为首址的字节存储区中存放的字符串传送到以STR2为首址的字节存储区。,DATA SEGMENTSTR1 DB ABCDE
6、FGHIGKLLCOUNT=$-STR1STR2 DB COUNT DUP(0)DATA ENDSSTACK SEGMENT STACKDB 100 DUP(0)STACKENDS CODESEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK,BEGIN:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,STR1LEADI,STR2MOVCX,COUNTCLDREPMOVSBMOVAH,4CHINT21HCODEENDSEND BEGIN,5.1 字符串操作实例,例2 从键盘输入一字符串至STR1为首址的字节缓冲区,试比较该串与字节字符串S
7、TR2是否相等,若相等,那么0BX;否则,0FFFFHBX。,5.1 字符串操作实例,例3 在字符串STR中搜索子串AM,出现的次数送入BX。,P:REPNE SCASB JE AJMP OUT1A:CMP BYTE PTR DI,MJNE BINC BXB:CMP CX,0JNE POUTA:,5.1 字符串操作实例,例5 在TAB命令存储区中存放着若干条命令,其中每条命令的前一个字节存放着命令串的长度加1,后面一个字存放着该命令处理子程序的入口地址。设计一命令解释程序,其功能为:检查用户输入的命令,如果在TAB存储区能查到该命令,则转入相应的命令处理子程序执行;如果查不到,则给出错误提示后
8、再输入;如果用户未输入命令,则退出本程序的执行。,TAB:DB 4,DIRDW DIRDB 7,RENAMEDW RENAMEDB 4,DELDW DELDB 5,COPYDW COPY,5.2 宏功能程序设计,8086宏汇编语言提供的宏功能主要包括:宏指令的定义与调用、重复汇编和条件汇编等。宏指令允许用户为重复的语句序列定义一个名字,然后在程序中用这个名字代替这个语句序列,并允许传递多个参数,参数传递方式比子程序简单。宏指令的使用步骤:1.宏定义:MACRO、ENDM;2.宏调用;3.宏扩展。,5.2.1 宏定义,格式:宏指令名MACRO 形参表宏体ENDMMACRO:宏定义的开始;宏指令名
9、:宏定义为宏指令序列规定的名称;形参:个数不限,但字符个数不得超过132个,形参间用逗 号隔开;宏体:宏指令代替的程序段,由一系列机器指令语句和伪指令语句组成;ENDM:表示宏定义的结束,与MACRO成对出现。,5.2.1 宏定义,注意事项:宏指令一定要先定义后调用,因此,宏定义一定要放在它的第一次调用之前;宏指令名可以与伪指令、机器指令的助记符同名且具有比机器指令、伪指令更高的优先级。当它们同名时,宏汇编程序将它们一律处理成相应的宏扩展。,5.2.1 宏定义,例:某程序中要经常输出缓冲区中的字符串,通过反复进行9号DOS功能调用完成:LEA DX,BUF1MOVAH,9INT 21HLEA
10、DX,BUF2MOVAH,9INT 21H,WRITEMACRO ALEA DX,AMOV AH,9INT 21H,可定义为宏,5.2.2 宏调用,格式:宏指令号 实参表注意:实参要与宏定义中的形参按位置关系一一对应。如果实参的个数多于形参个数,多余的实参被忽略;如果实参少于形参,则缺少的实参被处理为空白。例如,对前面的宏定义可按下面的形式调用:WRITE BUF1WRITE BUF2,5.2.3 宏定义与宏调用中的参数,一、带间隔符的实参在宏调用中,有时实参是一串带间隔符(如空格、逗号等)的字符串,为了防止混淆,应该用尖括号将它们括起来,尖括号中的内容为一个实参。例如对堆栈段的宏定义:,ST
11、ACKM MACRO ASTACKSEGMENT STACKDB ASTACKENDSENDM,5.2.3 宏定义与宏调用中的参数,一、带间隔符的实参在当前程序中,需要建立一个500字节、初值均为0的堆栈段,宏调用为:相应的宏扩展为:,STACKM 500 DUP(0),+STACKSEGMENT+STACK+DB 500 DUP(0)+STACKENDS,5.2.3 宏定义与宏调用中的参数,二、数字参数在某些情况下,需要以实参符号的值而不是符号本身来替换形参,这种参数的替换称数字参数的替换。特殊宏操作符%将其后的表达式转换成它所代表的数值,并将此数值的ASCII码字符嵌入到宏扩展中。例如:,
12、DATA1MACRO A,B,C,DDW A,B,CDB D DUP(0)ENDM,5.2.3 宏定义与宏调用中的参数,二、数字参数如果宏调用为:,DW 12,5,30 DB 15 DUP(0)DW X+2,5,X+YDB Y-5 DUP(0),X=10Y=20DATA1%X+2,5,%X+Y,%Y-5DATA1 X+2,5,X+Y,Y-5,则相应的宏扩展为:,5.2.3 宏定义与宏调用中的参数,三、宏参数的连接在宏定义中,有些形参夹在字符串中,为了将这种形参标识出来,需在这样的形参前面加符号&,如果形参后面还跟有字符串,则还应在形参后面加符号&。例如:,SHIFTMACRO A,B,CMOV
13、 CL,AS&B C,CLENDM,5.2.3 宏定义与宏调用中的参数,三、宏参数的连接如果宏调用为:,MOV CL,4SALAX,CLMOVCL,2SARBH,CL,SHIFT 4,AL,AXSHIFT 2,AR,BH,则相应的宏扩展为:,5.2.3 宏定义与宏调用中的参数,四、宏体中的变量与标号在宏定义中,常常需要定义一些变量与标号。当这些宏定义在同一程序中多次调用并扩展后,会出现变量或标号重复定义的错误。例如:,SUMMACRO A,BMOV CX,AMOV BX,BMOV AX,0NEXT:ADD AX,BXADD BX,2LOOP NEXTENDM,5.2.3 宏定义与宏调用中的参数
14、,四、宏体中的变量与标号如果宏调用为:,MOV CX,50MOV BX,1MOV AX,0NEXT:ADD AX,BXADD BX,2LOOP NEXT,SUM50,1SUM20,10,则相应的宏扩展为:,MOV CX,20MOV BX,10MOV AX,0NEXT:ADD AX,BXADD BX,2LOOP NEXT,5.2.3 宏定义与宏调用中的参数,四、宏体中的变量与标号为避免宏扩展后出现变量或标号重复错误,8086宏汇编语言了伪指令LOCAL来解决这一问题。语句格式:LOCAL形式参数,形式参数功能:在宏扩展时,汇编程序自动为其后的形参生成特殊符号(?0000?FFFF),并用这些特殊
15、符号来取代宏体中的形参。注意:LOCAL语句只能作为宏体的第一条语句。,5.2.3 宏定义与宏调用中的参数,四、宏体中的变量与标号对于前面求若干个奇数(偶数)各的宏定义,可以改写为如下形式:,SUMMACRO A,BLOCAL NEXTMOV CX,AMOV BX,BMOV AX,0NEXT:ADD AX,BXADD BX,2LOOP NEXTENDM,MOV CX,50MOV BX,1MOV AX,0?0000:ADD AX,BXADD BX,2LOOP NEXT,MOV CX,20MOV BX,10MOV AX,0?0001:ADD AX,BXADD BX,2LOOP NEXT,5.2.6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 其他 方法 技术
链接地址:https://www.31ppt.com/p-6011252.html