Bài giảng Lập trình Hợp ngữ - Chương 12: Lập trình xử lý đĩa và 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

 

ppt65 trang | Chia sẻ: hienduc166 | Lượt xem: 655 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình Hợp ngữ - Chương 12: Lập trình xử lý đĩa và File, để xem tài liệu hoàn chỉnh bạn click vào nút TẢI VỀ ở trên
.12/17/202031LAP TRINH XU LY DIA TUSỰ PHÂN VÙNG TRÊN ĐĨABOOT RECORDFAT1FAT2ROOT DIRECTORYCLUSTERSSYSTEMAREADATAAREA12/17/202032LAP TRINH XU LY DIA TUCÁC LOẠI ĐĨADisk	 sides	 track sectors total 	 cluster	 totalType	 per per sector	 size	 bytes	 side track360K	 2 	 40 9 720 1,024 368,640720K 2 80 9 1,440 512 737,2801.2MB 2 80 15 2,400 512 1,228,800 1.4MB 2 80 18 2,880 512 1,474,56032MB 6 614 17 62,610 2,048 32,056,832 12/17/202033LAP TRINH XU LY DIA TUTÍNH DUNG LƯỢNG ĐĨACông thức tính dung lượng đĩa :Dung lượng đĩa (bytes) = số byte/1 sector * số sector/1 track * số track/ 1 mặt đĩa * số mặt đĩa.12/17/202034LAP TRINH XU LY DIA TUMỘT SỐ HÀM THAO TÁC VỚI FILE VÀ ĐĨA INT 21HHÀM 36H INT 21H : Lấy số bytes còn trống trên đĩaInput :AH = 36H DL = O63 đĩa (0 : mặc định, 1 ổ A . Output :Có lỗi AX = 0FFFFHKhông lỗi : AX = số sector / clusterBX = số cluster còn trốngDX = tổng số cluster trên đĩaCX = số bytes/cluster12/17/202035LAP TRINH XU LY DIA TUBÀI TẬPViế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.12/17/202036LAP TRINH XU LY DIA TUViế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+ZViết chương trình gộp nội dung 1 file vào cuối 1 file khác.12/17/202037LAP TRINH XU LY DIA TULAÄP TRÌNH XÖÛ LYÙ FILEGiỚI THIỆU FILECÁC HÀM CHỨC NĂNG XỬ LÝ FILECỦA INT 21H CỦA DOS12/17/202038LAP TRINH XU LY DIA TUGIÔÙ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.HANDLE12/17/202039LAP TRINH XU LY DIA TUGIÔÙ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 Printer12/17/202040LAP TRINH XU LY DIA TUCÁC THAO TÁC XỬ LÝ FILE12/17/202041LAP TRINH XU LY DIA TUCAÙC CHÖÙC NAÊNG CÔ BAÛN VEÀ XÖÛ LYÙ FILE CUÛA INT 21HChöùc naêng	 Taùc vuï3Ch	 Taïo File môùi3Dh Môû File ñaõ coù ñeå xuaát/nhaäp/vöøa nhaäp vöøa xuaát3Eh Ñoùng theû File3Fh Ñoïc töø File hay ñoïc töø thieát bò 1 soá bytes ñònh tröôùc40h Ghi vaøo File hay ñoïc töø thieát bò 1 soá bytes ñònh tröôùc42h di chuyeån con troû File tröôùc khi ñoïc/ ghiCAÙC CHÖÙC NAÊNGNAØY PHAÛI ÑÖA VAØO AH12/17/202042LAP TRINH XU LY DIA TUCHÖÙC NAÊNG TAÏO FILE 3ChCREATE FILE FUNCTION 3ChChöù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 = 3ChDS: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).12/17/202043LAP TRINH XU LY DIA TUCHÖÙC NAÊNG TAÏO FILE 3ChCREATE FILE FUNCTION 3ChEx : 	CREATE_FILE :MOV AH, 3CHMOV DX, OFFSET NEWFILEMOV CX, 0INT 21HJC DISPLAY_ERRORMOV NEWFILEHANDLE, AX... NEWFILE DB ‘ FILE1.DOC ’,0NEWFILEHANDLE DW ?12/17/202044LAP TRINH XU LY DIA TUCHÖÙC NAÊNG TAÏO FILE 3ChCREATE FILE FUNCTION 3ChEx : 	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.12/17/202045LAP TRINH XU LY DIA TUCHÖÙC NAÊNG 5BhTAÏO FILE MÔÙI COÙ KIEÅM TRAÑIEÀU KIEÄN : GIOÁNG CHÖÙC NAÊNG 3ChNEÁU FILE NAØY ÑAÕ COÙ THÌ KHOÂNG MÔÛ FILE MÔÙI MAØ TRAÛ VEÀ LOÃI 50hCREATE_FILE :MOV AH,5BHMOV DX, OFFSET FILENAMEMOV CX, 0INT 21HJC ERROR .FILENAME DB ‘FILE1.DOC’ , 012/17/202046LAP TRINH XU LY DIA TUCAÙC LOÃI KHI MÔÛ FILEMAÕ LOÃI	DIEÃN GIAÛIFILE 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ời12/17/202047LAP TRINH XU LY DIA TUCAÙC LOÃI KHI MÔÛ FILEMAÕ LOÃI	DIEÃN GIAÛI11H Không cùng thiết bị12H Không tìm được thêm File nào 12/17/202048LAP TRINH XU LY DIA TUCHÖÙC NAÊNG MÔÛ FILE ÑAÕ COÙ 3Dh Int 21hOPEN FILEÑIEÀU KIEÄN :AH = 3DH DS:DX ÑÒA CHÆ TEÂN FILEAL = 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 HANDLECOÙ LOÃI CF = 1 AX  mã lỗi (2,4,512)12/17/202049LAP TRINH XU LY DIA TUMỞ FILE HÀM 3CH INT 21HTruớ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ẻ file12/17/202050LAP TRINH XU LY DIA TUMỞ FILE HÀM 3CH INT 21HAH = 3CHDS: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 FileNếu thành công, AX = thẻ FileNếu CF được set thì có lỗi, mã lỗi chứa trong AX(lỗi 3,4,5)12/17/202051LAP TRINH XU LY DIA TUViết code mở 1 File mới với thuộc tính chỉ đọc,tên File là FILE1 Fname DB ‘FILE1’,0FHANDLE DW ?MOV AX,@DATAMOV DS,AXMOV AH,3CHMOV CL,1LEA DX,FNAMEINT 21HMOV FHANDLE, AXJC OPEN_ERROR.12/17/202052LAP TRINH XU LY DIA TUCHÖÙC NAÊNG MÔÛ FILE ÑAÕ COÙ SẴN HÀM 3Dh INT 21HOPEN FILEAH = 3DHDS: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à ghiThành công, AX = FhandleCó lỗi. Mã lỗi chứa trong AX (2,4,5,12)12/17/202053LAP TRINH XU LY DIA TUCHÖÙC NAÊNG MÔÛ FILE ÑAÕ COÙ SẴN HÀM 3Dh INT 21HOPEN FILEMOV AH, 3DHMOV AL, 0MOV DX, OFFSET FILENAMEINT 21HJC DISPLAY_ERRORMOV INFILEHANDLE, AX ..INFILE DB ‘ D:\FILE1.DOC’, 0INFILEHANDLE DW ?12/17/202054LAP TRINH XU LY DIA TUCHÖÙC NAÊNG 3EH ÑOÙNG FILEÑIEÀU KIEÄN :AH = 3EH BX = FILE HANDLE CAÀN ÑOÙNGXUAÁT :KHOÂNG LOÃI CF = 0 COÙ LOÃI CF = 1EX :MOV AH, 3EHMOV BX, INFILEHANDLEINT 21HJC DISPLAY_ERROR..INFILE DB ‘D:\FIEL1.DOC’, 0INFILEHANDLE DW ?LOÃI SOÁ 6 : INVALID HANDLEFILE HANDLE TRONG BX KHOÂNG PHAÛI LAØ THEÛ FILE CUÛA FILE ÑAÕ MÔÛ.12/17/202055LAP TRINH XU LY DIA TUCHÖÙC NAÊNG 3FH ÑOÏC FILEÑIEÀU KIEÄN :AH = 3FH BX = FILE HANDLE , CX = SOÁ BYTES CAÀN ÑOÏCDS: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ÔÙ12/17/202056LAP TRINH XU LY DIA TUCHÖÙC NAÊNG 3FH ÑOÏC FILEEX : ÑOÏC 1 SECTOR 512 BYTES TÖØ FILE .DATAHANDLE DW ?BUFFER DB 512 DUP(?)MOV AX, @DATAMOV DS, AXMOV AH, 3FHMOV CX, 512MOV BX, HANDLEMOV CX, 512INT 21HJC READ_ERRORNEÁU CAÀN ÑOÏC HEÁT CAÙC SECTOR CHO ÑEÁN HEÁT FILE  EOFCMP AX, CXJL EXITJMP READ_LOOP12/17/202057LAP TRINH XU LY DIA TUCHÖÙC NAÊNG 40H GHI FILEGHI 1 SOÁ BYTES LEÂN FILE HAY THIEÁT BÒ INPUT :AH =40H BX = THEÛ FILE CX = SOÁ BYTES CAÀN GHIDS: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ÌNH12/17/202058LAP TRINH XU LY DIA TUCON 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 42H12/17/202059LAP TRINH XU LY DIA TUMINH HỌA LẬP TRÌNH FILEViế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.12/17/202060LAP TRINH XU LY DIA TUDÒCH CHUYEÅN CON TROÛ FILEHAØM 42H INT 21HAH = 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).12/17/202061LAP TRINH XU LY DIA TUDÒCH CHUYEÅN CON TROÛ FILEHAØM 42H INT 21HCX : 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 FILEMOV AH, 42H ; DI CHUYEÅN CON TROÛ FILEMOV BX, HANDLE ; LAÁY THEÛ FILEXOR DX, DXXOR CX, CX ; DÒCH CHUYEÅN 0 BYTEMOV AL, 2 ; TÍNH TÖØ CUOÁI FILEINT 21H ; CHUYEÅN CON TROÛ ÑEÁN CUOÁI FILE, DX:AX KÍCH THÖÔÙC FILEJC MOVE_ERROR12/17/202062LAP TRINH XU LY DIA TUINPUT : 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ÔØINEÁ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 21H12/17/202063LAP TRINH XU LY DIA TUEx : thay ñoåi thuoäc tính File thaønh hidden fileMOV AH, 43HMOV AL, 1LEA DX, FILENAMEMOV CX, 1INT 21HJC 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 AX12/17/202064LAP TRINH XU LY DIA TU1. 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 FILE12/17/202065LAP TRINH XU LY DIA TU

File đính kèm:

  • pptChuong_12_LAP_TRINH_XU_LY_DIA_&_FILE.ppt
Bài giảng liên quan