版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 12 23 3字符串字符串: 計(jì)算機(jī)中常常用到字符串,如變量名、文件名等都是計(jì)算機(jī)中常常用到字符串,如變量名、文件名等都是字符串,每個(gè)字符的編碼占用一個(gè)字節(jié),連續(xù)地存存貯在字符串,每個(gè)字符的編碼占用一個(gè)字節(jié),連續(xù)地存存貯在內(nèi)存儲(chǔ)器中。內(nèi)存儲(chǔ)器中。 文件文件: 文件是存放在外存儲(chǔ)器上的程序或數(shù)據(jù)。文件是存放在外存儲(chǔ)器上的程序或數(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í)行一次串操作,自動(dòng)修改、每執(zhí)行一次串操作,自動(dòng)修改SISI和(或)和(或)DIDI,使其指向,使其指向 下一個(gè)下一個(gè) 3 3、方向標(biāo)志、方向標(biāo)志DFDF控制對(duì):控制對(duì): SISI、DIDI遞增遞增存儲(chǔ)單元地址由小到大存儲(chǔ)單元地址由小到大 SISI、DIDI遞減遞減存儲(chǔ)單元地址有大到小存儲(chǔ)單元地址有大到小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í)行的操作:重復(fù)執(zhí)行串操作指令,執(zhí)行的操作:重復(fù)執(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以下用三種方法實(shí)現(xiàn):1010(1) MOV CX, ;字符串長度送入;字符串長度送入CXAGAIN: MOV AL, SI ;從源數(shù)據(jù)區(qū)取出一個(gè)字節(jié);從源數(shù)據(jù)區(qū)取出一個(gè)字節(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;重復(fù)上面的操作;重復(fù)上面的操作100次次 1111(2)MOV CX, ;字符串長度送入;字符串長度送入CXAGAIN: ;從源數(shù)據(jù)傳送一個(gè)字節(jié)到目的數(shù)據(jù)區(qū);從源數(shù)據(jù)傳送一個(gè)字節(jié)到目的數(shù)據(jù)區(qū)LOOP AGAIN ;重復(fù)上面的操作;重復(fù)上面的操作100次次(3);方向標(biāo)志;方向標(biāo)志DF清清0MOV CX,;字符串長度送人;字符串長度送人CX;執(zhí)行;執(zhí)行100次次MOVSB指令指令1212 格式:格式: STOSSTOS / STOS/ STOS /STOS/STOS 執(zhí)行的操作:執(zhí)行的操作: (1 1)目的存儲(chǔ)單元)目的存儲(chǔ)單元累加器累加器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)累加器)累加器源存儲(chǔ)單元源存儲(chǔ)單元 字節(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)標(biāo)志不保存減法得到的差,但產(chǎn)生新的狀態(tài)標(biāo)志 (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,重復(fù)執(zhí)行串指令,重復(fù)執(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 :用重復(fù)比較指令用重復(fù)比較指令 REPZ CMPSB 實(shí)現(xiàn)實(shí)現(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對(duì)標(biāo)志位對(duì)
12、標(biāo)志位ZFZF的判別條件剛好相反的判別條件剛好相反 格式:格式: REPNZ / REPNE REPNZ / REPNE 串指令串指令 執(zhí)行的操作:如果執(zhí)行的操作:如果ZF=0ZF=0且(且(CXCX)00,重復(fù)串操作,重復(fù)串操作 如如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;功能:求一個(gè)字符串的長度;功能:求一個(gè)字符串的長度;入口:;入口:;說明:假設(shè)字符串長度不超過;說明:假設(shè)字符串長度不超過6000060000字符字符2323求一個(gè)字符串的長度求一個(gè)字符串的長度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為首地址的字符串中,查找有幾個(gè)子字符串為首地址的字符串中,查找有幾個(gè)子字符串china,并將包,并將包 含的子字符串的個(gè)數(shù)存入含的子字符串的個(gè)數(shù)存入F單元。單元。CODE SEGMENT ASSUME DS:CODE,ES:CODE,CS:
16、CODESTART:MOVAX,CODE MOVDS,AX MOVES,AX XOR DX,DX;DX存放包含的個(gè)數(shù)存放包含的個(gè)數(shù) CLDLEASI,STR1mov point,siADD POINT,COUNTMOV BX,SI;BX記錄查找的起始位置記錄查找的起始位置LP: LEA DI,STR2MOVCX,COUNT2 REPE CMPSB;相同時(shí)繼續(xù)比較直到相同時(shí)繼續(xù)比較直到CX=0JENT;找到子字符串時(shí)轉(zhuǎn)移找到子字符串時(shí)轉(zhuǎn)移INCBXJMPETNT: INC DX ;找到子字符串則計(jì)數(shù)加找到子字符串則計(jì)數(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;計(jì)算源串的字計(jì)算源串的字 符串長度(符串長度(38)STR2DB chinaCOUNT2 EQU $-STR2;計(jì)算目的串子計(jì)算目的串子 字符串長度(字符串長度(5)COUNT EQU COUNT1-COUNT2+1; 需要在源串中查找的次數(shù)需要在源串中查找的次數(shù)F DW 0point dw 02525 2626 文件路徑名指出該
18、文件在輔助存儲(chǔ)器上的位置,包括文件路徑名指出該文件在輔助存儲(chǔ)器上的位置,包括磁盤驅(qū)動(dòng)器號(hào)、目錄路徑和文件名磁盤驅(qū)動(dòng)器號(hào)、目錄路徑和文件名 路徑名和一個(gè)全路徑名和一個(gè)全0 0字節(jié)構(gòu)成的字符串稱為字節(jié)構(gòu)成的字符串稱為“ASCIZ”ASCIZ”串串 文件代號(hào))文件代號(hào)) 操作系統(tǒng)為每個(gè)處于操作系統(tǒng)為每個(gè)處于“活動(dòng)活動(dòng)”狀態(tài)的文件分配一個(gè)用狀態(tài)的文件分配一個(gè)用1616位二進(jìn)制表示的位二進(jìn)制表示的“”(HandleHandle) 2727 在磁盤文件目錄表中每個(gè)文件都有一個(gè)記錄,其中用一個(gè)字節(jié)表述在磁盤文件目錄表中每個(gè)文件都有一個(gè)記錄,其中用一個(gè)字節(jié)表述該文件的屬性:該文件的屬性: D7 D6 D5 D
19、4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 文件屬性是一個(gè)文件屬性是一個(gè)數(shù)據(jù),但數(shù)據(jù),但,其它位未定義。,其它位未定義。 D0=1D0=1,表示只讀文件,打開只讀文件只能用于讀記錄,不能改寫記錄。,表示只讀文件,打開只讀文件只能用于讀記錄,不能改寫記錄。D1=1D1=1,表示隱藏文件,使用,表示隱藏文件,使用DOSDOS的的DIRDIR命令不能顯示隱藏文件。命令不能顯示隱藏文件。D2=1D2=1,表示系統(tǒng)文件。,表示系統(tǒng)文件。D3=1D3=1,表示文件作為磁盤的卷標(biāo)號(hào),不是通常意義上的文件。,表示文件作為磁盤的卷標(biāo)號(hào),不是通常意義上的文件。D4=1D4=1,表示
20、文件作為子目錄,不是通常意義上的文件。,表示文件作為子目錄,不是通常意義上的文件。D5=1D5=1,表示是已經(jīng)歸檔的文件(若寫入并關(guān)閉了文件,則歸檔位置,表示是已經(jīng)歸檔的文件(若寫入并關(guān)閉了文件,則歸檔位置1 1)。)。2828INT 21H只要給出只要給出就能讀寫文件。就能讀寫文件。 對(duì)磁盤文件進(jìn)行操作,有可能成功或失敗,對(duì)磁盤文件進(jìn)行操作,有可能成功或失敗,:標(biāo)志位:標(biāo)志位。:標(biāo)志位:標(biāo)志位,且,且AX中包含了錯(cuò)誤代碼,用來指明對(duì)磁盤文件操中包含了錯(cuò)誤代碼,用來指明對(duì)磁盤文件操作作 失敗的原因失敗的原因 在文件處理過程中,從磁盤讀出的數(shù)據(jù)或要寫入磁盤數(shù)據(jù),都要存在文件處理過程中,從磁盤讀出
21、的數(shù)據(jù)或要寫入磁盤數(shù)據(jù),都要存放在放在 一個(gè)指定的內(nèi)存區(qū)域,這個(gè)區(qū)域稱為一個(gè)指定的內(nèi)存區(qū)域,這個(gè)區(qū)域稱為:“” 或或“”。 2929 功能號(hào)功能號(hào)(AH)功功 能能 調(diào)用參數(shù)調(diào)用參數(shù) 返回參數(shù)返回參數(shù)建立文件建立文件DS=ASCIZ串段基址串段基址DX=ASCIZ串偏移地址串偏移地址CX=文件屬性文件屬性CF=0操作成功:操作成功: AX=文件代號(hào)文件代號(hào)CF=l操作出錯(cuò):操作出錯(cuò): AX錯(cuò)誤代碼錯(cuò)誤代碼打開文件打開文件DS=ASCIZ串段基址串段基址DX=ASCIZ串的偏移地址串的偏移地址AL=存取代碼存取代碼 CF=0操作成功:操作成功: AX=文件代號(hào)文件代號(hào)CF=l操作出錯(cuò):操作出錯(cuò):
22、 AX錯(cuò)誤代碼錯(cuò)誤代碼關(guān)閉文件關(guān)閉文件BX=CF=0操作成功操作成功 CF=l操作出錯(cuò):操作出錯(cuò): AX錯(cuò)誤代碼錯(cuò)誤代碼3030讀 文 件 或讀 文 件 或設(shè)備設(shè)備DS=數(shù)據(jù)緩沖區(qū)段基址數(shù)據(jù)緩沖區(qū)段基址DX=數(shù)據(jù)緩沖區(qū)偏移地?cái)?shù)據(jù)緩沖區(qū)偏移地址址BX=CX=CF=0讀成功:讀成功: AX=實(shí)際讀實(shí)際讀入的字節(jié)數(shù)入的字節(jié)數(shù)AX=0表示文件表示文件結(jié)束結(jié)束CF=1讀出錯(cuò):讀出錯(cuò): AX=錯(cuò)誤代錯(cuò)誤代碼碼寫 文 件 或?qū)?文 件 或設(shè)備設(shè)備DS=數(shù)據(jù)緩沖區(qū)段基址數(shù)據(jù)緩沖區(qū)段基址DX=數(shù)據(jù)緩沖區(qū)偏移地?cái)?shù)據(jù)緩沖區(qū)偏移地址址BX=CX=CF=0寫成功:寫成功: AX=實(shí)際寫入的字節(jié)數(shù)實(shí)際寫入的字節(jié)數(shù)CF=1
23、寫出錯(cuò):寫出錯(cuò): AX=錯(cuò)誤代碼錯(cuò)誤代碼功能號(hào)功能號(hào)(AH)功功 能能 調(diào)用參數(shù)調(diào)用參數(shù) 返回參數(shù)返回參數(shù)3131移 動(dòng) 文 件移 動(dòng) 文 件指針指針CX=所需字節(jié)的偏移所需字節(jié)的偏移地址地址(高位高位)DX=所需字節(jié)的偏移所需字節(jié)的偏移地址地址(低位低位)AL=移動(dòng)方式碼移動(dòng)方式碼BX=CF=0操作成功:操作成功:DX: AX=新指針位置新指針位置CF=1操作失?。翰僮魇。篈X=錯(cuò)錯(cuò)誤代碼誤代碼讀 寫 文 件讀 寫 文 件屬性屬性AL=0讀文件屬性讀文件屬性A L = 1 置 文 件 屬 性置 文 件 屬 性 CX=新屬性新屬性DS=ASCIZ串段基址串段基址DX=ASCIZ串偏移地串偏移
24、地址址CF=0操作成功:操作成功: AL=0,CX=屬性屬性CF=1操作失?。翰僮魇。?AX=錯(cuò)誤代碼錯(cuò)誤代碼功能號(hào)功能號(hào)(AH)功功 能能 調(diào)用參數(shù)調(diào)用參數(shù) 返回參數(shù)返回參數(shù)3232 對(duì)于一個(gè)磁盤上不存在的文件,使用之前首先要對(duì)于一個(gè)磁盤上不存在的文件,使用之前首先要“”這個(gè)文件這個(gè)文件 。 注意:建立文件時(shí),應(yīng)確保在同一個(gè)目錄中該文件不存在,否則將注意:建立文件時(shí),應(yīng)確保在同一個(gè)目錄中該文件不存在,否則將,造成信息的丟失,除非你用這種方法同時(shí),造成信息的丟失,除非你用這種方法同時(shí)“刪除刪除”一個(gè)不再需要的老文件。一個(gè)不再需要的老文件。 3333 對(duì)一個(gè)已經(jīng)存在的磁盤文件進(jìn)行讀、寫操作前,
25、首先要對(duì)一個(gè)已經(jīng)存在的磁盤文件進(jìn)行讀、寫操作前,首先要“打開打開”這這個(gè)個(gè) 文件文件 。 :存取代碼告訴操作系統(tǒng)打開文件要進(jìn)行什么樣操作。:存取代碼告訴操作系統(tǒng)打開文件要進(jìn)行什么樣操作。 使用功能號(hào)為使用功能號(hào)為3DH的的DOS功能調(diào)用打開一個(gè)文件時(shí),除了將功能調(diào)用打開一個(gè)文件時(shí),除了將ASCIZ 串首地址裝入串首地址裝入DS: DX之外,還要將一個(gè)之外,還要將一個(gè)“”置入置入AL寄寄 存器存器 。3434只讀文件只能用代碼只讀文件只能用代碼0來打開,如果使用存取代碼來打開,如果使用存取代碼1或或2時(shí)將報(bào)告錯(cuò)誤。時(shí)將報(bào)告錯(cuò)誤。打開一個(gè)不存在的文件同樣也會(huì)報(bào)告錯(cuò)誤。打開一個(gè)不存在的文件同樣也會(huì)報(bào)
26、告錯(cuò)誤。:為讀而打開文件為讀而打開文件:為寫而打開文件:為寫而打開文件:為讀和寫打開文件:為讀和寫打開文件3535 一個(gè)文件讀寫完畢之后,需要將它關(guān)閉,此時(shí):一個(gè)文件讀寫完畢之后,需要將它關(guān)閉,此時(shí): 關(guān)閉文件的操作通過關(guān)閉文件的操作通過3EH的的DOS功能調(diào)用實(shí)現(xiàn)功能調(diào)用實(shí)現(xiàn)36363737 文件:文件:AH=H, DS:DXDS:DX指向文件名指向文件名ASCIZASCIZ串串, ,保存返保存返回的文件句柄?;氐奈募浔N募何募?DS:DX指向讀寫緩沖區(qū)指向讀寫緩沖區(qū) CX=寫入的字節(jié)數(shù)寫入的字節(jié)數(shù) AH=40HINT 21H文件:使用文件:使用3EH的的DOS功能調(diào)用關(guān)閉這個(gè)文件。
27、功能調(diào)用關(guān)閉這個(gè)文件。 3838 文件:文件: DS:DX指向指向文件名文件名ASCIZ串;串; AH=3DH AL=讀寫方式,打開這個(gè)文件,保存返回的文件句柄讀寫方式,打開這個(gè)文件,保存返回的文件句柄 文件:文件: 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)用關(guān)閉這個(gè)文件功能調(diào)用關(guān)閉這個(gè)文件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)建出錯(cuò),轉(zhuǎn)創(chuàng)建出錯(cuò),轉(zhuǎn)ERROR處處 MOV HANDLE , AX ;保存文件號(hào)保存文件號(hào) MOV BX , AX MOV CX , 16 MOV DX , OFFSET BUF MOV AH , 40H INT 21H ;向文件中寫入向文件中寫入16個(gè)字節(jié)內(nèi)容個(gè)字節(jié)內(nèi)容 JC ERROR ;寫出錯(cuò),轉(zhuǎn)寫出錯(cuò),轉(zhuǎn)ERROR處處 MOV BX , HANDLE MOV AH , 3EH INT 2
29、1H ;關(guān)閉文件關(guān)閉文件 JC ERROR ;關(guān)閉文件出錯(cuò),轉(zhuǎn)關(guān)閉文件出錯(cuò),轉(zhuǎn)ERROR處處 MOV DX , OFFSET MESSAGE MOV AH , 9 INT 21H ;操作成功后顯示提示操作成功后顯示提示 JMP END1ERROR: MOV DX , OFFSET ERROR_MESSAGE MOV AH , 9 INT 21H ;顯示錯(cuò)誤提示顯示錯(cuò)誤提示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 ! , $ ;出錯(cuò)時(shí)的提示出錯(cuò)時(shí)的提示MESSAGE DB 0AH , OK !$ ;操作成功后的提示操作成功后的提示HANDLE DW ? ;保存文件號(hào)保存文件號(hào)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 ;若打開出錯(cuò),轉(zhuǎn)若打開出錯(cuò),轉(zhuǎn)ERROR MOV
31、HANDLE , AX ;保存文件號(hào)保存文件號(hào) MOV BX , AX MOV CX , 255 MOV DX , OFFSET BUF MOV AH , 3FH INT 21H ;從文件中讀從文件中讀255字節(jié)字節(jié)BUF JC ERROR ;若讀出錯(cuò),轉(zhuǎn)若讀出錯(cuò),轉(zhuǎn)ERROR MOV BX , AX ;實(shí)際讀到的字符數(shù)送入實(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 ;關(guān)閉文件關(guān)閉文件 JNC END1 ;若關(guān)閉過程無錯(cuò),轉(zhuǎn)到若關(guān)閉過程無錯(cuò),轉(zhuǎn)到END1處返回處返回DOSERROR:MOV DX , OFFSET ERROR_MESSAGE MOV AH , 9 INT 21H ;顯示錯(cuò)誤提示顯示錯(cuò)誤提示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 ! $ ;出錯(cuò)時(shí)的提示出錯(cuò)時(shí)的提示HANDLE DW ? ;保存文件號(hào)保存文件號(hào)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 ;文件代號(hào)送文件代號(hào)送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;建立文件的功能代號(hào);建立文件的功能代號(hào) MOV C
36、X, 00H;文件屬性(普通文件);文件屬性(普通文件) INT 21H;建立文件;建立文件 JC ERR1;建立出錯(cuò),轉(zhuǎn);建立出錯(cuò),轉(zhuǎn)ERR1 MOV HANDLE, AX;保存文件代號(hào);保存文件代號(hào) LEA DX, PROMPT MOV AH, 09H INT 21H ;顯示提示信息,要求用戶鍵盤輸入;顯示提示信息,要求用戶鍵盤輸入 LEA DX, DTA ;DTA首地址裝入首地址裝入DS: DX MOV BX, HANDLE;文件代號(hào)裝入;文件代號(hào)裝入BX4343 AGAIN: MOV AH, 01H INT 21H MOV DTA, AL ;鍵盤上輸入一個(gè)字符,送入;鍵盤上輸入一個(gè)字符
37、,送入DTA AGN1: MOV AH, 40H MOV CX, 1 INT 21H ;把這個(gè)字符寫入磁盤文件;把這個(gè)字符寫入磁盤文件 JC ERR2 ;寫文件錯(cuò)誤,轉(zhuǎn);寫文件錯(cuò)誤,轉(zhuǎn)ERR2 CMP DTA, 0DH;剛輸入字符是回車?;剛輸入字符是回車? JNE AGN2 PUSH DX;保護(hù);保護(hù)DX的值的值 MOV AH, 2 MOV DL, 0AH INT 21H;回車字符后面輸出換行;回車字符后面輸出換行 POP DX;恢復(fù);恢復(fù)DX的值的值 MOV DTA, 0AH;換行字符填入;換行字符填入DTA JMP AGN1;換行字符補(bǔ)寫到磁盤文件;換行字符補(bǔ)寫到磁盤文件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;關(guān)閉文件;關(guān)閉文件 JMP EXIT4444ERR1:LEADX, FAIL1CALLDISP;顯示打開錯(cuò)誤信息;顯示打開錯(cuò)誤信息 JMPEXIT ;打開不成功;打開不成功,無需關(guān)閉,轉(zhuǎn)無需關(guān)閉,轉(zhuǎn)EXIT結(jié)束結(jié)束ERR2:LEADX, FAIL2;顯示寫文件錯(cuò)信息;顯示寫文件錯(cuò)信息CALLDISPJM
39、PCLOSE;文件已打開,需要關(guān)閉;文件已打開,需要關(guān)閉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 “文件指針文件指針”變量,記錄著應(yīng)從文件的什么地方讀出數(shù)據(jù),或者,應(yīng)變量,記錄著應(yīng)從文件的什么地方讀出數(shù)據(jù),或者,應(yīng)向向 文件的什么地方寫入數(shù)據(jù)。文件的什么地方寫入數(shù)據(jù)。 如果需要讀、寫文件中某一個(gè)指定位置開始的內(nèi)容,則首先要使文件如果需要讀、寫文件中某一個(gè)指定位置開始的內(nèi)容,則首先要使文件 指針指向該位置。指針指向該位置。 操作系統(tǒng)提供了移動(dòng)文件指針的功能(功能號(hào)操作系統(tǒng)提供了移動(dòng)文件指針的功能(功能號(hào)42H)。)。4646BX=BX=
41、文件句柄。文件句柄。CX:DX=CX:DX=雙字長的偏移值。雙字長的偏移值。AL=AL=移動(dòng)指針的方式:移動(dòng)指針的方式: ALAL0 0 絕對(duì)移動(dòng)方式,以文件開頭位置加絕對(duì)移動(dòng)方式,以文件開頭位置加CX: DXCX: DX偏移值來移動(dòng)指針;偏移值來移動(dòng)指針; ALAL1 1 相對(duì)移動(dòng)方式,以當(dāng)前指針位置加相對(duì)移動(dòng)方式,以當(dāng)前指針位置加CX: DXCX: DX偏移值來移動(dòng)指針;偏移值來移動(dòng)指針; ALAL2 2 絕對(duì)倒移方式,以文件尾的位置加絕對(duì)倒移方式,以文件尾的位置加CX: DXCX: DX偏移值來移動(dòng)指針。偏移值來移動(dòng)指針。 如果成功(如果成功(CF=0CF=0),),CX:DXCX:DX
42、中為移動(dòng)后的新指針的值。中為移動(dòng)后的新指針的值。4747 v以寫方式打開這個(gè)文件(以寫方式打開這個(gè)文件(AL=1AL=1) v取取CX:DX=00:00CX:DX=00:00,使用,使用ALAL2 2的絕對(duì)倒移方式移動(dòng)指針,使文件的絕對(duì)倒移方式移動(dòng)指針,使文件指針指向文件尾部;指針指向文件尾部; 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重復(fù)步驟重復(fù)步驟 3 3),),4 4),直到所有內(nèi)容寫入文件;),直到所有內(nèi)容寫入文件
43、; 1)1) 關(guān)閉這個(gè)文件。關(guān)閉這個(gè)文件。4848CODE 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)ERR11MOVHANDLE1, AX ;保存文件代號(hào);保存文件代號(hào)4949LEADX, FILENAME2; 為為“讀讀”打開文件打開文件2 MOV AL, 0 MOV AH, 3DH INT21HJC
44、ERR12; 打開不成功,轉(zhuǎn)打開不成功,轉(zhuǎn)ERR12MOV HANDLE2, AX;保存文件代號(hào);保存文件代號(hào) MOV AH, 42H ; 把文件把文件1指針移動(dòng)到文件尾部指針移動(dòng)到文件尾部MOV AL, 02MOV DX, 0MOV CX, 0MOV BX, HANDLE1INT21HJCERR2 ; 移動(dòng)指針不成功,轉(zhuǎn)移動(dòng)指針不成功,轉(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é)束,置完成標(biāo)志文件結(jié)束,置完成標(biāo)志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é)束,置完成標(biāo)志文件結(jié)束,置完成標(biāo)志CONT: MOV
46、AH, 40H; 寫文件寫文件1LEADX, DTAMOVBX, HANDLE1POPCXINT21HJCERR4; 寫文件失敗,轉(zhuǎn)寫文件失敗,轉(zhuǎn)ERR4CMPDONE, 0JEAGAINFINISH:MOV AH, 3EH; 關(guān)閉文件關(guān)閉文件2MOVBX, HANDLE2INT21HFINISH1:MOV AH, 3EHMOVBX, HANDLE1; 關(guān)閉文件關(guān)閉文件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,關(guān)閉文件,關(guān)閉文件1INT21HJMPFINISH1ERR2:LEADX, FAIL2 ; 移動(dòng)指針失敗,顯示信息移動(dòng)指針失敗,顯示信息JMPDISPERR3:LEADX, FAIL3 ; 讀文件失敗,顯示信息讀文件失敗,顯示信息JMPDISPERR4:LEADX, FAIL4; 寫文件失敗,顯示信息寫文件失敗,顯示信息 DISP:MOVAH, 09H; 顯示出錯(cuò)信息顯示出錯(cuò)信息INT21HJMPFINISH; 轉(zhuǎn)轉(zhuǎn)FINISH,關(guān)閉文件,關(guān)閉文件EXIT:MOV AX, 4C00
48、HINT 21H5252FILENAME1 DB E:MYMASM1.TXT, 0 FILENAME2DBE:MYMASM2.TXT, 0 DTADB256DUP (?) ; 磁盤緩沖區(qū)磁盤緩沖區(qū) HANDLE1 DW? HANDLE2DW? DONEDB0 ; 文件文件2讀操作完成標(biāo)志讀操作完成標(biāo)志 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 “”、“”: : 對(duì)文件的讀寫都是從文件頭部開始順序進(jìn)行。對(duì)文件的讀寫都是從文件頭部開始順序進(jìn)行。 : 許多磁盤文件內(nèi)部由若干許多磁盤文件內(nèi)部由若干“組組”信息組合而
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024無人機(jī)研發(fā)與飛行服務(wù)合同
- 2025年度高檔別墅窗戶定制安裝與維護(hù)保養(yǎng)合同3篇
- 二零二五版程海流域生態(tài)保護(hù)與可持續(xù)發(fā)展合同2篇
- 中原地產(chǎn)房屋買賣居間協(xié)議(2024年度版)版
- 個(gè)人在線醫(yī)療咨詢服務(wù)平臺(tái)合作協(xié)議(2024版)2篇
- 未來教育趨勢(shì)與終身學(xué)習(xí)規(guī)劃的構(gòu)建
- 個(gè)人抵押借款合同書樣例版
- 2025年度金融機(jī)構(gòu)與個(gè)人消費(fèi)貸款合同范本4篇
- 2025版壓路機(jī)設(shè)備租賃及維護(hù)管理合同范本3篇
- 現(xiàn)代餐飲業(yè)營銷策略及服務(wù)流程優(yōu)化
- 泌尿:膀胱腫瘤病人的護(hù)理查房王雪-課件
- 標(biāo)點(diǎn)符號(hào)的研究報(bào)告
- 服務(wù)器報(bào)價(jià)表
- 2025年高考化學(xué)試題分析及復(fù)習(xí)策略講座
- 2024-2029年中國制漿系統(tǒng)行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展研究報(bào)告
- 大門封條模板
- 【“凡爾賽”網(wǎng)絡(luò)流行語的形成及傳播研究11000字(論文)】
- ppr管件注塑工藝
- 液化氣站其他危險(xiǎn)和有害因素辨識(shí)及分析
- 高中語文教學(xué)課例《勸學(xué)》課程思政核心素養(yǎng)教學(xué)設(shè)計(jì)及總結(jié)反思
- 中國農(nóng)業(yè)銀行小微企業(yè)信貸業(yè)務(wù)貸后管理辦法規(guī)定
評(píng)論
0/150
提交評(píng)論