YWX6字符串與文件處理_第1頁
YWX6字符串與文件處理_第2頁
YWX6字符串與文件處理_第3頁
YWX6字符串與文件處理_第4頁
YWX6字符串與文件處理_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、1 12 23 3字符串字符串: 計算機中常常用到字符串,如變量名、文件名等都是計算機中常常用到字符串,如變量名、文件名等都是字符串,每個字符的編碼占用一個字節(jié),連續(xù)地存存貯在字符串,每個字符的編碼占用一個字節(jié),連續(xù)地存存貯在內(nèi)存儲器中。內(nèi)存儲器中。 文件文件: 文件是存放在外存儲器上的程序或數(shù)據(jù)。文件是存放在外存儲器上的程序或數(shù)據(jù)。文件分類:文件分類: 4 46.1.1 6.1.1 與與配合使用的串指令配合使用的串指令 6.1.2 6.1.2 與與配合使用的指令配合使用的指令 5 51 1、源操作數(shù)一般由、源操作數(shù)一般由 DSDS:SISI提供,提供, 目的操作數(shù)一般由目的操作數(shù)一般由ESE

2、S:DIDI提供。提供。 2 2、每執(zhí)行一次串操作,自動修改、每執(zhí)行一次串操作,自動修改SISI和(或)和(或)DIDI,使其指向,使其指向 下一個下一個 3 3、方向標志、方向標志DFDF控制對:控制對: SISI、DIDI遞增遞增存儲單元地址由小到大存儲單元地址由小到大 SISI、DIDI遞減遞減存儲單元地址有大到小存儲單元地址有大到小4 4、指令、指令STDSTD將將DFDF置置11遞增;指令遞增;指令CLDCLD將將DFDF清清00遞減遞減 6 6 格式:格式: / / / / 執(zhí)行的操作:執(zhí)行的操作: (1 1)目的操作數(shù)單元)目的操作數(shù)單元源操作數(shù),源操作數(shù), (2 2)按照)按照

3、修改修改SISI和和DIDI中的地址中的地址7 7 格式:格式: REP REP 串操作指令串操作指令 執(zhí)行的操作:重復執(zhí)行串操作指令,執(zhí)行的操作:重復執(zhí)行串操作指令, 如果(如果(CXCX) 0 0: (1 1)()(CX CX )()(CX CX )1 1 (2 2)執(zhí)行串指令)執(zhí)行串指令 (3 3)轉(zhuǎn)向()轉(zhuǎn)向(1 1) 如果(如果(CXCX)= 0= 0,結(jié)束本指令操作,結(jié)束本指令操作8 8帶帶REPREP前綴的串傳送指令前綴的串傳送指令SISI源串的首地址或尾地址源串的首地址或尾地址DIDI目的串的首地址或尾地址目的串的首地址或尾地址DF0DF0或或1 1CXCX串長度串長度CX=0

4、結(jié)束串操作結(jié)束串操作YCXCX1MOVSN9 9 MOV AX,CS MOV DS,AX MOV ES,AX ;CS、DS、ES三段合一三段合一 ; 源數(shù)據(jù)的起始偏移地址送入源數(shù)據(jù)的起始偏移地址送入SI ; 目的數(shù)據(jù)的起始偏移地址送入目的數(shù)據(jù)的起始偏移地址送入DI以下用三種方法實現(xiàn):1010(1) MOV CX, ;字符串長度送入;字符串長度送入CXAGAIN: MOV AL, SI ;從源數(shù)據(jù)區(qū)取出一個字節(jié);從源數(shù)據(jù)區(qū)取出一個字節(jié) MOV :DI,AL;存入目的數(shù)據(jù)區(qū);存入目的數(shù)據(jù)區(qū) ;修改源數(shù)據(jù)區(qū)指針;修改源數(shù)據(jù)區(qū)指針 INC DI;修改目的數(shù)據(jù)區(qū)指針;修改目的數(shù)據(jù)區(qū)指針 LOOP AGA

5、IN;重復上面的操作;重復上面的操作100次次 1111(2)MOV CX, ;字符串長度送入;字符串長度送入CXAGAIN: ;從源數(shù)據(jù)傳送一個字節(jié)到目的數(shù)據(jù)區(qū);從源數(shù)據(jù)傳送一個字節(jié)到目的數(shù)據(jù)區(qū)LOOP AGAIN ;重復上面的操作;重復上面的操作100次次(3);方向標志;方向標志DF清清0MOV CX,;字符串長度送人;字符串長度送人CX;執(zhí)行;執(zhí)行100次次MOVSB指令指令1212 格式:格式: STOSSTOS / STOS/ STOS /STOS/STOS 執(zhí)行的操作:執(zhí)行的操作: (1 1)目的存儲單元)目的存儲單元累加器累加器ALAL、AXAX、EAXEAX 字節(jié)操作:字節(jié)操

