Bài giảng Cấu trúc máy tính - Chương 12: Lập trình xử lý đĩa & file
CƠ BẢN VỀ LƯU TRỮ TRÊN ĐĨA TỪ.
MỘT ỨNG DỤNG HIỂN THỊ SECTOR
MỘT ỨNG DỤNG HIỂN THỊ CLUSTER.
CÁC CHỨC NĂNG VỀ FILE Ở MỨC HỆ THỐNG.
QUẢN LÝ ĐĨA VÀ THƯ MỤC.
TRUY XUẤT ĐĨA VỚI INT 13H CỦA ROMBIOS
BÀI TẬP
GiỚI THIỆU FILE VÀ LẬP TRÌNH XỬ LÝ FILE
I TẬP Viết chương trình tạo thư mục với yêu cầu tên thư mục (có thể bao gồm tên ổ đĩa, đường dẫn và tên thư mục)được nhập từ bàn phím, cho phép sửa sai khi gỏ nhầm tên thư mục. 11/9/2021 36 LAP TRINH XU LY DIA TU Viết chương trình ghi dữ liệu vào file với yêu cầu : Tên file nhập từ bàn phím Dữ liệu ghi vào file cũng gỏ từ bàn phím và kết thúc việcnhập bằng phím CTRL+Z Viết chương trình gộp nội dung 1 file vào cuối 1 file khác. 11/9/2021 37 LAP TRINH XU LY DIA TU LAÄP TRÌNH XÖÛ LYÙ FILE GiỚI THIỆU FILE CÁC HÀM CHỨC NĂNG XỬ LÝ FILECỦA INT 21H CỦA DOS 11/9/2021 38 LAP TRINH XU LY DIA TU GIÔÙI THIEÄU FILE Trong quaûn lyù File, Dos vay möôïn khaùi nieäm Handle trong HÑH Unix ñeå truy xuaát File vaø thieát bò . Handle laø 1 soá 16 bits ñöôïc Dos söû duïng ñeå nhaän bieát File ñaõ môû hoaëc 1 thieát bò trong heä thoáng . HANDLE 11/9/2021 39 LAP TRINH XU LY DIA TU GIÔÙI THIEÄU FILE Coù 5 Handle thieát bò chuaån ñöôïc Dos nhaän daïng . Handle Thieát bò 0 Keyboard, standard input Console, standard output Error output thieát bò xuaát loãi – maøn hình Auxiliary device asynchronous Printer 11/9/2021 40 LAP TRINH XU LY DIA TU CÁC THAO TÁC XỬ LÝ FILE 11/9/2021 41 LAP TRINH XU LY DIA TU CAÙC CHÖÙC NAÊNG CÔ BAÛN VEÀ XÖÛ LYÙ FILE CUÛA INT 21H Chöùc naêng Taùc vuï 3Ch Taïo File môùi 3Dh Môû File ñaõ coù ñeå xuaát/nhaäp/vöøa nhaäp vöøa xuaát 3Eh Ñoùng theû File 3Fh Ñoïc töø File hay ñoïc töø thieát bò 1 soá bytes ñònh tröôùc 40h Ghi vaøo File hay ñoïc töø thieát bò 1 soá bytes ñònh tröôùc 42h di chuyeån con troû File tröôùc khi ñoïc / ghi CAÙC CHÖÙC NAÊNG NAØY PHAÛI ÑÖA VAØO AH 11/9/2021 42 LAP TRINH XU LY DIA TU CHÖÙC NAÊNG TAÏO FILE 3Ch CREATE FILE FUNCTION 3Ch Chöùc naêng : Môû 1 File môùi ñeå ñoïc ghi . Neáu file ñaõ coù thì file cuõ seõ bò xoùa . AH = 3Ch DS:DX ñòa chæ cuûa teân File muoán môû (ASCIIZ String) CX = thuoäc tính File (0 normal 1 ReadOnly 2 Hidden 4 System) Xuaát : khoâng loãi CF =0 AX = File Handle Coù loãi CF =1. Maõ loãi trong AX (3,4,5). 11/9/2021 43 LAP TRINH XU LY DIA TU CHÖÙC NAÊNG TAÏO FILE 3ChCREATE FILE FUNCTION 3Ch Ex : CREATE_FILE : MOV AH, 3CH MOV DX, OFFSET NEWFILE MOV CX, 0 INT 21H JC DISPLAY_ERROR MOV NEWFILEHANDLE, AX ... NEWFILE DB ‘ FILE1.DOC ’,0 NEWFILEHANDLE DW ? 11/9/2021 44 LAP TRINH XU LY DIA TU CHÖÙC NAÊNG TAÏO FILE 3Ch CREATE FILE FUNCTION 3Ch Ex : CHÖÙC NAÊNG 3Ch COÙ 1 KHUYEÁT ÑIEÅM LAØ NEÁU COÙ 1 FILE CUØNG TEÂN(CUØNG ÑÖÔØNG DAÃN) ÑAÕ TOÀN TAÏI THÌ FILE CUÕ SEÕ BÒ XOÙA. ÑEÅ BAÛO VEÄ FILE, COÙ 2 CAÙCH : C1 : MÔÛ FILE BAÈNG CHÖÙC NAÊNG 3Dh, NEÁU FILE CHÖA COÙ THÌ TRAÛ VEÀ LOÃI SOÁ 2 (FILE NOT FOUND) YEÂN TAÂM MÔÛ FILE MÔÙI. C2 : DUØNG CHÖÙC NAÊNG 5Bh MÔÛ FILE COÙ KIEÅM TRA TEÂN FILE NAØY ÑAÕ COÙ CHÖA. 11/9/2021 45 LAP TRINH XU LY DIA TU CHÖÙC NAÊNG 5Bh TAÏO FILE MÔÙI COÙ KIEÅM TRA ÑIEÀU KIEÄN : GIOÁNG CHÖÙC NAÊNG 3Ch NEÁU FILE NAØY ÑAÕ COÙ THÌ KHOÂNG MÔÛ FILE MÔÙI MAØ TRAÛ VEÀ LOÃI 50h CREATE_FILE : MOV AH,5BH MOV DX, OFFSET FILENAME MOV CX, 0 INT 21H JC ERROR . FILENAME DB ‘FILE1.DOC’ , 0 11/9/2021 46 LAP TRINH XU LY DIA TU CAÙC LOÃI KHI MÔÛ FILE MAÕ LOÃI DIEÃN GIAÛI FILE NOT FOUND KHOÂNG TÌM THAÁY FILE, COÙ THEÅ ÑÖÔØNG DAÃN KHOÂNG ÑUÙNG HOAËC TEÂN FILE MOÂ TAÛ KHOÂNG HÔÏP LEÄ. PATH NOT FOUND ÑÖÔØNG DAÃN KHOÂNG COÙ. TOO MANY OPEN FILES COÙ THEÅ DO LEÄNH PATH XX TRONG CONFIG.SYS QUAÙ NHOÛ KHOÂNG CHO PHEÙP MÔÛ NHIEÀU FILE. ACCESS DENIED TÖØ CHOÁI TRUY XUAÁT. COÙ THEÅ TA MUOÁN XOAÙ FILE ÑANG MÔÛ, HAY FILE NAØY COÙ THUOÄC TÍNH CHÆ ÑOÏC. CH M ã truy nhập không hợp lệ. FH Ổ đĩa không hợp lệ 10h Đang tìm cách xóa thư mục hiện thời 11/9/2021 47 LAP TRINH XU LY DIA TU CAÙC LOÃI KHI MÔÛ FILE MAÕ LOÃI DIEÃN GIAÛI 11H Không cùng thiết bị 12H Không tìm được thêm File nào 11/9/2021 48 LAP TRINH XU LY DIA TU CHÖÙC NAÊNG MÔÛ FILE ÑAÕ COÙ 3Dh Int 21h OPEN FILE ÑIEÀU KIEÄN : AH = 3DH DS:DX ÑÒA CHÆ TEÂN FILE AL = MODE 0: INPUT (MÔÛ CHÆ ÑOÏC) 1 : OUTPUT (MÔÛ ÑEÅ GHI) 2 : INPUT OUTPUT (MÔÛ VÖØA ÑOÏC VÖØA GHI) XUAÁT : KHOÂNG LOÃI CF = 0 AX = FILE HANDLE COÙ LOÃI CF = 1 AX m ã lỗi (2,4,512) 11/9/2021 49 LAP TRINH XU LY DIA TU MỞ FILE HÀM 3CH INT 21H Truớc khi sử dụng 1 file, ta phải mở nó. Để tạo 1 file mới hay ghi lại 1 file cũ, ta sử dụng tên file và thuộc tính của File. DOS trả về thẻ file 11/9/2021 50 LAP TRINH XU LY DIA TU MỞ FILE HÀM 3CH INT 21H AH = 3CH DS:DX địa chỉ của chuổi ASCII (chuổi tên File kết thúc bằng byte 0) CL = thuộc tính File Nếu thành công, AX = thẻ File Nếu CF được set thì có lỗi, mã lỗi chứa trong AX(lỗi 3,4,5) 11/9/2021 51 LAP TRINH XU LY DIA TU Viết code mở 1 File mới với thuộc tính chỉ đọc,tên File là FILE1 Fname DB ‘FILE1’,0 FHANDLE DW ? MOV AX,@DATA MOV DS,AX MOV AH,3CH MOV CL,1 LEA DX,FNAME INT 21H MOV FHANDLE, AX JC OPEN_ERROR . 11/9/2021 52 LAP TRINH XU LY DIA TU CHÖÙC NAÊNG MÔÛ FILE ÑAÕ COÙ SẴN HÀM 3Dh INT 21HOPEN FILE AH = 3DH DS:DX = địa chỉ của chuổi ASCII(chuổi tên File kết thúc bằng byte 0) AL = mã truy cập 0 : mở để đọc 1 : mở để ghi 2 : mở để đọc và ghi Thành công, AX = Fhandle Có lỗi. Mã lỗi chứa trong AX (2,4,5,12) 11/9/2021 53 LAP TRINH XU LY DIA TU CHÖÙC NAÊNG MÔÛ FILE ÑAÕ COÙ SẴN HÀM 3Dh INT 21HOPEN FILE MOV AH, 3DH MOV AL, 0 MOV DX, OFFSET FILENAME INT 21H JC DISPLAY_ERROR MOV INFILEHANDLE, AX .. INFILE DB ‘ D:\FILE1.DOC’, 0 INFILEHANDLE DW ? 11/9/2021 54 LAP TRINH XU LY DIA TU CHÖÙC NAÊNG 3EH ÑOÙNG FILE ÑIEÀU KIEÄN : AH = 3EH BX = FILE HANDLE CAÀN ÑOÙNG XUAÁT : KHOÂNG LOÃI CF = 0 COÙ LOÃI CF = 1 EX : MOV AH, 3EH MOV BX, INFILEHANDLE INT 21H JC DISPLAY_ERROR .. INFILE DB ‘D:\FIEL1.DOC’, 0 INFILEHANDLE DW ? LOÃI SOÁ 6 : INVALID HANDLE FILE HANDLE TRONG BX KHOÂNG PHAÛI LAØ THEÛ FILE CUÛA FILE ÑAÕ MÔÛ. 11/9/2021 55 LAP TRINH XU LY DIA TU CHÖÙC NAÊNG 3FH ÑOÏC FILE ÑIEÀU KIEÄN : AH = 3FH BX = FILE HANDLE , CX = SOÁ BYTES CAÀN ÑOÏC DS:DX : ÑÒA CHÆ BOÄ ÑEÄM. XUAÁT : AX = SOÁ BYTES ÑOÏC ÑÖÔÏC, NEÁU AX = 0 HAY AX<CX FILE ÑAÕ KEÁT THUÙC. NEÁU CÔØ CF ÑÖÔÏC LAÄP COÙ LOÃI, MAÕ LOÃI CHÖÙA TRONG AX( 5,6) ÑOÏC 1 SOÁ BYTES TÖØ FILE LÖU VAØO BOÄ NHÔÙ 11/9/2021 56 LAP TRINH XU LY DIA TU CHÖÙC NAÊNG 3FH ÑOÏC FILE EX : ÑOÏC 1 SECTOR 512 BYTES TÖØ FILE .DATA HANDLE DW ? BUFFER DB 512 DUP(?) MOV AX, @DATA MOV DS, AX MOV AH, 3FH MOV CX, 512 MOV BX, HANDLE MOV CX, 512 INT 21H JC READ_ERROR NEÁU CAÀN ÑOÏC HEÁT CAÙC SECTOR CHO ÑEÁN HEÁT FILE EOF CMP AX, CX JL EXIT JMP READ_LOOP 11/9/2021 57 LAP TRINH XU LY DIA TU CHÖÙC NAÊNG 40H GHI FILE GHI 1 SOÁ BYTES LEÂN FILE HAY THIEÁT BÒ INPUT : AH =40H BX = THEÛ FILE CX = SOÁ BYTES CAÀN GHI DS:DX : ÑÒA CHÆ VUØNG ÑEÄM. OUTPUT : AX : SOÁ BYTES GHI ÑÖÔÏC, NEÁU AX<CX, COÙ LOÃI (ÑÓA ÑAÀY).NEÁU CF ÑÖÔÏC LAÄP COÙ LOÃI, MAÕ LOÃI TRONG AX (5,6). HAØM 40H CUÕNG COÙ THEÅ DUØNG ÑEÅ ÑÖA DÖÕ LIEÄU RA MAØN HÌNH 11/9/2021 58 LAP TRINH XU LY DIA TU CON TROÛ FILE DUØNG ÑEÅ ÑÒNH VÒ TRONG FILE. KHI FILE ÑÖÔÏC MÔÛ, CON TROÛ FILE NAÈM ÔÛ ÑAÀU FILE. SAU MOÃI THAO TAÙC ÑOÏC, CON TROÛ FILE SEÕ DI CHUYEÅN ÑEÁN BYTE KEÁ. SAU KHI GHI 1 FILE MÔÙI CON TROÛ CHÆ ÑEÁN CUOÁI FILE (EOF). ÑEÅ DI CHUYEÅN CON TROÛ FILE HAØM 42H 11/9/2021 59 LAP TRINH XU LY DIA TU MINH HỌA LẬP TRÌNH FILE Viết chương trình cho phép User gỏ vào tên File (có thể cókèm theo tên ổ đĩa, thư mục chứa fiel), chương trình sẽđọc và hiển thị nội dung File ra màn hình. 11/9/2021 60 LAP TRINH XU LY DIA TU DÒCH CHUYEÅN CON TROÛ FILEHAØM 42H INT 21H AH = 42H AL = PHÖÔNG THÖÙC TRUY NHAÄP 0 DÒCH CHUYEÅN TÖÔNG ÑOÁI SO VÔÙI ÑAÀU FILE. 1 DÒCH CHUYEÅN TÖÔNG ÑOÁI SO VÔÙI VÒ TRÍ HIEÄN THÔØI CUÛA CON TROÛ. 2 DÒCH CHUYEÅN TÖÔNG ÑOÁI SO VÔÙI CUOÁI FILE. BX = THEÛ FILE. CX : DX SOÁ BYTES CAÀN DÒCH CHUYEÅN. OUTPUT : DX:AX : VÒ TRÍ MÔÙI CUÛA CON TROÛ FILE TÍNH BAÈNG BYTE TÖØ ÑAÀU FILE. NEÁU CF =1 MAÕ LOÃI TRONG AX (1, 6). 11/9/2021 61 LAP TRINH XU LY DIA TU DÒCH CHUYEÅN CON TROÛ FILEHAØM 42H INT 21H CX : DX CHÖÙA SOÁ BYTES ÑEÅ DI CHUYEÅN CON TROÛ. NEÁU LAØ SOÁ DÖÔNG CHUYEÅN VEÀ CUOÁI FILE. NEÁU LAØ SOÁ AÂM CHUYEÅN VEÀ ÑAÀU FILE. DI CHUYEÅN CON TROÛ FILE ÑEÁN CUOÁI FILE VAØ XAÙC ÑÒNH KÍCH THÖÔÙC FILE MOV AH, 42H ; DI CHUYEÅN CON TROÛ FILE MOV BX, HANDLE ; LAÁY THEÛ FILE XOR DX, DX XOR CX, CX ; DÒCH CHUYEÅN 0 BYTE MOV AL, 2 ; TÍNH TÖØ CUOÁI FILE INT 21H ; CHUYEÅN CON TROÛ ÑEÁN CUOÁI FILE, DX:AX KÍCH THÖÔÙC FILE JC MOVE_ERROR 11/9/2021 62 LAP TRINH XU LY DIA TU INPUT : AH = 43H DS :DX = ÑÒA CHÆ CHUOÅI ASCII STRING AL = 0 ÑEÅ LAÁY THUOÄC TÍNH FILE AL =1 ÑEÅ THAY ÑOÅI THUOÄC TÍNH FILE, CX = THUOÄC TÍNH FILE MÔÙI (NEÁU AL =1) OUTPUT : NEÁU THAØNH COÂNG, CX = THUOÄC TÍNH HIEÄN THÔØI NEÁU CF ÑÖÔÏC LAÄP COÙ LOÃI, MAÕ LOÃI TRONG AX (2,3,5). THAY ÑOÅI THUOÄC TÍNH FILEHAØM 43H INT 21H 11/9/2021 63 LAP TRINH XU LY DIA TU Ex : thay ñoåi thuoäc tính File thaønh hidden file MOV AH, 43H MOV AL, 1 LEA DX, FILENAME MOV CX, 1 INT 21H JC ATT_ERROR ; Haøm laáy / ñoåi thuoäc tính File ; tuyø choïn thay ñoåi thuoäc tính ; laáy teân file keá caû ñöôøng daãn . I; thuoäc tính Hideen ; ñoåi thuoäc tính ; thoaùt neáu coù loãi , maõ loãi trong AX 11/9/2021 64 LAP TRINH XU LY DIA TU 1. Viết chương trình chép một file nguồn đến một file đích trong đó thay chữ thường bằng chữ hoa. Viết chương trình đọc 2 file và hiển thị chúng bên cạnh nhau trên màn hình. Chú ý có chức năng dừng từng trang màn hình nếu file quá dài. Viết chương trình ghép nội dung 1 file vào cuối 1 file khác đã có. Viết chương trình tạo 1 thư mục, tên thư mục được gỏ từ bàn phím (tên thư mục có thể bao gồm tên ổ đĩa, đường dẫn). LẬP TRÌNH FILE 11/9/2021 65 LAP TRINH XU LY DIA TU
File đính kèm:
- bai_giang_cau_truc_may_tinh_chuong_12_lap_trinh_xu_ly_dia_fi.ppt