版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章磁盤(pán)文件存取方法
9.1以文件句柄方式存取文件9.2文件操作舉例9.1以文件句柄方式存取文件9.1.1路徑和ASCIIZ串9.1.2文件句柄、錯(cuò)誤代碼和文件屬性9.1.3DOS文件功能調(diào)用9.1.4文件的打開(kāi)方式9.1.5讀寫(xiě)指針的移動(dòng)
9.1.1路徑和ASCIIZ串
當(dāng)用DOS功能調(diào)用創(chuàng)建或打開(kāi)文件時(shí),首先必須在程序的數(shù)據(jù)段中定義一個(gè)反映文件名信息的ASCIIZ串,ASCIIZ串由文件路徑名的ASCII碼和一個(gè)全0字節(jié)組成,文件路徑名說(shuō)明文件的位置,包括磁盤(pán)驅(qū)動(dòng)器、目錄路徑和文件名。
9.1.2文件句柄、錯(cuò)誤代碼和文件屬性
1.文件句柄也叫文件代號(hào)。用DOS功能調(diào)用創(chuàng)建或打開(kāi)文件時(shí),如果CF=0,說(shuō)明操作成功,通過(guò)AX返回一個(gè)文件句柄,這時(shí)文件和句柄就建立了對(duì)應(yīng)關(guān)系,以后對(duì)文件的讀寫(xiě)等操作,只要給出文件句柄即可。返回的文件句柄一般從05開(kāi)始順序排列,因?yàn)榍?個(gè)句柄已被標(biāo)準(zhǔn)設(shè)備占用。
2.錯(cuò)誤代碼文件句柄存取方式對(duì)各種錯(cuò)誤采取了統(tǒng)一的處理方法。在文件操作時(shí),無(wú)論調(diào)用哪一功能調(diào)用,如返回CF=1,表示操作失敗或出錯(cuò),則AX中返回的是錯(cuò)誤代碼,這些錯(cuò)誤代碼都來(lái)自一個(gè)統(tǒng)一的錯(cuò)誤代碼表。3.文件屬性
文件屬性字節(jié)用來(lái)說(shuō)明DOS文件屬性,其各位含義如圖9-1所示。
76543210
只讀文件
隱藏文件
系統(tǒng)文件
卷標(biāo)
子目錄
歸檔位圖9-1文件屬性字節(jié)主要屬性字節(jié)代碼如下:
00H——普通文件
01H——只讀文件
02H——隱藏文件04H——系統(tǒng)文件
08H——磁盤(pán)的卷標(biāo)號(hào)10H——子目錄
20H——未歸檔的文件
9.1.3DOS文件功能調(diào)用
DOS的INT21H為文件操作提供了相應(yīng)的功能支持,基于文件句柄的DOS功能調(diào)用如下:
AH=3CH:創(chuàng)建一個(gè)新文件輸入?yún)?shù):DS:DX=ASCIIZ串的首地址
CX=文件屬性返回結(jié)果:CF=0,創(chuàng)建成功,AX=文件句柄
CF=1,創(chuàng)建失敗,AX=錯(cuò)誤代碼AH=3DH:打開(kāi)一個(gè)已有文件
輸入?yún)?shù):DS:DX=ASCIIZ串的首地址
AL=訪問(wèn)方式(0—讀打開(kāi),1—寫(xiě)打開(kāi),2—讀寫(xiě)打開(kāi))
返回結(jié)果:CF=0,打開(kāi)成功,AX=文件句柄
CF=1,打開(kāi)失敗,AX=錯(cuò)誤代碼AH=3EH:關(guān)閉文件輸入?yún)?shù):BX=文件句柄返回結(jié)果:CF=0,操作成功
CF=1,操作失敗,AX=錯(cuò)誤代碼
AH=3FH:讀文件輸入?yún)?shù):DS:DX=讀緩沖區(qū)的首地址
BX=文件句柄
CX=希望讀入的字節(jié)數(shù)返回結(jié)果:CF=0,操作成功,AX=實(shí)際讀入的字節(jié)數(shù)
CF=1,操作失敗,AX=錯(cuò)誤代碼AH=40H:寫(xiě)文件輸入?yún)?shù):DS:DX=寫(xiě)緩沖區(qū)的首地址
BX=文件句柄
CX=要寫(xiě)入的字節(jié)數(shù)返回結(jié)果:CF=0,操作成功,AX=實(shí)際寫(xiě)入的字節(jié)數(shù)
CF=1,操作失敗,AX=錯(cuò)誤代碼
AH=41H:刪除文件輸入?yún)?shù):DS:DX=ASCIIZ串的首地址返回結(jié)果:CF=0,操作成功
CF=1,操作失敗,AX=錯(cuò)誤代碼AH=42H:移動(dòng)文件讀寫(xiě)指針輸入?yún)?shù):BX=文件句柄
AL=移動(dòng)方式代碼
CX=移動(dòng)字節(jié)數(shù)的高位字
DX=移動(dòng)字節(jié)數(shù)的低位字返回結(jié)果:CF=0,操作成功,DX:AX=新指針位置
CF=1,操作失敗,AX=錯(cuò)誤代碼AH=43H:檢驗(yàn)(讀?。┗蚋淖兾募傩暂斎?yún)?shù):DS:DX=ASCIIZ串的首地址
AL=0,為讀取文件屬性
AL=1,為設(shè)置文件屬性,CX=新文件屬性返回結(jié)果:CF=0,操作成功,輸入AL=0則CX=屬性輸入AL=1則CX=新屬性
CF=1,操作失敗,AX=錯(cuò)誤代碼9.1.4文件的打開(kāi)方式
用INT21H的3DH功能打開(kāi)一個(gè)文件時(shí),打開(kāi)文件的方式有三種,由AL中的打開(kāi)方式代碼確定:AL=0,以只讀方式打開(kāi),文件只能讀,不能寫(xiě)。AL=1,以只寫(xiě)方式打開(kāi),文件只能寫(xiě),不能讀。AL=2,以讀寫(xiě)方式打開(kāi),文件可讀可寫(xiě)。
DOS系統(tǒng)為每個(gè)打開(kāi)的文件管理一個(gè)讀寫(xiě)指針。對(duì)文件的讀寫(xiě)操作,實(shí)際上是從當(dāng)前指針指向的位置開(kāi)始的,可以把讀寫(xiě)指針移動(dòng)到文件的任意位置,從而能夠?qū)崿F(xiàn)對(duì)文件的隨機(jī)存取。建立一個(gè)新文件或打開(kāi)一個(gè)已有文件后,讀寫(xiě)指針的值被初始化為0,也就是指向文件的起始位置。隨著讀寫(xiě)操作的進(jìn)行,系統(tǒng)會(huì)根據(jù)讀寫(xiě)的字節(jié)數(shù),不斷修改讀寫(xiě)指針的值,使讀寫(xiě)指針總是指向下一次要存取的字節(jié)。用INT21H的42H功能可以把讀寫(xiě)指針移到文件的任意位置。該功能要求在BX中設(shè)置文件句柄,在CX:DX中設(shè)置要移動(dòng)的字節(jié)數(shù)(偏移量),在AL中設(shè)置移動(dòng)方式代碼。
9.1.5讀寫(xiě)指針的移動(dòng)
AL中設(shè)置的移動(dòng)方式代碼指定了3種移動(dòng)指針的方式:(1)AL=00H,從文件開(kāi)始處計(jì)算偏移量(移動(dòng)的字節(jié)數(shù))。
例如,對(duì)文件進(jìn)行過(guò)讀寫(xiě)操作后,讀寫(xiě)指針不再指向文件開(kāi)始處,下面指令序列可以把讀寫(xiě)指針重新移動(dòng)到文件開(kāi)始處:
MOVAH,42H;INT21H的42H功能
MOVAL,00H;從文件開(kāi)始處計(jì)算偏移量
MOVBX,HANDLE;文件句柄(存儲(chǔ)在HANDLE單元中)送BXMOVCX,0;移動(dòng)字節(jié)數(shù)的高位數(shù)
MOVDX,0;移動(dòng)字節(jié)數(shù)的低位數(shù)
INT21H;DOS的21H號(hào)功能
又例如,從文件開(kāi)始把指針移動(dòng)100個(gè)字節(jié)的指令如下:
MOVAH,42HMOVAL,00MOVBX,HANDLEMOVCX,0MOVDX,100;移動(dòng)字節(jié)數(shù)的低位數(shù)
INT21H(2)
AL=01,從文件的當(dāng)前位置計(jì)算偏移量。此時(shí),偏移值可正可負(fù),若為正,則正向移動(dòng)指針;若為負(fù),則反向移動(dòng)。例如,從當(dāng)前讀寫(xiě)指針位置正向移動(dòng)100個(gè)字節(jié)的指令序列如下:
MOVAH,42HMOVAL,01;從當(dāng)前讀寫(xiě)指針位置計(jì)算偏移量
MOVBX,HANDLEMOVCX,0MOVDX,100;移動(dòng)字節(jié)數(shù)的低位數(shù)
INT21H(3)AL=02,從文件尾計(jì)算偏移量例如,要在文件尾添加記錄,可先用下列指令把讀寫(xiě)指針移到文件尾:
MOVAH,42HMOVAL,02;從文件尾計(jì)算偏移量
MOVBX,HANDLEMOVCX,0MOVDX,0INT21H
如果指針移動(dòng)成功,在DX:AX中返回新指針的位置。9.2文件操作舉例【例9-1】:創(chuàng)建一個(gè)文本文件MYFILE1.TXT,將從鍵盤(pán)輸入的內(nèi)容寫(xiě)入此文件中,輸入過(guò)程以回車結(jié)束。(1)分析:
1)在數(shù)據(jù)段中定義一個(gè)文件名的ASCIIZ串、一個(gè)字節(jié)的寫(xiě)緩沖區(qū)。
2)利用INT21H的3CH功能創(chuàng)建文件,若創(chuàng)建不成功則顯示錯(cuò)誤信息并退出。
3)在循環(huán)體中,利用INT21H的1號(hào)功能從鍵盤(pán)接收字符,然后利用
INT21H的40H功能把這一個(gè)字符寫(xiě)到文件中。每接收一個(gè)字符,判斷是否為回車,若為回車則退出,否則循環(huán)。
4)寫(xiě)文件后,必須先關(guān)閉文件,然后才能退出。(2)程序流程圖如下DATASEGMENTFILENAME1DB'MYFILE1.TXT',0;ASCIIZ串FILENAME2DB'MYFILE2.TXT',0HANDLE1DW?;保存文件句柄單元HANDLE2DW? BUFFERDB1024DUP(?);讀寫(xiě)緩沖區(qū)LENDW?;保存實(shí)際讀入長(zhǎng)度單元ERROR1DB'CanNotOpenFile!',0DH,0AH,'$'ERROR2DB'CanNotCreatFile!',0DH,0AH,'$'ERROR3DB'ReadingFileWrong!',0DH,0AH,'$'ERROR4DB'WritingFileWrong!',0DH,0AH,'$'DATAENDS
(3)根據(jù)流程圖編寫(xiě)匯編程序:CODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AX
;打開(kāi)文件MYFILE1MOVAH,3DH;INT21H的3DH功能
LEADX,F(xiàn)ILENAME1;DX=ASCIIZ串的首地址
MOVAL,0;AL=0,讀打開(kāi)
INT21H;打開(kāi)文件
JCERR1;打開(kāi)不成功,轉(zhuǎn)ERR1MOVHANDLE1,AX;成功,保存文件句柄
;創(chuàng)建新文件MYFILE2MOVAH,3CH;INT21H的3CH功能
LEADX,F(xiàn)ILENAME2;DX=ASCIIZ串的首地址
MOVCX,0;CX=0,普通文件
INT21H;創(chuàng)建文件
JCERR2;創(chuàng)建不成功,轉(zhuǎn)ERR2MOVHANDLE2,AX;保存文件句柄;讀MYFILE1內(nèi)容到緩沖區(qū)
MOVAH,3FH;INT21H的3FH功能
LEADX,BUFFER;DX=讀緩沖區(qū)的首地址
MOVBX,HANDLE1;BX=文件句柄
MOVCX,1024;CX=希望讀入的字節(jié)數(shù)
INT21H;讀文件
JCERR3;不成功,轉(zhuǎn)ERR3MOVLEN,AX;成功,保存字節(jié)數(shù);把緩沖區(qū)中的小寫(xiě)字母變?yōu)榇髮?xiě)字母
LEASI,BUFFER;設(shè)置SI、DI為地址指針
MOVDI,SIMOVCX,LEN;CX=待處理的字符數(shù)
LP1:MOVAL,[SI];從緩沖區(qū)中取一個(gè)字節(jié)
CMPAL,'a';與小寫(xiě)字母a比較
JBCON1;若比a小,則不轉(zhuǎn)換
CMPAL,'z';與小寫(xiě)字母z比較
JACON1;若比z大,則不轉(zhuǎn)換
SUBAL,20H;否則轉(zhuǎn)換成大寫(xiě)字母
MOV[DI],AL;送回緩沖區(qū)
CON1:INCSI;修改地址指針
INCDILOOPLP1;循環(huán);將緩沖區(qū)中內(nèi)容寫(xiě)到文件MYFILE2中
MOVAH,40H;INT21H的40H功能
LEADX,BUFFER;DX=寫(xiě)緩沖區(qū)首地址
MOVBX,HANDLE2;BX=文件句柄
MOVCX,LEN;CX=要寫(xiě)入的字節(jié)數(shù)
INT21H;寫(xiě)文件
JCERR4;不成功,轉(zhuǎn)ERR4
;關(guān)閉文件MYFILE2L0:MOVAH,3EH;INT21H的功能3EHMOVBX,HANDLE2;BX=文件句柄
INT21H;關(guān)閉文件
L1:MOVAH,3EH;關(guān)閉文件MYFILE1MOVBX,HANDLE1INT21H
EXIT:MOVAX,4C00H;返回DOSINT21H
ERR1:MOVAH,9;顯示打開(kāi)文件出錯(cuò)信息
LEADX,ERROR1INT21HJMPEXIT;返回DOS
ERR2:MOVAH,9;顯示創(chuàng)建文件出錯(cuò)信息
LEADX,ERROR2INT21HJMPL1
ERR3:MOVAH,9;顯示讀文件出錯(cuò)信息
LEADX,ERROR3INT21HJMPL0ERR4:MOVAH,9;顯示寫(xiě)文件出錯(cuò)信息
LEADX,ERROR4INT21HJMPL0MAINENDPCODEENDSENDSTART【例9-2】:將例9-1中形成的文件MYFILE1.TXT中的小寫(xiě)字母變成大寫(xiě)字母,并復(fù)制到另一文件MYFILE2.TXT中。(1)分析:對(duì)文件內(nèi)容進(jìn)行加工,必須在內(nèi)存的讀寫(xiě)緩存區(qū)中進(jìn)行,所以,首先要打開(kāi)文件,把文件內(nèi)容讀到讀緩沖區(qū)中,然后在緩沖區(qū)中進(jìn)行小寫(xiě)到大寫(xiě)的轉(zhuǎn)換。(2)程序流程圖如下。打開(kāi)文件MYFILE1創(chuàng)建新文件MYFILE2把緩沖區(qū)中的小寫(xiě)字母變?yōu)榇髮?xiě)字母讀MYFILE1內(nèi)容到緩沖區(qū)將緩沖區(qū)中內(nèi)容寫(xiě)到文件MYFILE2中關(guān)閉文件MYFILE2關(guān)閉文件MYFILE1結(jié)束開(kāi)始DATASEGMENTFILENAME1DB'MYFILE1.TXT',0;ASCIIZ串FILENAME2DB'MYFILE2.TXT',0HANDLE1DW?;保存文件句柄單元HANDLE2DW? BUFFERDB1024DUP(?);讀寫(xiě)緩沖區(qū)LENDW?;保存實(shí)際讀入長(zhǎng)度單元ERROR1DB'CanNotOpenFile!',0DH,0AH,'$'ERROR2DB'CanNotCreatFile!',0DH,0AH,'$'ERROR3DB'ReadingFileWrong!',0DH,0AH,'$'ERROR4DB'WritingFileWrong!',0DH,0AH,'$'DATAENDS
CODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AX;打開(kāi)文件MYFILE1MOVAH,3DH;INT21H的3DH功能
LEADX,F(xiàn)ILENAME1;DX=ASCIIZ串的首地址
MOVAL,0;AL=0,讀打開(kāi)
INT21H;打開(kāi)文件
JCERR1;打開(kāi)不成功,轉(zhuǎn)ERR1MOVHANDLE1,AX;成功,保存文件句柄
;創(chuàng)建新文件MYFILE2MOVAH,3CH;INT21H的3CH功能
LEADX,F(xiàn)ILENAME2;DX=ASCIIZ串的首地址
MOVCX,0;CX=0,普通文件
INT21H;創(chuàng)建文件
JCERR2;創(chuàng)建不成功,轉(zhuǎn)ERR2MOVHANDLE2,AX;保存文件句柄;讀MYFILE1內(nèi)容到緩沖區(qū)
MOVAH,3FH;INT21H的3FH功能
LEADX,BUFFER;DX=讀緩沖區(qū)的首地址
MOVBX,HANDLE1;BX=文件句柄
MOVCX,1024;CX=希望讀入的字節(jié)數(shù)
INT21H;讀文件
JCERR3;讀文件不成功,轉(zhuǎn)ERR3MOVLEN,AX;讀成功,保存字節(jié)數(shù);把緩沖區(qū)中的小寫(xiě)字母變?yōu)榇髮?xiě)字母
LEASI,BUFFER;設(shè)置SI、DI為地址指針
MOVDI,SIMOVCX,LEN;CX=待處理的字符數(shù)
LP1:MOVAL,[SI];從緩沖區(qū)中取一個(gè)字節(jié)
CMPAL,'a';與小寫(xiě)字母a比較
JBCON1;若比a小,則不轉(zhuǎn)換
CMPAL,'z';與小寫(xiě)字母z比較
JACON1;若比z大,則不轉(zhuǎn)換
SUBAL,20H;若是小寫(xiě)字母,則轉(zhuǎn)換(3)根據(jù)流程圖編寫(xiě)匯編程序:
MOV[DI],AL;送回緩沖區(qū)
CON1:INCSI;修改地址指針
INCDILOOPLP1;循環(huán);將緩沖區(qū)中內(nèi)容寫(xiě)到文件MYFILE2中
MOVAH,40H;INT21H的40H功能
LEADX,BUFFER;DX=寫(xiě)緩沖區(qū)的首地址
MOVBX,HANDLE2;BX=文件句柄
MOVCX,LEN;CX=要寫(xiě)入的字節(jié)數(shù)
INT21H;寫(xiě)文件
JCERR4;寫(xiě)文件不成功,轉(zhuǎn)ERR4
;關(guān)閉文件MYFILE2L0:MOVAH,3EH;INT21H的功能3EHMOVBX,HANDLE2;BX=文件句柄
INT21H;關(guān)閉文件
L1:MOVAH,3EH;關(guān)閉文件MYFILE1MOVBX,HANDLE1INT21H
EXIT:MOVAX,4C00H;返回DOSINT21H
ERR1:MOVAH,9;顯示打開(kāi)文件出錯(cuò)信息
LEADX,ERROR1INT21HJMPEXIT;返回DOS
ERR2:MOVAH,9;顯示創(chuàng)建文件出錯(cuò)信息
LEADX,ERROR2INT21HJMPL1
ERR3:MOVAH,9;顯示讀文件出錯(cuò)信息
LEADX,ERROR3INT21HJMPL0
ERR4:MOVAH,9;顯示寫(xiě)文件出錯(cuò)信息
LEADX,ERROR4INT21HJMPL0
MAINENDPCODEENDSENDSTART【例9-3】:將上面兩個(gè)例子中形成的文件MYFILE2.TXT連接到MYFILE1.TXT后面,然后刪除MYFILE2.TXT。
(1)分析:把文件MYFILE2連接到MYFILE1,首先要打開(kāi)兩個(gè)文件,把文件MYFILE2的內(nèi)容讀到緩沖區(qū),然后再寫(xiě)到文件MYFILE1中。注意,寫(xiě)文件之前要把文件MYFILE1的讀寫(xiě)指針移動(dòng)到文件尾,因?yàn)閷?duì)文件的讀寫(xiě)操作實(shí)際上是從當(dāng)前指針指向的位置開(kāi)始的,打開(kāi)文件后,文件指針指向文件頭,所以必須先把MYFILE1的指針移到文件尾,再把緩沖區(qū)中的內(nèi)容寫(xiě)進(jìn)去,這樣才能保證文件MYFILE2的內(nèi)容連接到MYFILE1的內(nèi)容之后。DATASEGMENTFNAME1DB'MYFILE1.TXT',0;文件信息的ASCIIZ串FNAME2DB'MYFILE2.TXT',0HANDLE1DW?;保存文件句柄單元HANDLE2DW?BUFFERDB100DUP(?);讀寫(xiě)緩沖區(qū)ERR1DB'Cannotopenfile',0dh,0ah,'$'ERR2DB'Readingerror',0dh,0ah,'$'ERR3DB'Writingerror',0dh,0ah,'$'DATAENDS
CODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARMOVAX,DATA;初始化DSMOVDS,AX
;以只寫(xiě)方式打開(kāi)文件FNAME1MOVAX,3D01H;寫(xiě)打開(kāi)打開(kāi)文件
LEADX,FNAME1;DX=ASCIIZ串的首地址
INT21H;打開(kāi)文件
JCOPEN_ERR1;若打開(kāi)不成功,轉(zhuǎn)OPEN_ERR1MOVHANDLE1,AX;打開(kāi)成功,保存文件句柄;以讀方式打開(kāi)文件FNAME2MOVAX,3D00H;AH=3DH,打開(kāi)文件;AL=0,讀打開(kāi)
LEADX,FNAME2;DX=ASCIIZ串的首地址
INT21H;打開(kāi)文件
JCOPEN_ERR2;若打開(kāi)不成功,轉(zhuǎn)OPEN_ERR2MOVHANDLE2,AX;打開(kāi)成功,保存文件句柄(3)根據(jù)流程圖編寫(xiě)匯編程序:
打開(kāi)文件MYFILE1打開(kāi)文件MYFILE2讀MYFILE2內(nèi)容到緩沖區(qū)將緩沖區(qū)中內(nèi)容寫(xiě)到文件MYFILE1中關(guān)閉文件MYFILE1關(guān)閉文件MYFILE2結(jié)束開(kāi)始把文件MYFILE1的指針移到文件尾刪除文件MYFILE2(2)程序流程圖如下:
;把文件FNAME1的指針移到文件尾
MOVBX,HANDLE1;BX=文件句柄
MOVCX,0;CX=移動(dòng)字節(jié)數(shù)的高位字
MOVDX,0;DX=移動(dòng)字節(jié)數(shù)的低位字
MOVAX,4202H;相對(duì)文件尾移動(dòng)
INT21H;移動(dòng)指針;把文件FNAME2的內(nèi)容讀到緩沖區(qū)中
MOVBX,HANDLE2;BX=文件2的文件句柄
LEADX,BUFFER;DX=讀緩沖區(qū)的首地址
MOVCX,100;CX=希望讀入的字節(jié)數(shù)
MOVAH,3FH;AH=3FH,讀文件
INT21HJCREAD_ERR;不成功,轉(zhuǎn)READ_ERR
;把緩沖區(qū)中的內(nèi)容寫(xiě)到文件1中
MOVBX,HANDLE1;BX=文件1的文件句柄
LEADX,BUFFER;DX=寫(xiě)緩沖區(qū)的首地址
MOVCX,AX;CX=要寫(xiě)入的字節(jié)數(shù)
MOVAH,40H;AH=40H,寫(xiě)文件
INT21HJCWRITE_ERR;失敗,轉(zhuǎn)WRITE_ERR
L1:MOVBX,HANDLE2;BX=文件2的文件句柄
MOVAH,3EH;AH=關(guān)閉文件的功能號(hào)3EHINT21H;關(guān)閉文件2L2:MOVBX,HANDLE1;BX=文件1的文件句柄
MOVAH,3EH;AH=關(guān)閉文件的功能號(hào)3EHINT21H;關(guān)閉文件1
LEADX,FNAME2;DX=文件2的ASCIIZ串首地址
MOVAH,41H;AH=41H,刪除文件的功能號(hào)
INT21H;刪除文件2MOVAX,4C00H;結(jié)束程序
INT21H
OPEN_ERR1:LEADX,ERR1;顯示打開(kāi)文件1出錯(cuò)信息
MOVAH,9INT21HJMPL2OPEN_ERR2:LEADX,ERR1;顯示打開(kāi)文件2出錯(cuò)信息
MOVAH,9INT21HJMPL1READ_ERR:LEADX,ERR2;顯示讀文件出錯(cuò)信息
MOVAH,9INT21HJMPL1WRITE_ERR:LEADX,ERR3;顯示寫(xiě)文件出錯(cuò)信息
MOVAH,9INT21HJMPL1MAINENDPCODEENDSENDMAIN【例9-4】:已知有一個(gè)文件MYFILE.TXT,其中的內(nèi)容為5個(gè)學(xué)生的記錄,每條記錄為14個(gè)字節(jié),最后兩個(gè)字節(jié)為回車和換行。要求編程實(shí)現(xiàn):從鍵盤(pán)輸入任一個(gè)序號(hào)后,在屏幕上顯示出該條記錄,有效記錄號(hào)為1~5,若輸入回車則結(jié)束。(1)分析:本程序的難點(diǎn)是要讀取文件中的任意記錄,為此必須將文件的讀寫(xiě)指針移動(dòng)到該記錄處。因?yàn)槊織l記錄為14個(gè)字節(jié),所以第N條記錄在文件中相對(duì)于文件開(kāi)始的偏移量為(N-1)×14,那么從文件頭開(kāi)始移動(dòng)文件指針的字節(jié)數(shù)即為(N-1)×14。DATASEGMENTSTRINGDB'PleaseInputNumber:',0DH,0AH,'$'FILENAMEDB'MYFILE.TXT',0;文件名的ASCIIZ串HANDLEDW?;保存文件句柄單元BUFFERDB14DUP(?),'$‘
;讀緩沖區(qū)ERRORDB'NumberWrong!',0DH,0AH,'$'DATAENDS
CODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AX
;打開(kāi)文件MYFILE.TXTMOVAH,3DH;AH=打開(kāi)文件的功能號(hào)3DHLEADX,F(xiàn)ILENAME;DX=ASCIIZ串首地址
MOVAL,0;AL=0,讀打開(kāi)
INT21H;打開(kāi)文件
MOVHANDLE,AX;保存文件句柄
LP1:LEADX,STRING;顯示提示串STRINGMOVAH,9INT21H(3)根據(jù)流程圖編寫(xiě)匯編程序:
(2)程序流程圖如下:YN打開(kāi)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年江蘇食品藥品職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試題庫(kù)及參考答案詳解
- 2026年河北工業(yè)職業(yè)技術(shù)大學(xué)單招職業(yè)適應(yīng)性測(cè)試題庫(kù)及答案詳解1套
- 2026年博爾塔拉職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及參考答案詳解1套
- 2026年鄭州理工職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)附答案詳解
- 2026年天津財(cái)經(jīng)大學(xué)珠江學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)含答案詳解
- 2026年自貢職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)參考答案詳解
- 2026年青海省海西蒙古族藏族自治州單招職業(yè)傾向性測(cè)試題庫(kù)及參考答案詳解
- 2026年江蘇信息職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)含答案詳解
- 2026年杭州萬(wàn)向職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)附答案詳解
- 2026年湖南電氣職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)及參考答案詳解一套
- 乳房旋切術(shù)后護(hù)理
- 高中化學(xué)-常見(jiàn)晶胞模型
- 模擬電子技術(shù)基礎(chǔ)-華中科技大學(xué)中國(guó)大學(xué)mooc課后章節(jié)答案期末考試題庫(kù)2023年
- 輔助生殖技術(shù)及護(hù)理人工授精
- 把未來(lái)點(diǎn)亮歌詞打印版
- 華南理工大學(xué)模擬電子技術(shù)基礎(chǔ)試卷及答案
- GB/T 18369-2022玻璃纖維無(wú)捻粗紗
- GB/T 14048.17-2008低壓開(kāi)關(guān)設(shè)備和控制設(shè)備第5-4部分:控制電路電器和開(kāi)關(guān)元件小容量觸頭的性能評(píng)定方法特殊試驗(yàn)
- GB/T 10067.33-2014電熱裝置基本技術(shù)條件第33部分:工頻無(wú)心感應(yīng)熔銅爐
- 學(xué)生記分冊(cè)(通用模板)
- 提高住院部醫(yī)生交接班制度落實(shí)率pdca
評(píng)論
0/150
提交評(píng)論