6、作:ES:DIES:DI(ALAL) 字操作:字操作: ES:DIES:DI(AXAX) 雙字操作:雙字操作:ES:DIES:DI(EAXEAX) (2 2)修改)修改DIDI值值1313 格式:格式: LODSLODS / LODS/ LODS /LODS/LODS 執(zhí)行的操作:執(zhí)行的操作: (1 1)累加器)累加器源存儲單元源存儲單元 字節(jié)操作:(字節(jié)操作:(ALAL) DS:SI DS:SI 字操作:字操作: (AXAX) DS:SI DS:SI 雙字操作:(雙字操作:(EAXEAX)DS:SI DS:SI (2 2)修改)修改SISI值值14141515 格式:格式:CMPSCMPS

7、/CMPS/CMPS /CMPS/CMPS 執(zhí)行的操作:執(zhí)行的操作: (1 1)源操作數(shù)目的操作數(shù))源操作數(shù)目的操作數(shù) 即:(即:(DS:SIDS:SI)()(ES:DIES:DI),), 不保存減法得到的差,但產(chǎn)生新的狀態(tài)標志不保存減法得到的差,但產(chǎn)生新的狀態(tài)標志 (2 2)修改)修改SISI和和DIDI值值1616SISI源串的首地址或尾地址源串的首地址或尾地址DIDI目的串的首地址或尾地目的串的首地址或尾地址址DF0DF0或或1 1CXCX串長度串長度帶帶REPZ/REPEREPZ/REPE前綴的串比較指令前綴的串比較指令CXCXCXCX1 1CX=0或ZF=0CMPS結(jié)束串操作結(jié)束串操

