![字符串與文件_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/0de17120-d283-4daf-869f-67f029e5dae1/0de17120-d283-4daf-869f-67f029e5dae11.gif)
![字符串與文件_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/0de17120-d283-4daf-869f-67f029e5dae1/0de17120-d283-4daf-869f-67f029e5dae12.gif)
![字符串與文件_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/0de17120-d283-4daf-869f-67f029e5dae1/0de17120-d283-4daf-869f-67f029e5dae13.gif)
![字符串與文件_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/0de17120-d283-4daf-869f-67f029e5dae1/0de17120-d283-4daf-869f-67f029e5dae14.gif)
![字符串與文件_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/0de17120-d283-4daf-869f-67f029e5dae1/0de17120-d283-4daf-869f-67f029e5dae15.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、1 12 26.1 6.1 串處理指令串處理指令 6.2 6.2 文件的建立和打開文件的建立和打開 6.3 6.3 文件讀寫文件讀寫 6.4 6.4 設(shè)備文件設(shè)備文件 習(xí)題六習(xí)題六3 3字符串字符串: 計算機中常常用到字符串,如變量名、文件名等都是計算機中常常用到字符串,如變量名、文件名等都是字符串,每個字符的編碼占用一個字節(jié),連續(xù)地存存貯在字符串,每個字符的編碼占用一個字節(jié),連續(xù)地存存貯在內(nèi)存儲器中。內(nèi)存儲器中。 文件文件: 文件是存放在外存儲器上的程序或數(shù)據(jù)。文件是存放在外存儲器上的程序或數(shù)據(jù)。 4 46.1.1 6.1.1 與無條件重復(fù)前綴配合使用的串指令與無條件重復(fù)前綴配合使用的串指令
2、 6.1.2 6.1.2 與有條件重復(fù)前綴配合使用的指令與有條件重復(fù)前綴配合使用的指令 5 5串操作指令的共同特點串操作指令的共同特點:源操作數(shù)由源操作數(shù)由DS:SI提供(有時也可以由提供(有時也可以由AL、AX、EAX提提供)供) 目的操作數(shù)由目的操作數(shù)由ES:DI提供提供 每執(zhí)行一次串操作,自動修改每執(zhí)行一次串操作,自動修改SI和(或)和(或)DI,使其指向下一,使其指向下一個字節(jié)、字或雙字個字節(jié)、字或雙字 方向標(biāo)志方向標(biāo)志DF控制對控制對SI、DI遞增或是遞減遞增或是遞減 指令指令STD將將DF置置1,指令,指令CLD將將DF清清0 6 61. MOVS 1. MOVS 字符串傳送指令字
3、符串傳送指令 格式:格式:MOVSB / MOVSW / MOVSD 執(zhí)行的操作執(zhí)行的操作: (1 1)目的操作數(shù)單元)目的操作數(shù)單元源操作數(shù),源操作數(shù),ES:DIDS:SI ES:DIDS:SI (2 2)修改)修改SISI和和DIDI值值6.1.1 6.1.1 與無條件重復(fù)前綴與無條件重復(fù)前綴REPREP配合使用的指令配合使用的指令7 72. REP 串重復(fù)操作前綴串重復(fù)操作前綴 格式:格式: REP 串操作指令串操作指令 執(zhí)行的操作執(zhí)行的操作:重復(fù)執(zhí)行串操作指令,直到:重復(fù)執(zhí)行串操作指令,直到CX的值為零的值為零 如果(如果(CXCX) 0 0: (1 1)()(CX CX )()(CX
4、 CX )1 1 (2 2)執(zhí)行串指令)執(zhí)行串指令 (3 3)轉(zhuǎn)向()轉(zhuǎn)向(1 1) 如果(如果(CXCX)= 0= 0,結(jié)束本指令操作,結(jié)束本指令操作8 8例例6-1 把長度為把長度為100的字符串的字符串str1復(fù)制到復(fù)制到str2開始的存儲單元中開始的存儲單元中假設(shè)已經(jīng)執(zhí)行如下指令,裝載了假設(shè)已經(jīng)執(zhí)行如下指令,裝載了DS: SI和和ES: DI。MOV AX,SEG str1 ;源數(shù)據(jù)的段地址送入;源數(shù)據(jù)的段地址送入DSMOV DS,AXLEA SI,str1; 源數(shù)據(jù)的起始偏移地址送入源數(shù)據(jù)的起始偏移地址送入SIMOV AX,SEG str2 ;目的數(shù)據(jù)的段地址送入;目的數(shù)據(jù)的段地址送
5、入ESMOV ES,AXLEA DI,str2; 目的數(shù)據(jù)的起始偏移地址送入目的數(shù)據(jù)的起始偏移地址送入DI9 9(1)用循環(huán)控制方法編寫的程序)用循環(huán)控制方法編寫的程序 MOV CX,100 ;字符串長度送入;字符串長度送入CXAGAIN: MOV AL, SI ;從源數(shù)據(jù)區(qū)取出一個字節(jié);從源數(shù)據(jù)區(qū)取出一個字節(jié) MOV ES:DI,AL;存入目的數(shù)據(jù)區(qū);存入目的數(shù)據(jù)區(qū) INC SI;修改源數(shù)據(jù)區(qū)指針;修改源數(shù)據(jù)區(qū)指針 INC DI;修改目的數(shù)據(jù)區(qū)指針;修改目的數(shù)據(jù)區(qū)指針 LOOP AGAIN;重復(fù)上面的操作;重復(fù)上面的操作100次次 1010(2)用字符串傳送指令編寫的程序)用字符串傳送指令編
6、寫的程序MOV CX,100 ;字符串長度送入;字符串長度送入CXAGAIN:MOVSB ;從源數(shù)據(jù)傳送一個字節(jié)到目的數(shù)據(jù)區(qū);從源數(shù)據(jù)傳送一個字節(jié)到目的數(shù)據(jù)區(qū)LOOP AGAIN;重復(fù)上面的操作;重復(fù)上面的操作100次次(3)用帶重復(fù)前綴的字符串傳送指令編寫的程序)用帶重復(fù)前綴的字符串傳送指令編寫的程序CLD;方向標(biāo)志;方向標(biāo)志DF清清0MOV CX,100;字符串長度送人;字符串長度送人CXREP MOVSB;執(zhí)行;執(zhí)行100次次MOVSB指令指令11113. STOS STOS 存字符串指令存字符串指令 格式:格式: STOSB/ STOSW/STOSD 執(zhí)行的操作執(zhí)行的操作: (1 1)
7、目的存儲單元)目的存儲單元累加器累加器 字節(jié)操作:字節(jié)操作:ES:DIES:DI(ALAL) 字操作:字操作: ES:DIES:DI(AXAX) 雙字操作:雙字操作:ES:DIES:DI(EAXEAX) (2 2)修改)修改DIDI值值12124. LODS LODS 取字符串指令取字符串指令 格式:格式: LODSB/ LODSW/LODSD 執(zhí)行的操作執(zhí)行的操作: (1 1)累加器)累加器源存儲單元源存儲單元 字節(jié)操作:(字節(jié)操作:(ALAL) DS:SI DS:SI 字操作:字操作: (AXAX) DS:SI DS:SI 雙字操作:(雙字操作:(EAXEAX) DS:SI DS:SI (
8、2 2)修改)修改SISI值值13131. CMPS 1. CMPS 串比較指令串比較指令 格式:格式:CMPSB/CMPSW/CMPSD 執(zhí)行的操作執(zhí)行的操作: (1 1)源操作數(shù)目的操作數(shù))源操作數(shù)目的操作數(shù) 即:(即:(DS:SIDS:SI)()(ES:DIES:DI),), 不保存減法得到的差,但產(chǎn)生新的狀態(tài)標(biāo)志不保存減法得到的差,但產(chǎn)生新的狀態(tài)標(biāo)志 (2 2)修改)修改SISI和和DIDI值值6.1.2 6.1.2 與有條件重復(fù)前綴配合使用的指令與有條件重復(fù)前綴配合使用的指令14142. REPZREPE 當(dāng)為零相等時重復(fù)操作前綴當(dāng)為零相等時重復(fù)操作前綴 格式:格式: REPZ /
9、REPE 串指令串指令 執(zhí)行的操作執(zhí)行的操作:如如ZFZF1 1且(且(CXCX)0 0,重復(fù)執(zhí)行串指令,重復(fù)執(zhí)行串指令 (1) 如如ZFZF1 1且(且(CXCX)0 0,則:,則: (a) 執(zhí)行串操作指令執(zhí)行串操作指令 (b)()(CX)()(CX)1 (c) 返回(返回(1) (2)ZFZF0 0或或( (CX)CX)0 0,執(zhí)行,執(zhí)行“REPE/REPZ REPE/REPZ 串指令串指令”的后續(xù)指的后續(xù)指令令 1515例例6-2兩個字符串兩個字符串STRING1、STRING2長度相同,編寫一個程長度相同,編寫一個程序,比較它們是否相同。序,比較它們是否相同。(1)用循環(huán)控制方法編寫的
10、程序段)用循環(huán)控制方法編寫的程序段DATASEGMENT STRING1 DB ALL STUDENTS STRING2 DB ALL STODENTS N EQU STRING2STRING1 MESS1 DB 0DH, 0AH, Yes, Strings are matched. $ MESS2DB 0DH, 0AH, No, Strings are not matched. $DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATA1616START:MOVAX, DATA MOVDS, AX MOVES, AX LEA SI, STRING1 LEA DI
11、, STRING2 MOV CX, NAGA:MOVAL, SI CMPAL, ES: DI JNE NO INC SI INC DI LOOP AGA JMP YES1717NO:LEA DX, MESS2 JMP DISPYES: LEA DX, MESS1DISP:MOV AH, 09H INT 21H MOV AX, 4C00H INT 21HCODE ENDS ENDSTART1818例例6-2 :(2)用帶重復(fù)前綴的字符串比較指令編寫的程序:)用帶重復(fù)前綴的字符串比較指令編寫的程序: ;裝載;裝載DS: SI、ES: DI、CX的程序同上的程序同上 REPZ CMPSB JNE N
12、O YES: LEADX, MESS1JMP DISPNO:LEADX,MESS2DISP: 19193. REPNZ3. REPNZREPNE REPNE 當(dāng)不為零不相等時重復(fù)操作前綴當(dāng)不為零不相等時重復(fù)操作前綴 該前綴與該前綴與REPZREPE對標(biāo)志位對標(biāo)志位ZF的判別條件剛好相反的判別條件剛好相反 格式:格式: REPNZ / REPNE 串指令串指令 執(zhí)行的操作:如果執(zhí)行的操作:如果ZF=0且(且(CX)0,重復(fù)串操作,重復(fù)串操作 如如ZFZF0 0且(且(CXCX)00,則:,則: (1 1)執(zhí)行串操作指令)執(zhí)行串操作指令 (2 2)()(CXCX)()(CXCX)1 1 ZF ZF
13、1 1或(或(CXCX)0 0,停止執(zhí)行本指令,執(zhí)行下一條指令,停止執(zhí)行本指令,執(zhí)行下一條指令 20204. SCAS 4. SCAS 串掃描指令串掃描指令 格式:格式: SCASB/ SCASW/SCASD 執(zhí)行的操作執(zhí)行的操作: (1 1)累加器目的操作數(shù))累加器目的操作數(shù) 字節(jié)操作:(字節(jié)操作:(ALAL) (ES:DIES:DI) 字操作:字操作: (AXAX) (ES:DIES:DI) 雙字操作:(雙字操作:(EAXEAX)()(ES:DIES:DI) (2 2)修改)修改DIDI值值2121例例6-3字符串由字符串由ASCII代碼代碼0表示結(jié)束,它的首地址由表示結(jié)束,它的首地址由E
14、S: DI指出,編指出,編制函數(shù)制函數(shù)LEN, 求該字符串的長度,置入求該字符串的長度,置入AX返回。返回。;函數(shù);函數(shù)“LEN” ;功能:求一個字符串的長度;功能:求一個字符串的長度;入口:字符串首地址在;入口:字符串首地址在ES: DI中,字符串以中,字符串以ASC碼碼0結(jié)束結(jié)束;出口:字符串的長度在;出口:字符串的長度在AX中中;影響寄存器:;影響寄存器:AX,F(xiàn)LAGS ;說明:假設(shè)字符串長度不超過;說明:假設(shè)字符串長度不超過60000字符字符. MODELSMALL PUBLICLEN. CODE2222 LENPROC FAR PUSHCX PUSHDI CLDXORAX, AXM
15、OVCX, 60000REPNE SCASBMOVAX, 60000SUBCXDEC AXPOPDIPOPCXRETLENENDP END 23236.2.1 6.2.1 文件文件6.2.2 6.2.2 文件的建立、打開和關(guān)閉文件的建立、打開和關(guān)閉 24241. 1. 路徑名和路徑名和ASCIZASCIZ串串 文件路徑名指出該文件在輔助存儲器上的位置,包括磁盤驅(qū)文件路徑名指出該文件在輔助存儲器上的位置,包括磁盤驅(qū)動器號、目錄路徑和文件名動器號、目錄路徑和文件名 路徑名和一個全路徑名和一個全0字節(jié)構(gòu)成的字符串稱為字節(jié)構(gòu)成的字符串稱為“ASCIZ”串串 2.2.文件代號文件代號 操作系統(tǒng)為每個處于
16、操作系統(tǒng)為每個處于“活動活動”狀態(tài)的文件分配一個用狀態(tài)的文件分配一個用16位位二進制表示的二進制表示的“文件代號文件代號”(Handle)6.2.1 6.2.1 文件文件 25253.文件屬性文件屬性 每個文件有一個記錄該文件特性的字節(jié),稱為文件屬性。每個文件有一個記錄該文件特性的字節(jié),稱為文件屬性。該字節(jié)各位所代表的含義:該字節(jié)各位所代表的含義: D0只讀文件,該文件不能進行寫操作只讀文件,該文件不能進行寫操作 D1隱藏文件,用隱藏文件,用DIR查不到該文件查不到該文件 D2系統(tǒng)文件,用系統(tǒng)文件,用DIR查不到該文件查不到該文件 D3軟盤的卷標(biāo)號,該文件內(nèi)容為磁盤的軟盤的卷標(biāo)號,該文件內(nèi)容為
17、磁盤的“卷標(biāo)卷標(biāo)” D4子目錄,該文件內(nèi)容為下一級文件的子目錄,該文件內(nèi)容為下一級文件的“目錄目錄” D5歸檔位,已寫入并關(guān)閉了的文件(硬盤用)歸檔位,已寫入并關(guān)閉了的文件(硬盤用)26264. 4. 文件代號方式的文件代號方式的DOSDOS功能調(diào)用功能調(diào)用 磁盤文件的處理使用磁盤文件的處理使用DOS或或BIOS的功能調(diào)用來實現(xiàn)。的功能調(diào)用來實現(xiàn)。 DOS中斷服務(wù)(中斷服務(wù)(INT 21H)能實現(xiàn)高級的文件操作,只要)能實現(xiàn)高級的文件操作,只要給出文件名就能讀寫文件。給出文件名就能讀寫文件。 表表6.1給出了用文件代號方式實現(xiàn)文件管理的給出了用文件代號方式實現(xiàn)文件管理的DOS功能調(diào)用功能調(diào)用2
18、7275.5.文件操作返回代碼文件操作返回代碼 對磁盤文件進行操作,如果成功,返回時對磁盤文件進行操作,如果成功,返回時CF置為置為0。如果操。如果操作不成功,返回時作不成功,返回時CF被置成被置成1。這時,。這時,AX中包含了錯誤代碼,中包含了錯誤代碼,用來指明對磁盤文件操作失敗的原因用來指明對磁盤文件操作失敗的原因 表表6.2列出了列出了0136的錯誤代碼及與之對應(yīng)的錯誤信息的錯誤代碼及與之對應(yīng)的錯誤信息 6.6. 數(shù)據(jù)傳送區(qū)數(shù)據(jù)傳送區(qū) 在文件處理過程中,從磁盤讀出的數(shù)據(jù)或要寫入磁盤的數(shù)在文件處理過程中,從磁盤讀出的數(shù)據(jù)或要寫入磁盤的數(shù)據(jù),都要存放在一個指定的內(nèi)存區(qū)域,這個區(qū)域稱為數(shù)據(jù)傳據(jù)
19、,都要存放在一個指定的內(nèi)存區(qū)域,這個區(qū)域稱為數(shù)據(jù)傳送區(qū)(送區(qū)(DTA),或者),或者“磁盤緩沖區(qū)磁盤緩沖區(qū)”。 2828 功能號功能號(AH)功功 能能 調(diào)用參數(shù)調(diào)用參數(shù) 返回參數(shù)返回參數(shù)3CH建立文件建立文件DS=ASCIZ串段基址串段基址DX=ASCIZ串偏移地串偏移地址址CX=文件屬性文件屬性CF=0操作成功:操作成功: AX=文件代號文件代號CF=l操作出錯:操作出錯: AX錯誤代碼錯誤代碼3DH打開文件打開文件DS=ASCIZ串段基址串段基址DX=ASCIZ串的偏移串的偏移地址地址AL=存取代碼存取代碼CF=0操作成功:操作成功: AX=文件代號文件代號CF=l操作出錯:操作出錯:
20、AX錯誤代碼錯誤代碼3EH關(guān)閉文件關(guān)閉文件BX=文件代號文件代號CF=0操作成功操作成功 CF=l操作出錯:操作出錯: AX錯誤代碼錯誤代碼表表6.2 文件系統(tǒng)功能調(diào)用文件系統(tǒng)功能調(diào)用29293FH讀 文 件 或讀 文 件 或設(shè)備設(shè)備DS=數(shù)據(jù)緩沖區(qū)段基數(shù)據(jù)緩沖區(qū)段基址址DX=數(shù)據(jù)緩沖區(qū)偏移數(shù)據(jù)緩沖區(qū)偏移地址地址BX=文件代號文件代號CX=讀取的字節(jié)數(shù)讀取的字節(jié)數(shù)CF=0讀成功:讀成功: AX=實際讀入的字節(jié)數(shù)實際讀入的字節(jié)數(shù)AX=0表示文件結(jié)束表示文件結(jié)束CF=1讀出錯:讀出錯: AX=錯誤代碼錯誤代碼40H寫 文 件 或?qū)?文 件 或設(shè)備設(shè)備DS=數(shù)據(jù)緩沖區(qū)段基數(shù)據(jù)緩沖區(qū)段基址址DX=數(shù)據(jù)
21、緩沖區(qū)偏移數(shù)據(jù)緩沖區(qū)偏移地址地址BX=文件代號文件代號CX=寫入的字節(jié)數(shù)寫入的字節(jié)數(shù)CF=0寫成功:寫成功: AX=實際寫入的字節(jié)數(shù)實際寫入的字節(jié)數(shù)CF=1寫出錯:寫出錯: AX=錯誤代碼錯誤代碼功能號功能號(AH)功功 能能 調(diào)用參數(shù)調(diào)用參數(shù) 返回參數(shù)返回參數(shù)303042H移 動 文 件移 動 文 件指針指針CX=所需字節(jié)的偏移所需字節(jié)的偏移地址地址(高位高位)DX=所需字節(jié)的偏移所需字節(jié)的偏移地址地址(低位低位)AL=移動方式碼移動方式碼BX=文件代號文件代號CF=0操作成功:操作成功: DX: AX=新指針位置新指針位置CF=1操作失?。翰僮魇。?AX=錯誤代碼錯誤代碼43H讀 寫 文
22、 件讀 寫 文 件屬性屬性AL=0讀文件屬性讀文件屬性AL=1置文件屬性置文件屬性 CX=新屬性新屬性DS=ASCIZ串段基址串段基址DX=ASCIZ串偏移地串偏移地址址CF=0操作成功:操作成功: AL=0,CX=屬性屬性CF=1操作失?。翰僮魇。?AX=錯誤代碼錯誤代碼功能號功能號(AH)功功 能能 調(diào)用參數(shù)調(diào)用參數(shù) 返回參數(shù)返回參數(shù)31311. 文件的建立文件的建立 對于一個磁盤上不存在的文件,使用之前首先要對于一個磁盤上不存在的文件,使用之前首先要“建立建立”這個文件這個文件 。 注意:建立文件時,應(yīng)確保在同一個目錄中該文件不存在注意:建立文件時,應(yīng)確保在同一個目錄中該文件不存在,否
23、則將覆蓋原來存在的同名文件,造成信息的丟失,除非,否則將覆蓋原來存在的同名文件,造成信息的丟失,除非你用這種方法同時你用這種方法同時“刪除刪除”一個不再需要的老文件。一個不再需要的老文件。6.2.2 6.2.2 文件的建立、打開和關(guān)閉文件的建立、打開和關(guān)閉 3232DATASEGMENTFILENAME DB D:STUDENTTEST1.DAT, 0HANDLE DW ?SUCCESS DB 0DH, 0AH, The file has been CREATED. $FAIL DB 0DH, 0AH, The file fail to be CREATED. $ DATAENDSCODESE
24、GMENT ASSUME CS: CODE,DS: DATASTART:MOVAX, DATAMOV DS, AX 例例6-4 在在D盤的盤的STUDENT文件夾下建立一個名為文件夾下建立一個名為TEST1.DAT文件,文件,建立成功顯示建立成功顯示“The file has been CREATED.”,將文件代號存放在,將文件代號存放在FILENUM字單元,否則顯示字單元,否則顯示“The file fail to be CREATED.”。 3333 LEA DX, FILENAME; ASCIZ串地址置入串地址置入DS: DX MOV CX, 0 ; 文件屬性為文件屬性為0(普通文件)
25、(普通文件) MOV AH, 3CH INT 21H; 建立該文件建立該文件 JNC SUCCE; CF=0,轉(zhuǎn),轉(zhuǎn)SUCCE LEA DX, FAIL; CF=1,置出錯信息地址,置出錯信息地址 JMP QUITSUCCE:MOV HANDLE, AX; 保存文件代號保存文件代號 LEA DX, SUCCESS ; 取取“成功成功”信息地址信息地址QUIT: MOV AH, 09H INT 21H; 顯示成功顯示成功/失敗信息失敗信息 MOV AH, 4CH INT 21HCODE ENDSENDSTART34342. 文件的打開文件的打開 對一個已經(jīng)存在的磁盤文件進行讀、寫操作前,首先要對
26、一個已經(jīng)存在的磁盤文件進行讀、寫操作前,首先要“打開打開”這個文件這個文件 。 存取代碼存取代碼 :存取代碼告訴操作系統(tǒng)打開文件要進行什么樣操作:存取代碼告訴操作系統(tǒng)打開文件要進行什么樣操作。 打開一個文件打開一個文件: AH = 3DH DS: DX = ASCIZ串首地址串首地址 AL=文件存取代碼文件存取代碼3535只讀文件只能用代碼只讀文件只能用代碼0來打開,如果使用存取代碼來打開,如果使用存取代碼1或或2時將報告時將報告錯誤。錯誤。打開一個不存在的文件同樣也會報告錯誤。打開一個不存在的文件同樣也會報告錯誤。常用的文件存取代碼:常用的文件存取代碼:0:為讀而打開文件:為讀而打開文件1:
27、為寫而打開文件:為寫而打開文件2:為讀和寫打開文件:為讀和寫打開文件36363. 關(guān)閉文件關(guān)閉文件 一個文件讀寫完畢之后,需要將它關(guān)閉,這個文件從一個文件讀寫完畢之后,需要將它關(guān)閉,這個文件從“活活動狀態(tài)動狀態(tài)”回復(fù)到回復(fù)到“靜止靜止”狀態(tài)。狀態(tài)。 關(guān)閉文件的操作通過關(guān)閉文件的操作通過3EH的的DOS功能調(diào)用實現(xiàn)功能調(diào)用實現(xiàn)37376.3.1 6.3.1 文件寫文件寫6.3.2 6.3.2 文件讀文件讀 6.3.2 6.3.2 文件指針文件指針3838 將一組信息記錄寫入文件中,用戶需要進行如下的操作:將一組信息記錄寫入文件中,用戶需要進行如下的操作:建立文件:使用建立文件:使用3CH的的DO
28、S功能調(diào)用建立這個文件,保存功能調(diào)用建立這個文件,保存返回的文件代號。返回的文件代號。寫文件:把需要寫入磁盤文件的內(nèi)容寫入寫文件:把需要寫入磁盤文件的內(nèi)容寫入“磁盤緩沖區(qū)磁盤緩沖區(qū)”,然后使用,然后使用40H的的DOS功能調(diào)用把這些信息寫入文件。功能調(diào)用把這些信息寫入文件。關(guān)閉文件:使用關(guān)閉文件:使用3EH的的DOS功能調(diào)用關(guān)閉這個文件。功能調(diào)用關(guān)閉這個文件。6.3.1 6.3.1 文件寫文件寫 3939例例6-5 下面的程序首先要求輸入一個磁盤文件名,隨后把鍵盤輸入的下面的程序首先要求輸入一個磁盤文件名,隨后把鍵盤輸入的文字存放到這個磁盤文件中。文字存放到這個磁盤文件中。DATASEGMEN
29、T MESS0 DB0DH, 0AH, “Input File Name Please: $” BUFFER DB60, ? FILENAME DB60 DUP( ? ) HANDLE DW? DTA DB ? PROMPT DB0DH, 0AH, Input Text Please: $ SUCCESS DB 0DH, 0AH, Write Success $ FAIL1 DB 0DH, 0AH, Fail to Create $ FAIL2 DB 0DH, 0AH, Fail to Write $DATAENDS4040 CODESEGMENT ASSUMECS: CODE, DS: DA
30、TA START:MOVAX, DATA MOVDS, AX LEADX, MESS0; 為輸入文件名輸出提示信息為輸入文件名輸出提示信息 MOVAH, 09H INT21H LEADX, BUFFER; 輸入文件名輸入文件名 MOVAH, 0AH INT21H MOVBL, BUFFER+1 MOVBH, 0 MOVFILENAMEBX, 0; 把回車字符修改為把回車字符修改為00H,形成,形成ASCIZ串串4141 LEA DX, FILENAME;ASCIZ串首地址裝入串首地址裝入DS: DX MOV AH, 3CH;建立文件的功能代號;建立文件的功能代號 MOV CX, 00H;文件屬
31、性(普通文件);文件屬性(普通文件) INT 21H;建立文件;建立文件 JC ERR1;建立出錯,轉(zhuǎn);建立出錯,轉(zhuǎn)ERR1 MOV HANDLE, AX;保存文件代號;保存文件代號 LEA DX, PROMPT MOV AH, 09H INT 21H ;顯示提示信息,要求用戶鍵盤輸入;顯示提示信息,要求用戶鍵盤輸入 LEA DX, DTA ;DTA首地址裝入首地址裝入DS: DX MOV BX, HANDLE;文件代號裝入;文件代號裝入BX4242 AGAIN:MOV AH, 01H INT 21H MOV DTA, AL ;鍵盤上輸入一個字符,送入;鍵盤上輸入一個字符,送入DTA AGN1
32、:MOV AH, 40H MOV CX, 1 INT 21H;把這個字符寫入磁盤文件;把這個字符寫入磁盤文件 JCERR2;寫文件錯誤,轉(zhuǎn);寫文件錯誤,轉(zhuǎn)ERR2 CMP DTA, 0DH;剛輸入字符是回車?;剛輸入字符是回車? JNEAGN2 PUSH DX;保護;保護DX的值的值 MOV AH, 2 MOV DL, 0AH4343 INT 21H;回車字符后面輸出換行;回車字符后面輸出換行 POP DX;恢復(fù);恢復(fù)DX的值的值 MOV DTA, 0AH;換行字符填入;換行字符填入DTA JMP AGN1;換行字符補寫到磁盤文件;換行字符補寫到磁盤文件AGN2: CMP DTA, 1AH;剛
33、輸入字符是;剛輸入字符是EOF? JNE AGAIN;不是;不是EOF,繼續(xù)鍵盤輸入,繼續(xù)鍵盤輸入 LEA DX, SUCCESS CALL DISP;顯示寫文件成功信息;顯示寫文件成功信息CLOSE:MOV AH, 3EH MOVBX, HANDLE INT 21H;關(guān)閉文件;關(guān)閉文件 JMPEXIT4444ERR1: LEADX, FAIL1CALLDISP;顯示打開錯誤信息;顯示打開錯誤信息 JMPEXIT ;打開不成功;打開不成功,無需關(guān)閉,轉(zhuǎn)無需關(guān)閉,轉(zhuǎn)EXIT結(jié)束結(jié)束ERR2: LEADX, FAIL2;顯示寫文件錯信息;顯示寫文件錯信息CALLDISPJMPCLOSE;文件已打開
34、,需要關(guān)閉;文件已打開,需要關(guān)閉EXIT:MOVAH, 4CH INT21H;返回;返回OSDISP:MOVAH, 09HINT21HRETCODE ENDSENDSTART 45451. 1. 從文件中讀出信息,需要以下操作:從文件中讀出信息,需要以下操作: 打開文件:使用打開文件:使用3DH的的DOS功能調(diào)用打開這個文件,保功能調(diào)用打開這個文件,保存返回的文件代號存返回的文件代號 讀文件:把讀文件:把“磁盤緩沖區(qū)磁盤緩沖區(qū)”首地址裝入首地址裝入DS: DX,文件代,文件代號裝入號裝入BX,讀取字節(jié)數(shù)裝入,讀取字節(jié)數(shù)裝入CX,使用,使用3FH的的DOS功能調(diào)功能調(diào)用把文件信息讀到磁盤緩沖區(qū)內(nèi)
35、用把文件信息讀到磁盤緩沖區(qū)內(nèi) 關(guān)閉文件:使用關(guān)閉文件:使用3EH的的DOS功能調(diào)用關(guān)閉這個文件功能調(diào)用關(guān)閉這個文件6.3.2 6.3.2 文件讀文件讀4646例例6-6 打開磁盤上的一個文本文件,將它的內(nèi)容顯示在顯示器上打開磁盤上的一個文本文件,將它的內(nèi)容顯示在顯示器上 (類似于(類似于DOS命令命令TYPE)。)。;EX606.ASMDATASEGMENTHANDLEDW?DTADB?PROMPT0DB 0DH, 0AH, No Filename in Command Line. $PROMPT1DB0DH, 0AH, Open File Error. $PROMPT2DB0DH, 0AH,
36、 Read File Error. $DATAENDSCODESEGMENT ASSUMECS: CODE, DS: DATA4747START:CLD MOVDI, 0081H ;命令行參數(shù)區(qū)在;命令行參數(shù)區(qū)在PSP中的偏移量中的偏移量CMPBYTE PTRDI-1, 0;有參數(shù)字符?;有參數(shù)字符?JEERR0;參數(shù)為;參數(shù)為“空空”,報告錯誤,報告錯誤 MOVAL, 0DH MOVCX, 40 REPNE SCASB;測試參數(shù)長度;測試參數(shù)長度 JNZERR0;長度超過;長度超過40字符,報告錯誤字符,報告錯誤 MOVBYTE PTR DI-1, 0 ;將回車字符修改為;將回車字符修改為0
37、,形成,形成ASCIZ串串 MOVDX, 0081H;DS: DX指向指向ASCIZ串串 MOVAH, 3DH MOVAL, 0;打開方式;打開方式0,為讀打開,為讀打開 INT21H;打開這個文件;打開這個文件 JC ERR1;打開失敗,轉(zhuǎn);打開失敗,轉(zhuǎn)ERR14848MOVCX, DATA MOVDS, CX;裝載;裝載DS MOVHANDLE, AX;保存文件代號;保存文件代號 AGAIN:LEA DX, DTA;DS: DX指向指向DTA MOVBX, HANDLE;BX=文件代號文件代號 MOVCX, 1;CX=讀取字節(jié)數(shù)讀取字節(jié)數(shù) MOVAH, 3FH INT21H;從文件中讀;從
38、文件中讀1字節(jié),存入字節(jié),存入DTA JCERR2;讀錯,轉(zhuǎn);讀錯,轉(zhuǎn)ERR2 CMPAX, 0;讀出字節(jié)數(shù)為;讀出字節(jié)數(shù)為0?JECLOSE;讀出字節(jié)數(shù)為;讀出字節(jié)數(shù)為0,轉(zhuǎn),轉(zhuǎn)CLOSECMPDTA, 1AH;讀出內(nèi)容是;讀出內(nèi)容是EOF?JECLOSE;讀出內(nèi)容是;讀出內(nèi)容是EOF,轉(zhuǎn),轉(zhuǎn)CLOSEMOVDL, DTAMOVAH, 2INT21H;將讀出字符送顯示器輸出;將讀出字符送顯示器輸出JMPAGAIN;重復(fù)上述過程;重復(fù)上述過程4949ERR0: MOV AX, DATA;尚未裝載;尚未裝載DSMOV DS, AX;為顯示出錯信息裝載;為顯示出錯信息裝載DSLEADX, PROM
39、PT0 CALLDISP;顯示;顯示“命令行無參數(shù)命令行無參數(shù)”錯錯誤誤JMPEXITERR1: MOV AX, DATA;尚未裝載;尚未裝載DSMOVDS, AX;為顯示出錯信息裝載;為顯示出錯信息裝載DSLEADX, PROMPT1CALLDISP;顯示;顯示“文件打開錯誤文件打開錯誤” JMPEXITERR2: LEADX, PROMPT2CALLDISP;顯示;顯示“文件讀錯誤文件讀錯誤”5050CLOSE:MOVAH, 3EH MOVBX, HANDLE INT21H;關(guān)閉文件;關(guān)閉文件EXIT:MOVAH, 4CH INT21H;返回;返回OSDISP: MOVAH, 09H IN
40、T21H RETCODE ENDSENDSTART51511. 1. 文件的指針文件的指針 “文件指針文件指針”變量,記錄著應(yīng)從文件的什么地方讀出數(shù)據(jù)變量,記錄著應(yīng)從文件的什么地方讀出數(shù)據(jù),或者,應(yīng)向文件的什么地方寫入數(shù)據(jù)。,或者,應(yīng)向文件的什么地方寫入數(shù)據(jù)。 如果需要讀、寫文件中某一個指定位置開始的內(nèi)容,則首如果需要讀、寫文件中某一個指定位置開始的內(nèi)容,則首先要使文件指針指向該位置。先要使文件指針指向該位置。 操作系統(tǒng)提供了移動文件指針的功能(功能號操作系統(tǒng)提供了移動文件指針的功能(功能號42H)。)。6.3.3 6.3.3 文件指針文件指針5252入口入口: BX=文件代號。文件代號。 C
41、X: DX=雙字長的偏移值,帶符號整數(shù),正數(shù)或負(fù)數(shù)。雙字長的偏移值,帶符號整數(shù),正數(shù)或負(fù)數(shù)。 AL=指定指針調(diào)整的三種方式之一:指定指針調(diào)整的三種方式之一: 0 絕對移動方式,以文件開頭位置加絕對移動方式,以文件開頭位置加CX: DX偏移值來移動指針偏移值來移動指針1 相對移動方式,以當(dāng)前指針位置加相對移動方式,以當(dāng)前指針位置加CX: DX偏移值來移動指針偏移值來移動指針2 絕對倒移方式,以文件尾的位置加絕對倒移方式,以文件尾的位置加CX: DX偏移值來移動指針偏移值來移動指針出口出口: 如果成功(如果成功(CF=0),),CX: DX中為移動后的新指針的值。中為移動后的新指針的值。移動文件指
42、針操作(功能號移動文件指針操作(功能號42H)53532. 2. 文件追加文件追加 :在已有的文件后面添加新的記錄:在已有的文件后面添加新的記錄 v 以寫方式打開這個文件(以寫方式打開這個文件(AL=1) v 取取CX:DX=00:00,使用,使用AL2的絕對倒移方式移動指針,使文的絕對倒移方式移動指針,使文件指針指向文件尾部;件指針指向文件尾部; v 把追加內(nèi)容存入磁盤緩沖區(qū);把追加內(nèi)容存入磁盤緩沖區(qū); v 使用使用AH=40H的系統(tǒng)功能調(diào)用,把磁盤緩沖區(qū)內(nèi)容寫入文件;的系統(tǒng)功能調(diào)用,把磁盤緩沖區(qū)內(nèi)容寫入文件; v 重復(fù)步驟重復(fù)步驟 3),),4),直到所有內(nèi)容寫入文件;),直到所有內(nèi)容寫入
43、文件; 1)關(guān)閉這個文件。關(guān)閉這個文件。5454例例6-7 把文本文件把文本文件D:MYDOC2.TXT拼接在文本文件拼接在文本文件 D:MYDOC1.TXT的后面,實現(xiàn)文件的的后面,實現(xiàn)文件的“連接連接”。DATA SEGMENTFILENAME1 DB D:MYDOC1.TXT, 0FILENAME2DBD:MYDOC2.TXT, 0DTADB256 DUP (?) ; 磁盤緩沖區(qū)磁盤緩沖區(qū)HANDLE1 DW?HANDLE2DW?DONEDB0 ; 文件文件2讀操作完成標(biāo)志讀操作完成標(biāo)志FAIL1 DB0DH, 0AH, Open File Error. $FAIL2 DB 0DH,0A
44、H,Move File Pointer Error. $FAIL3DB0DH, 0AH, Read File Error. $FAIL4 DB 0DH, 0AH, Write File Error. $ DATA ENDS5555CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOVAX, DATAMOVDS, AXMOVDONE, 0; 置置“未完成未完成”標(biāo)志標(biāo)志 LEADX,F(xiàn)ILENAME1; 為為“寫寫”打開文件打開文件1MOV AL,01HMOV AH,3DHINT 21HJC ERR11 ; 打開不成功,轉(zhuǎn)打開不成功,轉(zhuǎn)ERR11MOVHANDL
45、E1, AX ;保存文件代號;保存文件代號5656LEADX, FILENAME2; 為為“讀讀”打開文件打開文件2 MOVAL, 0 MOVAH, 3DH INT21HJCERR12; 打開不成功,轉(zhuǎn)打開不成功,轉(zhuǎn)ERR12MOVHANDLE2, AX;保存文件代號;保存文件代號 MOVAH, 42H ; 把文件把文件1指針移動到文件尾部指針移動到文件尾部MOVAL, 02MOVDX, 0MOVCX, 0MOVBX, HANDLE1INT21HJCERR2 ; 移動指針不成功,轉(zhuǎn)移動指針不成功,轉(zhuǎn)ERR25757AGAIN:MOVAH, 3FH; 讀文件讀文件2LEADX, DTAMOVBX
46、, HANDLE2MOVCX, 256INT21HJCERR3; 讀文件失敗,轉(zhuǎn)讀文件失敗,轉(zhuǎn)ERR3PUSHAXCMPAX, 0JNEAGA1MOVDONE, 1JMPFINISH; 文件結(jié)束,轉(zhuǎn)文件結(jié)束,轉(zhuǎn)FINISHAGA1: CMP AX, 256JECONTMOVDONE, 1; 文件結(jié)束,置完成標(biāo)志文件結(jié)束,置完成標(biāo)志5858CONT:MOV AH, 40H; 寫文件寫文件1LEADX, DTAMOVBX, HANDLE1POPCXINT21HJCERR4; 寫文件失敗,轉(zhuǎn)寫文件失敗,轉(zhuǎn)ERR4CMPDONE, 0JEAGAINFINISH:MOV AH, 3EH; 關(guān)閉文件關(guān)閉文
47、件2MOVBX, HANDLE2INT21HFINISH1:MOV AH, 3EHMOVBX, HANDLE1; 關(guān)閉文件關(guān)閉文件1INT21HJMPEXIT5959ERR11: LEA DX, FAIL1; 打開文件打開文件1失敗,顯示信息失敗,顯示信息MOVAH, 09H; 然后返回操作系統(tǒng)然后返回操作系統(tǒng)INT21HJMPEXITERR12:LEA DX, FAIL1; 打開文件打開文件2失敗,顯示信息失敗,顯示信息MOVAH, 09H; 轉(zhuǎn)向轉(zhuǎn)向FINISH1,關(guān)閉文件,關(guān)閉文件1INT21HJMPFINISH1ERR2: LEADX, FAIL2 ; 移動指針失敗,顯示信息移動指針失
48、敗,顯示信息JMPDISPERR3: LEADX, FAIL3 ; 讀文件失敗,顯示信息讀文件失敗,顯示信息JMPDISPERR4: LEADX, FAIL4; 寫文件失敗,顯示信息寫文件失敗,顯示信息 6060DISP:MOVAH, 09H; 顯示出錯信息顯示出錯信息INT21HJMPFINISH; 轉(zhuǎn)轉(zhuǎn)FINISH,關(guān)閉文件,關(guān)閉文件EXIT:MOV AX, 4C00HINT 21HCODE ENDSENDSTART6161 假設(shè)文件假設(shè)文件“D:MYDOC1.TXT”和和“D:MYDOC2.TXT”已經(jīng)存在,先后執(zhí)行命令:已經(jīng)存在,先后執(zhí)行命令:D:TASM5DIR D:MYDOC?.T
49、XTD:TASM5EX607D:TASM5DIR D:MYDOC?.TXTD:TASM5TYPE D:MYDOC1.TXT將會發(fā)現(xiàn),執(zhí)行程序?qū)l(fā)現(xiàn),執(zhí)行程序“EX607.EXE”之后,文件之后,文件“MYDOC1.TXT”的長度是執(zhí)行之前文件的長度是執(zhí)行之前文件“D:MYDOC1.TXT”和和“D:MYDOC2.TXT”長度之和,而且長度之和,而且它的內(nèi)容也是原來這兩個文件內(nèi)容的它的內(nèi)容也是原來這兩個文件內(nèi)容的“連接連接”。 62623. 3. 文件隨機讀寫文件隨機讀寫 “ “順序讀順序讀”、“順序?qū)戫樞驅(qū)憽?:對文件的讀寫都是從文件頭部:對文件的讀寫都是從文件頭部開始順序進行。開始順序進行
50、。 記錄記錄 :許多磁盤文件內(nèi)部由若干:許多磁盤文件內(nèi)部由若干“組組”信息組合而成的信息組合而成的 ,這個信息這個信息“組組”稱為稱為“記錄記錄(Record)” 。 隨機讀寫文件隨機讀寫文件 :文件的讀寫以:文件的讀寫以“記錄記錄”為單位進行,可以為單位進行,可以按照記錄的自然順序進行,也可以任意選擇其中的一個或幾按照記錄的自然順序進行,也可以任意選擇其中的一個或幾個記錄進行。個記錄進行。6363 (1) 建立隨機讀寫文件建立隨機讀寫文件用用AH=3CH功能建立文件;功能建立文件;將磁盤緩沖區(qū)將磁盤緩沖區(qū)“清空清空”;用順序?qū)懛绞街貜?fù)寫入文件,用順序?qū)懛绞街貜?fù)寫入文件,得到一個由若干個等長得
51、到一個由若干個等長“空空”記錄組成的隨機讀寫文件。記錄組成的隨機讀寫文件。 對對“隨機讀寫文件隨機讀寫文件”進行操作時,磁盤緩沖區(qū)大小一般進行操作時,磁盤緩沖區(qū)大小一般等于文件內(nèi)一個記錄的長度。等于文件內(nèi)一個記錄的長度。6464(2) 隨機讀文件隨機讀文件 用用AH=3DH功能打開該文件;功能打開該文件;根據(jù)記錄號計算出該記錄在文件內(nèi)的位置;根據(jù)記錄號計算出該記錄在文件內(nèi)的位置;用用AH=42H功能將文件指針指向該記錄;功能將文件指針指向該記錄;用用AH=3FH功能讀出該記錄。功能讀出該記錄。 6565 (3 3) 隨機寫文件隨機寫文件用用AH=3DH功能打開該文件;功能打開該文件;根據(jù)記錄號
52、計算出該記錄在文件內(nèi)的位置;根據(jù)記錄號計算出該記錄在文件內(nèi)的位置;用用AH=42H功能將文件指針指向該記錄功能將文件指針指向該記錄 (如果該記錄不存在,則仿照建立文件的方法,在該(如果該記錄不存在,則仿照建立文件的方法,在該 記錄前面寫入若干個記錄前面寫入若干個“空空”記錄);記錄);將該記錄內(nèi)容寫入磁盤緩沖區(qū);將該記錄內(nèi)容寫入磁盤緩沖區(qū);用用AH=40H功能將新內(nèi)容寫入該記錄。功能將新內(nèi)容寫入該記錄。6666(4) 修改文件內(nèi)容修改文件內(nèi)容用用AH=3DH功能打開該文件;功能打開該文件;根據(jù)記錄號計算出該記錄在文件內(nèi)的位置;根據(jù)記錄號計算出該記錄在文件內(nèi)的位置;用用AH=42H功能將文件指針
53、指向該記錄;功能將文件指針指向該記錄;將該記錄內(nèi)容讀入磁盤緩沖區(qū);將該記錄內(nèi)容讀入磁盤緩沖區(qū);在緩沖區(qū)內(nèi)修改該記錄內(nèi)容;在緩沖區(qū)內(nèi)修改該記錄內(nèi)容;用用AH=42H功能將文件指針重新指向該記錄;功能將文件指針重新指向該記錄;用用AH=40H功能將修改后內(nèi)容寫入該記錄。功能將修改后內(nèi)容寫入該記錄。67674. 文件修改文件修改 (修改前后文件長度發(fā)生改變修改前后文件長度發(fā)生改變) 設(shè)被修改的文件由設(shè)被修改的文件由A,B,C三段組成,修改三段組成,修改“B”這一段內(nèi)容這一段內(nèi)容 (1) 以以“讀讀”方式打開待修改文件;方式打開待修改文件;(2)建立一個臨時文件;)建立一個臨時文件;(3)從文件頭部開始,讀出待修
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保齡球館簡易裝修合同模板
- 預(yù)制性塑膠跑道施工方案
- 印染行業(yè)氨水配送協(xié)議
- 咖啡館設(shè)計合同樣本
- 旅游景區(qū)裝修安全合同范本
- 汽車維修中心裝修合同樣本
- 保健食品道路運輸合同樣本
- 專業(yè)錄音棚裝修合同模板
- 旅游業(yè)務(wù)居間合作協(xié)議模板
- 順義重防腐地坪施工方案
- 2024年平面設(shè)計師技能及理論知識考試題庫(附含答案)
- 相互批評意見500條【5篇】
- 2024-2030年中國汽車駕駛培訓(xùn)市場發(fā)展動態(tài)與前景趨勢預(yù)測報告
- 中鐵十四局合同范本
- 醫(yī)院課件:《食源性疾病知識培訓(xùn)》
- 浙教版七年級數(shù)學(xué)下冊單元測試題及參考答案
- 華為人才發(fā)展與運營管理
- 2024年廣州金融控股集團有限公司招聘筆試沖刺題(帶答案解析)
- 中國食物成分表2018年(標(biāo)準(zhǔn)版)第6版
- 九三學(xué)社申請入社人員簡歷表
- 卓有成效的管理者讀后感3000字
評論
0/150
提交評論