1. 程式人生 > >彙編程式設計:磁碟檔案的讀寫

彙編程式設計:磁碟檔案的讀寫

說明
這是一個讀寫磁碟檔案的例子,其中“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。