8、作YN1717 格式:格式: 執(zhí)行的操作:如執(zhí)行的操作:如ZFZF1 1且(且(CXCX)00,重復執(zhí)行串指令,重復執(zhí)行串指令 (1 1) 如如 且(且(CXCX)00,則:,則: (a a) 執(zhí)行串操作指令執(zhí)行串操作指令 (b b)()(CXCX)()(CXCX)1 1 (c c) 返回(返回(1 1) (2) ZF(2) ZF0 0或或(CX)(CX)0 0,執(zhí)行,執(zhí)行“REPE/REPZ REPE/REPZ 串指令串指令”的后續(xù)指令的后續(xù)指令. . 1818(1)用循環(huán)控制方法編寫的程序段)用循環(huán)控制方法編寫的程序段CODESEGMENTASSUME CS: CODE, DS: CODE

9、START:MOVAX, CODE MOVDS, AX MOVES, AX LEA SI, STRING1 LEA DI, STRING2 MOV CX, NAGA:MOVAL, SI CMPAL, ES: DI JNE NO INC SI INC DI LOOPAGA JMP YESNO: LEA DX, MESS2 JMP DISPYES: LEA DX, MESS1DISP: MOV AH, 09H INT 21H MOV AX, 4C00H INT 21HSTRING1 DB ALL STUDENTS STRING2 DB ALL STODENTS N EQU STRING2-STRI

10、NG1 MESS1 DB 0DH, 0AH, Yes, Strings are matched. $ MESS2DB 0DH, 0AH, No, Strings are not matched. $CODEENDS ENDSTART1919例例L6-3 :用重復比較指令用重復比較指令 REPZ CMPSB 實現(xiàn)實現(xiàn)L6-2CODESEGMENTASSUMECS: CODE, DS: CODESTART:MOVAX, CODE MOVDS, AX MOVES, AX LEA SI, STRING1 LEA DI, STRING2 MOV CX, N REPZ CMPSB JNE NOYES: L

11、EADX, MESS1 JMP DISPNO: LEADX, MESS2DISP: MOV AH, 09H INT 21H MOV AX, 4C00H INT 21HSTRING1 DB ALL STUDENTS STRING2 DB ALL STODENTS N EQU STRING2-STRING1 MESS1 DB 0DH, 0AH, Yes, Strings are matched. $ MESS2 DB 0DH, 0AH, No, Strings are not matched. $CODEENDS ENDSTART2020 該前綴與該前綴與REPZREPZREPEREPE對標志位對

12、標志位ZFZF的判別條件剛好相反的判別條件剛好相反 格式:格式: REPNZ / REPNE REPNZ / REPNE 串指令串指令 執(zhí)行的操作:如果執(zhí)行的操作:如果ZF=0ZF=0且(且(CXCX)00,重復串操作,重復串操作 如如ZFZF0 0且(且(CXCX)00,則:,則: (1 1)執(zhí)行串操作指令)執(zhí)行串操作指令 (2 2)()(CXCX)()(CXCX)1 1 ZF ZF1 1或(或(CXCX)0 0,停止執(zhí)行本指令,執(zhí)行下一條指令,停止執(zhí)行本指令,執(zhí)行下一條指令 2121 格式:格式: SCASB/ SCASW/SCASD SCASB/ SCASW/SCASD 執(zhí)行的操作:執(zhí)行

13、的操作: (1 1)累加器目的操作數(shù))累加器目的操作數(shù) 字節(jié)操作:(字節(jié)操作:(ALAL) (ES:DIES:DI) 字操作:字操作: (AXAX) (ES:DIES:DI) 雙字操作:(雙字操作:(EAXEAX)()(ES:DIES:DI) (2 2)修改)修改DIDI值值2222;功能:求一個字符串的長度;功能:求一個字符串的長度;入口:;入口:;說明:假設字符串長度不超過;說明:假設字符串長度不超過6000060000字符字符2323求一個字符串的長度求一個字符串的長度CODESEGMENTASSUME CS: CODE, DS: CODE :MOVAX, CODE MOVDS, AX

14、MOVES, AX LEA DI, STR CLDXORAX, AXMOVCX, 60000REPNE SCASBMOVAX, 60000SUBCXDEC AX CALL XSAXMOV AX, 4C00H INT 21HSTR DB ABCDEFGHIJK,0 xsax proc near push ax push bx push dx mov dh,1 mov dl,al lea bx,tab1again:mov al,ah push cx mov cl,4 shr al,cl pop cx xlat push ax mov ah,0eh int 10h pop ax mov al,ah

15、and al,0fh xlat mov ah,0eh int 10h cmp dh,2 jz exitmov dh,2 mov ah,dl jmp againexit:mov ax,0e48H int 10h pop dx pop bx pop ax rettab1 db 0123456789abcdefxsax endp 2424例例6-5: 在在STR1為首地址的字符串中,查找有幾個子字符串為首地址的字符串中,查找有幾個子字符串china,并將包,并將包 含的子字符串的個數(shù)存入含的子字符串的個數(shù)存入F單元。單元。CODE SEGMENT ASSUME DS:CODE,ES:CODE,CS:

16、CODESTART:MOVAX,CODE MOVDS,AX MOVES,AX XOR DX,DX;DX存放包含的個數(shù)存放包含的個數(shù) CLDLEASI,STR1mov point,siADD POINT,COUNTMOV BX,SI;BX記錄查找的起始位置記錄查找的起始位置LP: LEA DI,STR2MOVCX,COUNT2 REPE CMPSB;相同時繼續(xù)比較直到相同時繼續(xù)比較直到CX=0JENT;找到子字符串時轉(zhuǎn)移找到子字符串時轉(zhuǎn)移INCBXJMPETNT: INC DX ;找到子字符串則計數(shù)加找到子字符串則計數(shù)加1MOVBX,SIET:MOV SI,BX CMP BX,POINT;查找是

17、否結(jié)束?查找是否結(jié)束? JBE LP ;沒有結(jié)束繼續(xù)查找沒有結(jié)束繼續(xù)查找 MOVF,DX MOV AX,F MOVAH,4CH INT21HSTR1DB I love china, china is a greate countryCOUNT1 EQU $-STR1;計算源串的字計算源串的字 符串長度(符串長度(38)STR2DB chinaCOUNT2 EQU $-STR2;計算目的串子計算目的串子 字符串長度(字符串長度(5)COUNT EQU COUNT1-COUNT2+1; 需要在源串中查找的次數(shù)需要在源串中查找的次數(shù)F DW 0point dw 02525 2626 文件路徑名指出該

18、文件在輔助存儲器上的位置,包括文件路徑名指出該文件在輔助存儲器上的位置,包括磁盤驅(qū)動器號、目錄路徑和文件名磁盤驅(qū)動器號、目錄路徑和文件名 路徑名和一個全路徑名和一個全0 0字節(jié)構成的字符串稱為字節(jié)構成的字符串稱為“ASCIZ”ASCIZ”串串 文件代號)文件代號) 操作系統(tǒng)為每個處于操作系統(tǒng)為每個處于“活動活動”狀態(tài)的文件分配一個用狀態(tài)的文件分配一個用1616位二進制表示的位二進制表示的“”(HandleHandle) 2727 在磁盤文件目錄表中每個文件都有一個記錄,其中用一個字節(jié)表述在磁盤文件目錄表中每個文件都有一個記錄,其中用一個字節(jié)表述該文件的屬性:該文件的屬性: D7 D6 D5 D

19、4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 文件屬性是一個文件屬性是一個數(shù)據(jù),但數(shù)據(jù),但,其它位未定義。,其它位未定義。 D0=1D0=1,表示只讀文件,打開只讀文件只能用于讀記錄,不能改寫記錄。,表示只讀文件,打開只讀文件只能用于讀記錄,不能改寫記錄。D1=1D1=1,表示隱藏文件,使用,表示隱藏文件,使用DOSDOS的的DIRDIR命令不能顯示隱藏文件。命令不能顯示隱藏文件。D2=1D2=1,表示系統(tǒng)文件。,表示系統(tǒng)文件。D3=1D3=1,表示文件作為磁盤的卷標號,不是通常意義上的文件。,表示文件作為磁盤的卷標號,不是通常意義上的文件。D4=1D4=1,表示

20、文件作為子目錄,不是通常意義上的文件。,表示文件作為子目錄,不是通常意義上的文件。D5=1D5=1,表示是已經(jīng)歸檔的文件(若寫入并關閉了文件,則歸檔位置,表示是已經(jīng)歸檔的文件(若寫入并關閉了文件,則歸檔位置1 1)。)。2828INT 21H只要給出只要給出就能讀寫文件。就能讀寫文件。 對磁盤文件進行操作,有可能成功或失敗,對磁盤文件進行操作,有可能成功或失敗,:標志位:標志位。:標志位:標志位,且,且AX中包含了錯誤代碼,用來指明對磁盤文件操中包含了錯誤代碼,用來指明對磁盤文件操作作 失敗的原因失敗的原因 在文件處理過程中,從磁盤讀出的數(shù)據(jù)或要寫入磁盤數(shù)據(jù),都要存在文件處理過程中,從磁盤讀出

21、的數(shù)據(jù)或要寫入磁盤數(shù)據(jù),都要存放在放在 一個指定的內(nèi)存區(qū)域,這個區(qū)域稱為一個指定的內(nèi)存區(qū)域,這個區(qū)域稱為:“” 或或“”。 2929 功能號功能號(AH)功功 能能 調(diào)用參數(shù)調(diào)用參數(shù) 返回參數(shù)返回參數(shù)建立文件建立文件DS=ASCIZ串段基址串段基址DX=ASCIZ串偏移地址串偏移地址CX=文件屬性文件屬性CF=0操作成功:操作成功: AX=文件代號文件代號CF=l操作出錯:操作出錯: AX錯誤代碼錯誤代碼打開文件打開文件DS=ASCIZ串段基址串段基址DX=ASCIZ串的偏移地址串的偏移地址AL=存取代碼存取代碼 CF=0操作成功:操作成功: AX=文件代號文件代號CF=l操作出錯:操作出錯:

22、 AX錯誤代碼錯誤代碼關閉文件關閉文件BX=CF=0操作成功操作成功 CF=l操作出錯:操作出錯: AX錯誤代碼錯誤代碼3030讀 文 件 或讀 文 件 或設備設備DS=數(shù)據(jù)緩沖區(qū)段基址數(shù)據(jù)緩沖區(qū)段基址DX=數(shù)據(jù)緩沖區(qū)偏移地數(shù)據(jù)緩沖區(qū)偏移地址址BX=CX=CF=0讀成功:讀成功: AX=實際讀實際讀入的字節(jié)數(shù)入的字節(jié)數(shù)AX=0表示文件表示文件結(jié)束結(jié)束CF=1讀出錯:讀出錯: AX=錯誤代錯誤代碼碼寫 文 件 或?qū)?文 件 或設備設備DS=數(shù)據(jù)緩沖區(qū)段基址數(shù)據(jù)緩沖區(qū)段基址DX=數(shù)據(jù)緩沖區(qū)偏移地數(shù)據(jù)緩沖區(qū)偏移地址址BX=CX=CF=0寫成功:寫成功: AX=實際寫入的字節(jié)數(shù)實際寫入的字節(jié)數(shù)CF=1

23、寫出錯:寫出錯: AX=錯誤代碼錯誤代碼功能號功能號(AH)功功 能能 調(diào)用參數(shù)調(diào)用參數(shù) 返回參數(shù)返回參數(shù)3131移 動 文 件移 動 文 件指針指針CX=所需字節(jié)的偏移所需字節(jié)的偏移地址地址(高位高位)DX=所需字節(jié)的偏移所需字節(jié)的偏移地址地址(低位低位)AL=移動方式碼移動方式碼BX=CF=0操作成功:操作成功:DX: AX=新指針位置新指針位置CF=1操作失?。翰僮魇。篈X=錯錯誤代碼誤代碼讀 寫 文 件讀 寫 文 件屬性屬性AL=0讀文件屬性讀文件屬性A L = 1 置 文 件 屬 性置 文 件 屬 性 CX=新屬性新屬性DS=ASCIZ串段基址串段基址DX=ASCIZ串偏移地串偏移

24、地址址CF=0操作成功:操作成功: AL=0,CX=屬性屬性CF=1操作失?。翰僮魇。?AX=錯誤代碼錯誤代碼功能號功能號(AH)功功 能能 調(diào)用參數(shù)調(diào)用參數(shù) 返回參數(shù)返回參數(shù)3232 對于一個磁盤上不存在的文件,使用之前首先要對于一個磁盤上不存在的文件,使用之前首先要“”這個文件這個文件 。 注意:建立文件時,應確保在同一個目錄中該文件不存在,否則將注意:建立文件時,應確保在同一個目錄中該文件不存在,否則將,造成信息的丟失,除非你用這種方法同時,造成信息的丟失,除非你用這種方法同時“刪除刪除”一個不再需要的老文件。一個不再需要的老文件。 3333 對一個已經(jīng)存在的磁盤文件進行讀、寫操作前,

25、首先要對一個已經(jīng)存在的磁盤文件進行讀、寫操作前,首先要“打開打開”這這個個 文件文件 。 :存取代碼告訴操作系統(tǒng)打開文件要進行什么樣操作。:存取代碼告訴操作系統(tǒng)打開文件要進行什么樣操作。 使用功能號為使用功能號為3DH的的DOS功能調(diào)用打開一個文件時,除了將功能調(diào)用打開一個文件時,除了將ASCIZ 串首地址裝入串首地址裝入DS: DX之外,還要將一個之外,還要將一個“”置入置入AL寄寄 存器存器 。3434只讀文件只能用代碼只讀文件只能用代碼0來打開,如果使用存取代碼來打開,如果使用存取代碼1或或2時將報告錯誤。時將報告錯誤。打開一個不存在的文件同樣也會報告錯誤。打開一個不存在的文件同樣也會報

26、告錯誤。:為讀而打開文件為讀而打開文件:為寫而打開文件:為寫而打開文件:為讀和寫打開文件:為讀和寫打開文件3535 一個文件讀寫完畢之后,需要將它關閉,此時:一個文件讀寫完畢之后,需要將它關閉,此時: 關閉文件的操作通過關閉文件的操作通過3EH的的DOS功能調(diào)用實現(xiàn)功能調(diào)用實現(xiàn)36363737 文件:文件:AH=H, DS:DXDS:DX指向文件名指向文件名ASCIZASCIZ串串, ,保存返保存返回的文件句柄。回的文件句柄。文件:文件: DS:DX指向讀寫緩沖區(qū)指向讀寫緩沖區(qū) CX=寫入的字節(jié)數(shù)寫入的字節(jié)數(shù) AH=40HINT 21H文件:使用文件:使用3EH的的DOS功能調(diào)用關閉這個文件。

27、功能調(diào)用關閉這個文件。 3838 文件:文件: DS:DX指向指向文件名文件名ASCIZ串;串; AH=3DH AL=讀寫方式,打開這個文件,保存返回的文件句柄讀寫方式,打開這個文件,保存返回的文件句柄 文件:文件: DS: DX指向指向“讀寫緩沖區(qū)讀寫緩沖區(qū)” ,BX=文件句柄,文件句柄, CX=讀取字節(jié)數(shù)讀取字節(jié)數(shù),AH=3FH ,數(shù)據(jù)讀到數(shù)據(jù)緩沖區(qū)中。數(shù)據(jù)讀到數(shù)據(jù)緩沖區(qū)中。 文件:使用文件:使用3EH的的DOS功能調(diào)用關閉這個文件功能調(diào)用關閉這個文件3939CODE SEGMENT ASSUME CS:CODE,DS:CODESTART: MOV AX,CODE MOV DS,AX MO

28、V DX,OFFSET FILE MOV CX , 0 ;普通可讀寫文件普通可讀寫文件 MOV AH , 3CH INT 21H ;創(chuàng)建文件,或覆蓋原文件創(chuàng)建文件,或覆蓋原文件 JC ERROR ;創(chuàng)建出錯,轉(zhuǎn)創(chuàng)建出錯,轉(zhuǎn)ERROR處處 MOV HANDLE , AX ;保存文件號保存文件號 MOV BX , AX MOV CX , 16 MOV DX , OFFSET BUF MOV AH , 40H INT 21H ;向文件中寫入向文件中寫入16個字節(jié)內(nèi)容個字節(jié)內(nèi)容 JC ERROR ;寫出錯,轉(zhuǎn)寫出錯,轉(zhuǎn)ERROR處處 MOV BX , HANDLE MOV AH , 3EH INT 2

29、1H ;關閉文件關閉文件 JC ERROR ;關閉文件出錯,轉(zhuǎn)關閉文件出錯,轉(zhuǎn)ERROR處處 MOV DX , OFFSET MESSAGE MOV AH , 9 INT 21H ;操作成功后顯示提示操作成功后顯示提示 JMP END1ERROR: MOV DX , OFFSET ERROR_MESSAGE MOV AH , 9 INT 21H ;顯示錯誤提示顯示錯誤提示END1: MOV AH , 4CH INT 21HFILE DB E:MYMASML.TXT , 0 ;創(chuàng)建文件的文件名創(chuàng)建文件的文件名BUF DB THIS IS A TEST ! ;寫到文件中去的內(nèi)容寫到文件中去的內(nèi)容E

30、RROR_MESSAGE DB 0AH , ERROR ! , $ ;出錯時的提示出錯時的提示MESSAGE DB 0AH , OK !$ ;操作成功后的提示操作成功后的提示HANDLE DW ? ;保存文件號保存文件號CODE ENDS END START4040CODE SEGMENT ASSUME CS:CODE , DS:CODESTART: MOV AX , CODE MOV DS , AX MOV DX , OFFSET FILE MOV AL , 0 MOV AH , 3DH INT 21H ;打開文件打開文件 JC ERROR ;若打開出錯,轉(zhuǎn)若打開出錯,轉(zhuǎn)ERROR MOV

31、HANDLE , AX ;保存文件號保存文件號 MOV BX , AX MOV CX , 255 MOV DX , OFFSET BUF MOV AH , 3FH INT 21H ;從文件中讀從文件中讀255字節(jié)字節(jié)BUF JC ERROR ;若讀出錯,轉(zhuǎn)若讀出錯,轉(zhuǎn)ERROR MOV BX , AX ;實際讀到的字符數(shù)送入實際讀到的字符數(shù)送入BX MOV BUFBX , $ ;在文件結(jié)束處放置一在文件結(jié)束處放置一“$”符符 MOV DX , OFFSET BUF MOV AH , 9 INT 21H ;顯示文件內(nèi)容顯示文件內(nèi)容 MOV BX , HANDLE MOV AH , 3EH INT

32、 21H ;關閉文件關閉文件 JNC END1 ;若關閉過程無錯,轉(zhuǎn)到若關閉過程無錯,轉(zhuǎn)到END1處返回處返回DOSERROR:MOV DX , OFFSET ERROR_MESSAGE MOV AH , 9 INT 21H ;顯示錯誤提示顯示錯誤提示END1: MOV AH , 4CH INT 21HFILE DB E:MYMASML.TXT , 0 ;文件名文件名BUF DB 256 DUP(0) ;文件內(nèi)容暫存區(qū)文件內(nèi)容暫存區(qū)ERROR_MESSAGE DB 0AH , ERROR ! $ ;出錯時的提示出錯時的提示HANDLE DW ? ;保存文件號保存文件號CODE ENDS END

33、 START4141CODE SEGMENT ASSUME CS:CODE,DS:CODE JMP BEGINBUF1 DB 512 DUP(0)FN DB E:MYMASMHD001.DAT,0 OKTS 0DH,0AH,OK!$ERRTS 0DH,0AH,ERROR!$BEGIN:PUSH CS POP DS MOV AX,0201H LEA BX,BUF1 MOV CX,0001H MOV DX,0080H INT 13H JNC ROK JMP ERRROK:MOV AH,3CH ;新建文件;新建文件 MOV CX,0 ;文件屬性為文件屬性為0,普通文件,普通文件 LEA DX,FN

34、INT 21H JNC FOK JMP ERRFOK1:MOV BX,AX ;文件代號送文件代號送BX MOV FCODE,AX LEA DX,BUF1 MOV CX,200H MOV AH,40H INT 21H JNC FOK2 JMP ERRFOK2:MOV AH,3EH MOV BX,FCODE INT 21H LEA DX,OKTS MOV AH,9 INT 21HEXIT:MOV AH,4CH INT 21HERR: LEA DX,ERRTS MOV AH,9 INT 21H JMP EXITCODE ENDS END BEGIN4242 CODE SEGMENT ASSUME C

35、S: CODE, DS: DATA START:MOVAX, DATA MOVDS, AX LEADX, MESS0; 為輸入文件名輸出提示信息為輸入文件名輸出提示信息 MOVAH, 09H INT21H LEADX, BUFFER; 輸入文件名輸入文件名 MOVAH, 0AH INT21H MOVBL, BUFFER+1 MOVBH, 0 MOVFILENAMEBX, 0; 把回車字符修改為把回車字符修改為00H,形成,形成ASCIZ串串LEA DX, FILENAME;ASCIZ串首地址裝入串首地址裝入DS: DX MOV AH, 3CH;建立文件的功能代號;建立文件的功能代號 MOV C

36、X, 00H;文件屬性(普通文件);文件屬性(普通文件) 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;文件代號裝入;文件代號裝入BX4343 AGAIN: MOV AH, 01H INT 21H MOV DTA, AL ;鍵盤上輸入一個字符,送入;鍵盤上輸入一個字符

37、,送入DTA AGN1: MOV AH, 40H MOV CX, 1 INT 21H ;把這個字符寫入磁盤文件;把這個字符寫入磁盤文件 JC ERR2 ;寫文件錯誤,轉(zhuǎn);寫文件錯誤,轉(zhuǎn)ERR2 CMP DTA, 0DH;剛輸入字符是回車?;剛輸入字符是回車? JNE AGN2 PUSH DX;保護;保護DX的值的值 MOV AH, 2 MOV DL, 0AH INT 21H;回車字符后面輸出換行;回車字符后面輸出換行 POP DX;恢復;恢復DX的值的值 MOV DTA, 0AH;換行字符填入;換行字符填入DTA JMP AGN1;換行字符補寫到磁盤文件;換行字符補寫到磁盤文件AGN2: CM

38、P DTA, 1AH;剛輸入字符是;剛輸入字符是EOF? JNE AGAIN;不是;不是EOF,繼續(xù)鍵盤輸入,繼續(xù)鍵盤輸入 LEA DX, SUCCESS CALL DISP;顯示寫文件成功信息;顯示寫文件成功信息CLOSE:MOV AH, 3EH MOV BX, HANDLE INT 21H;關閉文件;關閉文件 JMP EXIT4444ERR1:LEADX, FAIL1CALLDISP;顯示打開錯誤信息;顯示打開錯誤信息 JMPEXIT ;打開不成功;打開不成功,無需關閉,轉(zhuǎn)無需關閉,轉(zhuǎn)EXIT結(jié)束結(jié)束ERR2:LEADX, FAIL2;顯示寫文件錯信息;顯示寫文件錯信息CALLDISPJM

39、PCLOSE;文件已打開,需要關閉;文件已打開,需要關閉EXIT:MOVAH, 4CH INT21H;返回;返回OSMESS0 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 t

40、o Write $DISP PROC NEAR MOV AH, 09H INT21H RETDISP ENDPCODE ENDS ENDSTART 4545 “文件指針文件指針”變量,記錄著應從文件的什么地方讀出數(shù)據(jù),或者,應變量,記錄著應從文件的什么地方讀出數(shù)據(jù),或者,應向向 文件的什么地方寫入數(shù)據(jù)。文件的什么地方寫入數(shù)據(jù)。 如果需要讀、寫文件中某一個指定位置開始的內(nèi)容,則首先要使文件如果需要讀、寫文件中某一個指定位置開始的內(nèi)容,則首先要使文件 指針指向該位置。指針指向該位置。 操作系統(tǒng)提供了移動文件指針的功能(功能號操作系統(tǒng)提供了移動文件指針的功能(功能號42H)。)。4646BX=BX=

41、文件句柄。文件句柄。CX:DX=CX:DX=雙字長的偏移值。雙字長的偏移值。AL=AL=移動指針的方式:移動指針的方式: ALAL0 0 絕對移動方式,以文件開頭位置加絕對移動方式,以文件開頭位置加CX: DXCX: DX偏移值來移動指針;偏移值來移動指針; ALAL1 1 相對移動方式,以當前指針位置加相對移動方式,以當前指針位置加CX: DXCX: DX偏移值來移動指針;偏移值來移動指針; ALAL2 2 絕對倒移方式,以文件尾的位置加絕對倒移方式,以文件尾的位置加CX: DXCX: DX偏移值來移動指針。偏移值來移動指針。 如果成功(如果成功(CF=0CF=0),),CX:DXCX:DX

42、中為移動后的新指針的值。中為移動后的新指針的值。4747 v以寫方式打開這個文件(以寫方式打開這個文件(AL=1AL=1) v取取CX:DX=00:00CX:DX=00:00,使用,使用ALAL2 2的絕對倒移方式移動指針,使文件的絕對倒移方式移動指針,使文件指針指向文件尾部;指針指向文件尾部; v把追加內(nèi)容存入磁盤緩沖區(qū),由把追加內(nèi)容存入磁盤緩沖區(qū),由DS:DXDS:DX指向;指向; v使用使用AH=40HAH=40H的系統(tǒng)功能調(diào)用,把磁盤緩沖區(qū)內(nèi)容寫入文件;的系統(tǒng)功能調(diào)用,把磁盤緩沖區(qū)內(nèi)容寫入文件; v重復步驟重復步驟 3 3),),4 4),直到所有內(nèi)容寫入文件;),直到所有內(nèi)容寫入文件

