彙編程式設計:磁碟檔案的讀寫
阿新 • • 發佈:2019-01-02
說明
這是一個讀寫磁碟檔案的例子,其中“infile”為讀檔案,“wfile”為寫檔案。
函式圖:
infile(檔案的讀取)
;資料段 data segment file db 'c:\1.txt' , 0 ;檔名,dosbox 設定的c盤下的路徑 buf db 256 dup(0) ;檔案內容暫存區 error_message db 0ah , 'error !' , '$' ;出錯時的提示 handle dw ? ;儲存檔案號 data ends ;程式碼段 code segment assume cs:code , ds:data start: mov ax , data mov ds , ax ;獲取段地址 mov dx , offset file ;dx獲取file的偏移地址 mov al , 0 mov ah , 3dh int 21h ;開啟檔案,只讀 jc error ;若打開出錯,轉error mov handle , ax ;儲存檔案控制代碼 mov bx , ax ;檔案控制代碼 mov cx , 255 ;讀取255位元組 mov dx , offset buf ;獲取buf的偏移地址 mov ah , 3fh int 21h ;從檔案中讀255位元組→buf jc error ;若讀出錯,轉error mov bx , ax ;實際讀到的字元數送入bx mov buf[bx] , '$' ;在檔案結束處放置一“$”符 mov dx , offset buf mov ah , 9 int 21h ;顯示檔案內容 mov bx , handle ;檔案控制代碼 mov ah , 3eh int 21h ;關閉檔案 jnc end1 ;若關閉過程無錯,轉到end1處返回dos error: mov dx , offset error_message ;獲取error_message的偏移地址 mov ah , 9 int 21h ;顯示error_message end1: mov ah , 4ch ;待返回碼的結束 int 21h code ends end start
outfile(檔案的寫入)
;資料段 data segment file db 'c:\1.txt' , 0 ;建立檔案的檔名 buf db 'this is a test !' ;寫到檔案中去的內容 error_message db 0ah , 'error !' , '$' ;出錯時的提示 message db 0ah , 'ok !$' ;操作成功後的提示 handle dw ? ;儲存檔案號 data ends ;程式碼段 code segment assume cs:code , ds:data start: mov ax , data mov ds , ax mov dx , offset file mov cx , 0 mov ah , 3ch int 21h ;建立檔案,若磁碟上原有此檔案,則覆蓋 jc error ;創建出錯,轉error處 mov handle , ax ;儲存檔案號 mov bx , ax mov cx , 16 mov dx , offset buf mov ah , 40h int 21h ;向檔案中寫入16個位元組內容 jc error ;寫出錯,轉error處 mov bx , handle mov ah , 3eh int 21h ;關閉檔案 jc error ;關閉檔案出錯,轉error處 mov dx , offset message mov ah , 9 int 21h ;操作成功後顯示提示 jmp end1 error: mov dx , offset error_message mov ah , 9 int 21h ;顯示錯誤提示` end1: mov ah , 4ch int 21h code ends end start
引數傳遞
無需引數傳遞
改寫為函式庫
無子函式
中斷向量計算
本題用到了21H函式庫的函式呼叫。
21H號函式庫:CS=421h+2h=86h , IP=421h=84h 。中斷向量為0:84h。