汇编语言程序设计简明教程 第6章字符串与文件.ppt
《汇编语言程序设计简明教程 第6章字符串与文件.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计简明教程 第6章字符串与文件.ppt(73页珍藏版)》请在沃文网上搜索。
1、1 1第六章第六章 字符串与文件处理字符串与文件处理 6.1 6.1 串处理指令串处理指令 6.2 6.2 文件的建立和打开文件的建立和打开 6.3 6.3 文件读写文件读写 6.4 6.4 设备文件设备文件 习题六习题六2 2字符串字符串:计算机中常常用到字符串,如变量名、文件名等都是计算机中常常用到字符串,如变量名、文件名等都是字符串,每个字符的编码占用一个字节,连续地存存贮在字符串,每个字符的编码占用一个字节,连续地存存贮在内存储器中。内存储器中。文件文件:文件是存放在外存储器上的程序或数据。文件是存放在外存储器上的程序或数据。3 36.1 6.1 串处理指令串处理指令 6.1.1 6.
2、1.1 与无条件重复前缀配合使用的串指令与无条件重复前缀配合使用的串指令 6.1.2 6.1.2 与有条件重复前缀配合使用的指令与有条件重复前缀配合使用的指令 4 4串操作指令的共同特点串操作指令的共同特点:源源操操作作数数由由DS:SI提提供供(有有时时也也可可以以由由AL、AX、EAX提提供)供)目的操作数由目的操作数由ES:DI提供提供每每执执行行一一次次串串操操作作,自自动动修修改改SI和和(或或)DI,使使其其指指向向下下一一个字节、字或双字个字节、字或双字方向标志方向标志DF控制对控制对SI、DI递增或是递减递增或是递减指令指令STD将将DF置置1,指令,指令CLD将将DF清清05
3、 51.MOVS 1.MOVS 字符串传送指令字符串传送指令格式:格式:MOVSB/MOVSW/MOVSD执行的操作执行的操作:(1 1)目的操作数单元)目的操作数单元源操作数,源操作数,ES:DIDS:SI ES:DIDS:SI(2 2)修改修改SISI和和DIDI值值6.1.1 6.1.1 与无条件重复前缀与无条件重复前缀REPREP配合使用的指令配合使用的指令6 62.REP串重复操作前缀串重复操作前缀格式:格式:REP串操作指令串操作指令执行的操作执行的操作:重复执行串操作指令,直到:重复执行串操作指令,直到CX的值为零的值为零 如果(如果(CXCX)0 0:(1 1)()(CX CX
4、)()(CX CX)1 1 (2 2)执行串指令执行串指令 (3 3)转向()转向(1 1)如果(如果(CXCX)=0=0,结束本指令操作结束本指令操作7 7例例6-1把长度为把长度为100的字符串的字符串str1复制到复制到str2开始的存储单元中开始的存储单元中假设已经执行如下指令,装载了假设已经执行如下指令,装载了DS:SI和和ES:DI。MOV AX,SEGstr1;源数据的段地址送入源数据的段地址送入DSMOV DS,AXLEASI,str1;源数据的起始偏移地址送入源数据的起始偏移地址送入SIMOV AX,SEGstr2;目的数据的段地址送入目的数据的段地址送入ESMOV ES,A
5、XLEADI,str2;目的数据的起始偏移地址送入目的数据的起始偏移地址送入DI8 8(1)用循环控制方法编写的程序)用循环控制方法编写的程序MOV CX,100;字符串长度送入字符串长度送入CXAGAIN:MOV AL,SI;从源数据区取出一个字节从源数据区取出一个字节MOV ES:DI,AL;存入目的数据区存入目的数据区INCSI;修改源数据区指针修改源数据区指针INCDI;修改目的数据区指针修改目的数据区指针LOOP AGAIN;重复上面的操作重复上面的操作100次次9 9(2)用字符串传送指令编写的程序)用字符串传送指令编写的程序MOV CX,100;字符串长度送入字符串长度送入CXA
6、GAIN:MOVSB;从源数据传送一个字节到目的数据区从源数据传送一个字节到目的数据区LOOP AGAIN;重复上面的操作重复上面的操作100次次(3)用带重复前缀的字符串传送指令编写的程序)用带重复前缀的字符串传送指令编写的程序CLD;方向标志方向标志DF清清0MOV CX,100;字符串长度送人字符串长度送人CXREPMOVSB;执行执行100次次MOVSB指令指令10103.STOS STOS 存字符串指令存字符串指令格式:格式:STOSB/STOSW/STOSD执行的操作执行的操作:(1 1)目的存储单元目的存储单元累加器累加器字节操作:字节操作:ES:DIES:DI(ALAL)字操作
7、:字操作:ES:DIES:DI(AXAX)双字操作:双字操作:ES:DIES:DI(EAXEAX)(2 2)修改修改DIDI值值11114.LODS LODS 取字符串指令取字符串指令格式:格式:LODSB/LODSW/LODSD执行的操作执行的操作:(1 1)累加器)累加器源存储单元源存储单元字节操作:(字节操作:(ALAL)DS:SI DS:SI 字操作:字操作:(AXAX)DS:SI DS:SI 双字操作:(双字操作:(EAXEAX)DS:SI DS:SI(2 2)修改修改SISI值值12121.CMPS 1.CMPS 串比较指令串比较指令格式:格式:CMPSB/CMPSW/CMPSD执
8、行的操作执行的操作:(1 1)源操作数目的操作数源操作数目的操作数即:(即:(DS:SIDS:SI)()(ES:DIES:DI),),不保存减法得到的差,但产生新的状态标志不保存减法得到的差,但产生新的状态标志(2 2)修改)修改SISI和和DIDI值值6.1.2 6.1.2 与有条件重复前缀配合使用的指令与有条件重复前缀配合使用的指令13132.REPZREPE当为零相等时重复操作前缀当为零相等时重复操作前缀格式:格式:REPZ/REPE串指令串指令执行的操作执行的操作:如如ZFZF1 1且(且(CXCX)0 0,重复执行串指令重复执行串指令(1)如如ZFZF1 1且(且(CXCX)0 0,
9、则:则:(a)执行串操作指令执行串操作指令(b)()(CX)()(CX)1 (c)返回(返回(1)(2)ZFZF0 0或或(CX)CX)0 0,执执行行“REPE/REPZ REPE/REPZ 串串指指令令”的的后后续续指指令令 1414例例6-2两个字符串两个字符串STRING1、STRING2长度相同,编写一个程序,长度相同,编写一个程序,比较它们是否相同。比较它们是否相同。(1)用循环控制方法编写的程序段)用循环控制方法编写的程序段DATASEGMENTSTRING1DBALLSTUDENTSSTRING2DBALLSTODENTSNEQUSTRING2STRING1MESS1DB0DH
10、,0AH,Yes,Stringsarematched.$MESS2DB0DH,0AH,No,Stringsarenotmatched.$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA1515START:MOVAX,DATA MOVDS,AX MOVES,AX LEASI,STRING1 LEADI,STRING2 MOV CX,NAGA:MOVAL,SI CMPAL,ES:DI JNENO INCSI INCDI LOOP AGA JMPYES1616NO:LEADX,MESS2 JMPDISPYES:LEADX,MESS1DISP:MOV AH,09H IN
11、T21H MOV AX,4C00H INT21HCODE ENDS ENDSTART1717例例6-2:(2)用带重复前缀的字符串比较指令编写的程序:)用带重复前缀的字符串比较指令编写的程序:;装载;装载DS:SI、ES:DI、CX的程序同上的程序同上REPZ CMPSBJNENOYES:LEADX,MESS1JMPDISPNO:LEADX,MESS2DISP:18183.3.REPNZREPNZREPNE REPNE 当不为零不相等时重复操作前缀当不为零不相等时重复操作前缀 该前缀与该前缀与REPZREPE对标志位对标志位ZF的判别条件刚好相反的判别条件刚好相反格式:格式:REPNZ/REP
12、NE串指令串指令执行的操作:如果执行的操作:如果ZF=0且(且(CX)0,重复串操作重复串操作如如ZFZF0 0且(且(CXCX)00,则:则:(1 1)执行串操作指令)执行串操作指令 (2 2)()(CXCX)()(CXCX)1 1 ZF ZF1 1或(或(CXCX)0 0,停止执行本指令,执行下一条指令停止执行本指令,执行下一条指令19194.4.SCAS SCAS 串扫描指令串扫描指令 格式:格式:SCASB/SCASW/SCASD执行的操作执行的操作:(1 1)累加器目的操作数)累加器目的操作数 字节操作:(字节操作:(ALAL)(ES:DIES:DI)字操作:字操作:(AXAX)(E
13、S:DIES:DI)双字操作:(双字操作:(EAXEAX)()(ES:DIES:DI)(2 2)修改修改DIDI值值2020例例6-3字符串由字符串由ASCII代码代码0表示结束,它的首地址由表示结束,它的首地址由ES:DI指出,编指出,编制函数制函数LEN,求该字符串的长度,置入求该字符串的长度,置入AX返回。返回。;函数;函数“LEN”;功能:求一个字符串的长度功能:求一个字符串的长度;入口:字符串首地址在;入口:字符串首地址在ES:DI中,字符串以中,字符串以ASC码码0结束结束;出口:字符串的长度在;出口:字符串的长度在AX中中;影响寄存器:;影响寄存器:AX,FLAGS;说明:假设字
14、符串长度不超过说明:假设字符串长度不超过60000字符字符.MODELSMALLPUBLICLEN.CODE2121LENPROC FARPUSHCXPUSHDICLDXORAX,AXMOVCX,60000REPNESCASBMOVAX,60000SUBCXDEC AXPOPDIPOPCXRETLENENDPEND22226.2 6.2 文件的建立和打开文件的建立和打开 6.2.1 6.2.1 文件文件6.2.2 6.2.2 文件的建立、打开和关闭文件的建立、打开和关闭 23231.1.路径名和路径名和ASCIZASCIZ串串文件路径名指出该文件在辅助存储器上的位置,包括磁盘驱文件路径名指出该
15、文件在辅助存储器上的位置,包括磁盘驱动器号、目录路径和文件名动器号、目录路径和文件名路径名和一个全路径名和一个全0字节构成的字符串称为字节构成的字符串称为“ASCIZ”串串2.2.文件代号文件代号操操作作系系统统为为每每个个处处于于“活活动动”状状态态的的文文件件分分配配一一个个用用16位位二进制表示的二进制表示的“文件代号文件代号”(Handle)6.2.1 6.2.1 文件文件 24243.文件属性文件属性每个文件有一个记录该文件特性的字节,称为文件属性。每个文件有一个记录该文件特性的字节,称为文件属性。该字节各位所代表的含义:该字节各位所代表的含义:D0只读文件,该文件不能进行写操作只读
16、文件,该文件不能进行写操作D1隐藏文件,用隐藏文件,用DIR查不到该文件查不到该文件D2系统文件,用系统文件,用DIR查不到该文件查不到该文件D3软盘的卷标号,该文件内容为磁盘的软盘的卷标号,该文件内容为磁盘的“卷标卷标”D4子目录,该文件内容为下一级文件的子目录,该文件内容为下一级文件的“目录目录”D5归档位,已写入并关闭了的文件(硬盘用)归档位,已写入并关闭了的文件(硬盘用)25254.4.文件代号方式的文件代号方式的DOSDOS功能调用功能调用磁盘文件的处理使用磁盘文件的处理使用DOS或或BIOS的功能调用来实现。的功能调用来实现。DOS中中断断服服务务(INT21H)能能实实现现高高级
17、级的的文文件件操操作作,只只要要给给出文件名就能读写文件。出文件名就能读写文件。表表6.1给出了用文件代号方式实现文件管理的给出了用文件代号方式实现文件管理的DOS功能调用功能调用26265.5.文件操作返回代码文件操作返回代码对磁盘文件进行操作,如果成功,返回时对磁盘文件进行操作,如果成功,返回时CF置为置为0。如果操。如果操作不成功,返回时作不成功,返回时CF被置成被置成1。这时,。这时,AX中包含了错误代码,中包含了错误代码,用来指明对磁盘文件操作失败的原因用来指明对磁盘文件操作失败的原因表表6.2列出了列出了0136的错误代码及与之对应的错误信息的错误代码及与之对应的错误信息6.6.数
18、据传送区数据传送区在文件处理过程中,从磁盘读出的数据或要写入磁盘的数在文件处理过程中,从磁盘读出的数据或要写入磁盘的数据,都要存放在一个指定的内存区域,这个区域称为数据传据,都要存放在一个指定的内存区域,这个区域称为数据传送区(送区(DTA),),或者或者“磁盘缓冲区磁盘缓冲区”。2727功能号功能号(AH)功功能能调用参数调用参数返回参数返回参数3CH建立文件建立文件DS=ASCIZ串段基址串段基址DX=ASCIZ串偏移地串偏移地址址CX=文件属性文件属性CF=0操作成功:操作成功:AX=文件代号文件代号CF=l操作出错:操作出错:AX错误代码错误代码3DH打开文件打开文件DS=ASCIZ串
19、段基址串段基址DX=ASCIZ串串的的偏偏移移地址地址AL=存取代码存取代码CF=0操作成功:操作成功:AX=文件代号文件代号CF=l操作出错:操作出错:AX错误代码错误代码3EH关闭文件关闭文件BX=文件代号文件代号CF=0操作成功操作成功CF=l操作出错:操作出错:AX错误代码错误代码表表6.2文件系统功能调用文件系统功能调用28283FH读读文文件件或或设备设备DS=数据缓冲区段基数据缓冲区段基址址DX=数据缓冲区偏移数据缓冲区偏移地址地址BX=文件代号文件代号CX=读取的字节数读取的字节数CF=0读成功:读成功:AX=实际读入的字节数实际读入的字节数AX=0表示文件结束表示文件结束CF
20、=1读出错:读出错:AX=错误代码错误代码40H写写文文件件或或设备设备DS=数据缓冲区段基数据缓冲区段基址址DX=数据缓冲区偏移数据缓冲区偏移地址地址BX=文件代号文件代号CX=写入的字节数写入的字节数CF=0写成功:写成功:AX=实际写入的字节数实际写入的字节数CF=1写出错:写出错:AX=错误代码错误代码功能号功能号(AH)功功能能调用参数调用参数返回参数返回参数292942H移移动动文文件件指针指针CX=所需字节的偏移所需字节的偏移地址地址(高位高位)DX=所需字节的偏移所需字节的偏移地址地址(低位低位)AL=移动方式码移动方式码BX=文件代号文件代号CF=0操作成功:操作成功:DX:
21、AX=新指针位置新指针位置CF=1操作失败:操作失败:AX=错误代码错误代码43H读读写写文文件件属性属性AL=0读文件属性读文件属性AL=1置文件属性置文件属性CX=新属性新属性DS=ASCIZ串段基址串段基址DX=ASCIZ串偏移地串偏移地址址CF=0操作成功:操作成功:AL=0,CX=属性属性CF=1操作失败:操作失败:AX=错误代码错误代码功能号功能号(AH)功功能能调用参数调用参数返回参数返回参数30301.文件的建立文件的建立对对于于一一个个磁磁盘盘上上不不存存在在的的文文件件,使使用用之之前前首首先先要要“建建立立”这个文件这个文件。注注意意:建建立立文文件件时时,应应确确保保在
22、在同同一一个个目目录录中中该该文文件件不不存存在在,否否则则将将覆覆盖盖原原来来存存在在的的同同名名文文件件,造造成成信信息息的的丢丢失失,除除非非你你用这种方法同时用这种方法同时“删除删除”一个不再需要的老文件。一个不再需要的老文件。6.2.2 6.2.2 文件的建立、打开和关闭文件的建立、打开和关闭 3131DATASEGMENTFILENAMEDBD:STUDENTTEST1.DAT,0HANDLE DW?SUCCESS DB0DH,0AH,ThefilehasbeenCREATED.$FAILDB0DH,0AH,ThefilefailtobeCREATED.$DATAENDSCODES
23、EGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOV DS,AX例例6-4在在D盘的盘的STUDENT文件夹下建立一个名为文件夹下建立一个名为TEST1.DAT文件,文件,建立成功显示建立成功显示“ThefilehasbeenCREATED.”,将文件代号存放在将文件代号存放在FILENUM字单元,否则显示字单元,否则显示“ThefilefailtobeCREATED.”。3232LEADX,FILENAME;ASCIZ串地址置入串地址置入DS:DXMOV CX,0;文件属性为文件属性为0(普通文件)(普通文件)MOV AH,3CHINT 21H;建立该
24、文件建立该文件JNC SUCCE;CF=0,转,转SUCCELEA DX,FAIL;CF=1,置出错信息地址置出错信息地址JMP QUITSUCCE:MOV HANDLE,AX;保存文件代号保存文件代号LEADX,SUCCESS;取取“成功成功”信息地址信息地址QUIT:MOVAH,09HINT21H;显示成功显示成功/失败信息失败信息MOVAH,4CHINT21HCODE ENDSENDSTART33332.文件的打开文件的打开对对一一个个已已经经存存在在的的磁磁盘盘文文件件进进行行读读、写写操操作作前前,首首先先要要“打打开开”这个文件这个文件。存取代码存取代码:存取代码告诉操作系统打开文
25、件要进行什么样操作。:存取代码告诉操作系统打开文件要进行什么样操作。打开一个文件打开一个文件:AH=3DHDS:DX=ASCIZ串首地址串首地址AL=文件存取代码文件存取代码3434只只读读文文件件只只能能用用代代码码0来来打打开开,如如果果使使用用存存取取代代码码1或或2时时将将报报告告错误。错误。打开一个不存在的文件同样也会报告错误。打开一个不存在的文件同样也会报告错误。常用的文件存取代码:常用的文件存取代码:0:为读而打开文件:为读而打开文件1:为写而打开文件:为写而打开文件2:为读和写打开文件:为读和写打开文件35353.关闭文件关闭文件一一个个文文件件读读写写完完毕毕之之后后,需需要
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计简明教程 第6章字符串与文件 汇编语言 程序设计 简明 教程 字符串 文件