43、; 1)1) 關閉這個文件。關閉這個文件。4848CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOVAX, DATAMOVDS, AXMOVDONE, 0; 置置“未完成未完成”標志標志 LEADX,F(xiàn)ILENAME1 ; 為為“寫寫”打開文件打開文件1MOV AL,01HMOV AH,3DHINT 21HJC ERR11 ; 打開不成功,轉(zhuǎn)打開不成功,轉(zhuǎn)ERR11MOVHANDLE1, AX ;保存文件代號;保存文件代號4949LEADX, FILENAME2; 為為“讀讀”打開文件打開文件2 MOV AL, 0 MOV AH, 3DH INT21HJC

44、ERR12; 打開不成功,轉(zhuǎn)打開不成功,轉(zhuǎn)ERR12MOV HANDLE2, AX;保存文件代號;保存文件代號 MOV AH, 42H ; 把文件把文件1指針移動到文件尾部指針移動到文件尾部MOV AL, 02MOV DX, 0MOV CX, 0MOV BX, HANDLE1INT21HJCERR2 ; 移動指針不成功,轉(zhuǎn)移動指針不成功,轉(zhuǎn)ERR2AGAIN:MOVAH, 3FH; 讀文件讀文件2LEADX, DTAMOVBX, HANDLE2MOVCX, 256INT21HJCERR3; 讀文件失敗,轉(zhuǎn)讀文件失敗,轉(zhuǎn)ERR3PUSHAXCMPAX, 0JNEAGA1MOVDONE, 1JMP

45、FINISH; 文件結(jié)束,轉(zhuǎn)文件結(jié)束,轉(zhuǎn)FINISHAGA1:CMP AX, 256JECONTMOVDONE, 1 ; 文件結(jié)束,置完成標志文件結(jié)束,置完成標志5050AGAIN:MOVAH, 3FH; 讀文件讀文件2LEADX, DTAMOVBX, HANDLE2MOVCX, 256INT21HJCERR3; 讀文件失敗,轉(zhuǎn)讀文件失敗,轉(zhuǎn)ERR3PUSHAXCMPAX, 0JNEAGA1MOVDONE, 1JMPFINISH; 文件結(jié)束,轉(zhuǎn)文件結(jié)束,轉(zhuǎn)FINISHAGA1:CMP AX, 256JECONTMOVDONE, 1; 文件結(jié)束,置完成標志文件結(jié)束,置完成標志CONT: MOV

46、AH, 40H; 寫文件寫文件1LEADX, DTAMOVBX, HANDLE1POPCXINT21HJCERR4; 寫文件失敗,轉(zhuǎn)寫文件失敗,轉(zhuǎn)ERR4CMPDONE, 0JEAGAINFINISH:MOV AH, 3EH; 關閉文件關閉文件2MOVBX, HANDLE2INT21HFINISH1:MOV AH, 3EHMOVBX, HANDLE1; 關閉文件關閉文件1INT21HJMPEXIT5151ERR11:LEA DX, FAIL1; 打開文件打開文件1失敗,顯示信息失敗,顯示信息MOVAH, 09H; 然后返回操作系統(tǒng)然后返回操作系統(tǒng)INT21HJMPEXITERR12:LEA D

47、X, FAIL1; 打開文件打開文件2失敗,顯示信息失敗,顯示信息MOVAH, 09H; 轉(zhuǎn)向轉(zhuǎn)向FINISH1,關閉文件,關閉文件1INT21HJMPFINISH1ERR2:LEADX, FAIL2 ; 移動指針失敗,顯示信息移動指針失敗,顯示信息JMPDISPERR3:LEADX, FAIL3 ; 讀文件失敗,顯示信息讀文件失敗,顯示信息JMPDISPERR4:LEADX, FAIL4; 寫文件失敗,顯示信息寫文件失敗,顯示信息 DISP:MOVAH, 09H; 顯示出錯信息顯示出錯信息INT21HJMPFINISH; 轉(zhuǎn)轉(zhuǎn)FINISH,關閉文件,關閉文件EXIT:MOV AX, 4C00

48、HINT 21H5252FILENAME1 DB E:MYMASM1.TXT, 0 FILENAME2DBE:MYMASM2.TXT, 0 DTADB256DUP (?) ; 磁盤緩沖區(qū)磁盤緩沖區(qū) HANDLE1 DW? HANDLE2DW? DONEDB0 ; 文件文件2讀操作完成標志讀操作完成標志 FAIL1 DB0DH, 0AH, Open File Error. $ FAIL2 DB 0DH,0AH,Move File Pointer Error. $ FAIL3DB0DH, 0AH, Read File Error. $ FAIL4 DB 0DH, 0AH, Write File Error. $ CODE ENDSENDSTART5353 “”、“”: : 對文件的讀寫都是從文件頭部開始順序進行。對文件的讀寫都是從文件頭部開始順序進行。 : 許多磁盤文件內(nèi)部由若干許多磁盤文件內(nèi)部由若干“組組”信息組合而

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論