Bài giảng Cấu trúc máy tính lập trình hợp ngữ - Lập trình xử lý đĩa và file

ppt 65 trang hapham 980
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cấu trúc máy tính lập trình hợp ngữ - Lập trình xử lý đĩa và file", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_cau_truc_may_tinh_lap_trinh_hop_ngu_lap_trinh_xu_l.ppt

Nội dung text: Bài giảng Cấu trúc máy tính lập trình hợp ngữ - Lập trình xử lý đĩa và file

  1. 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 6/25/2021 LAP TRINH XU LY DIA TU 1
  2. CƠ BẢN VỀ LƯU TRỮ TRÊN ĐĨA TỪ Ngơn ngữ ASM vượt trội hơn các ngơn ngữ khác về khả năng xử lý đĩa. Ta xem xét việc lưu trữ thơng tin trên đĩa theo 2 mức độ : mức phần cứng/BIOS và mức phần mềm/DOS. mức phần cứng :lưu trữ thơng tin liên quan đến cách dữ liệu được lưu trữ 1 cách vật lý như thế nào trên đĩa từ? mức phần mềm : việc lưu trữ được quản lý bởi tiện ích quản lý File của HĐH DOS. 6/25/2021 LAP TRINH XU LY DIA TU 2
  3. 6/25/2021 LAP TRINH XU LY DIA TU 3
  4. 6/25/2021 LAP TRINH XU LY DIA TU 4
  5. CÁC ĐẶC TÍNH LUẬN LÝ & VẬT LÝ CỦA ĐĨA TỪ Ở mức vật lý : đĩa được tổ chức thành các Tracks, Cylinders, Sectors. ➔ Khả năng lưu trữ của đĩa được mơ tả bằng 3 thơng sơ : C (cylinder number) H (Head side) R (sector number) 6/25/2021 LAP TRINH XU LY DIA TU 5
  6. 6/25/2021 LAP TRINH XU LY DIA TU 6
  7. CÁC KHÁI NIỆM TRACK, CYLINDER, SECTOR Tracks : là các vịng trịn đồng tâm được tạo ra trên bề mặt đĩa. Cylinder : tập các tracks cùng bán kính trên 1 chồng đĩa. Mặt đĩa cĩ bao nhiêu track thì sẽ cĩ bấy nhiêu Cylinder. Sector : là 1 đọan của track (cung từ) cĩ khả năng lưu trữ 512 bytes dữ liệu. Các sector được đánh số bắt đầu từ 1 trên mỗi track → trên 1 đĩa tồn tại nhiều sector cùng số hiệu. 6/25/2021 LAP TRINH XU LY DIA TU 7
  8. 6/25/2021 LAP TRINH XU LY DIA TU 8
  9. Ở mức luận lý : đĩa được tổ chức thành các Clusters, các files mà DOS sẽ dùng để cấp phát vùng lưu trữ cho dữ liệu cần lưu trữ. Cluster : là 1 nhĩm gồm 2,4,6 các sector kề nhau. Đĩ chính là đơn vị cấp phát vùng lưu trữ cho dữ liệu (file). Các cluster được đánh số bắt đầu từ 0. Nếu dữ liệu cần lưu trữ chỉ 1 byte thì hệ điều hành cũng cấp phát 1 cluster. số bytes/cluster hay sector/cluster tùy thuộc vào từng loại đĩa. 6/25/2021 LAP TRINH XU LY DIA TU 9
  10. TƯƠNG QUAN GIỮA SECTOR VẬT LÝ VÀ SECTOR LOGIC TRÊN ĐĨA MỀM MẶT TRACK SECTOR SECTOR THƠNG TIN ĐĨA LOGIC 0 0 1 0 BOOT RECORD 0 0 2-5 1-4 FAT 0 0 6-9 5-8 Thư mục gốc 1 0 1-3 9-11 Thư mục gốc 1 0 4-9 12-17 Dữ liệu 0 1 1-9 18-26 Dữ liệu 6/25/2021 LAP TRINH XU LY DIA TU 10
  11. BAD SECTOR Trên bề mặt đĩa cĩ thể tồn tại các sector mà HĐH khơng thể ghi dữ liệu vào đĩ hoặc khơng thể đọc dữ liệu từ đĩ. Các sector này gọi là Bad Sector. Làm sao biết sector nào là bad sector Kiểm tra giá trị của các phần tử (entry) trong bảng FAT, phần tử nào chứa giá trị (F)FF7H thì cluster tương ứng bị Bad 6/25/2021 LAP TRINH XU LY DIA TU 11
  12. BẢNG FAT FILE ALLOCATION TABLE DOS quản lý các File nhờ vào 1 bảng gọi là bảng FAT. Trong bảng FAT cĩ ghi cluster bắt đầu của File này ở đâu ? Và đĩa cịn bao nhiêu Clusters trống chưa cấp phát. tổ chức luận lý của đĩa được mơ tả như hình sau : Boot Bảng Bảng Root record FAT1 FAT2 directory data 6/25/2021 LAP TRINH XU LY DIA TU 12
  13. Thí dụ về bảng FAT Đĩa mềm 3.5”” 360K thì : Sector 0 : boot sector Sector 1-4 : bảng FAT Sector 5 – 11 : thư mục gốc Sector 12-719 : vùng chứa data 6/25/2021 LAP TRINH XU LY DIA TU 13
  14. BOOT RECORD Cịn được gọi là Boot Sector. Ổ đĩa cứng gọi là Master boot, là Sector đầu tiên khi đĩa được format. chứa 1 chương trình nhỏ cho biết dạng lưu trữ trên đĩa và tên hệ thống MT, kiểm tra xem cĩ các file hệ thống IO.SYS, MSDOS.SYS, COMMAND.COM hay khơng ? nếu cĩ thì nạp chúng vào bộ nhớ (gọi là chương trình mồi của HĐH) 6/25/2021 LAP TRINH XU LY DIA TU 14
  15. BOOT RECORD (tt) Tọa độ vật lý : C=0, H=0, R =1 (C0H0R1) tức ở tại sector đầu tiên của track đầu tiên, mặt trên của đĩa đầu tiên trong ổ đĩa cứng. Trong Master boot cĩ chứa bảng PARTITION TABLE cho biết tầm địa chỉ vật lý (dung lượng) của ổ đĩa luận lý. Master boot khơng thuộc Partition nào 6/25/2021 LAP TRINH XU LY DIA TU 15
  16. BOOT RECORD (tt) BOOT RECORD được ROM BIOS nạp vào địa chỉ 0000:7C00H. Nếu máy khơng bị Virus thì lệnh đầu tiên của chương trình BOOT là JMP 7C3EH, nghĩa là nhảy đến chương trình nạp mồi. chương trình nạp mồi (Bootstrap Loader) nạp thành phần cốt lõi của DOS lên RAM trong quá trình khởi động MT. 6/25/2021 LAP TRINH XU LY DIA TU 16
  17. THƠNG TIN TRONG MASTER BOOT BYTEBĐẦU SỐ BYTES THƠNG TIN 00H 3 chỉ thị nhảy về nới chứa CT nạp mồi 03H 8 Tên nhà sản xuất và hệ điều hành 0BH 2 Bytes/sector 0DH 1 Sector/block (mỗi block >=1 sector) 0EH 2 Số lượng Sectors khơng dùng đến kể từ sector 0. 10h 1 Số lượng bảng FAT 6/25/2021 LAP TRINH XU LY DIA TU 17
  18. THƠNG TIN TRONG MASTER BOOT BYTE BĐẦU SỐ BYTES THƠNG TIN 11H 2 Số Entry của thư mục gốc ổ đĩa. 13H 2 Tổng số sector của ổ đĩa logic này. 15H 1 Byte mơ tả 16H 2 Số sector cho 1 bảng FAT 18H 2 Số Sectors trong 1 track. 1AH 2 Số lượng đầu đọc 1CH 4 Số lượng sector ẩn 20H 4 Tổng số sectors 6/25/2021 LAP TRINH XU LY DIA TU 18
  19. THƠNG TIN TRONG MASTER BOOT BYTE BĐẦU SỐ BYTES THƠNG TIN 3EH Bootstrap . 1BEH 64 PARTITION TABLE 1FEH 1 Giá trị 55H 1FFH 1 Giá trị 0AAH 6/25/2021 LAP TRINH XU LY DIA TU 19
  20. THƠNG TIN TRONG MASTER BOOT Từ thơng tin trong bảng FORMAT, ta tính được địa chỉ của bảng FAT1, FAT2, Thư mục gốc ổ đĩa, địa chỉ bắt đầu của vùng dữ liệu. 6/25/2021 LAP TRINH XU LY DIA TU 20
  21. BẢNG FAT Bảng chứa các danh sách liên kết các clusters. Mỗi danh sách trong bảng cho DOS biết rằng các clusters nào đã cấp phát, các clusters nào chưa dùng. tùy theo ổ đĩa cĩ thể cĩ 1 hay 2 bảng FAT, bảng FAT2 để dự phỏng. cĩ 2 loại bảng FAT : bảng cĩ Entry 12 bit cho đĩa mềm. bảng cĩ Entry 16 bit cho đĩa cứng. 6/25/2021 LAP TRINH XU LY DIA TU 21
  22. PARTITON TABLE 64 Bytes của Partiton table được chia làm 4, mỗi phần 16 bytes mơ tả cho 1 partition các thơng tin sau : Bytes Mơ tả 00H active flag (=0 Non bootable =80H Bootable) 01H starting head – Nơi bắt đầu Partittion 02H starting cylinder 6/25/2021 LAP TRINH XU LY DIA TU 22
  23. PARTION TABLE Bằng FDISK của HĐH ta cĩ thể chia khơng gian lưu trữ của đĩa cứng thành các phần khác nhau gọi là Partition. DOS cho phép tạo ra 3 loại Partition : Primary Dos, Extended Dos và None Dos Ta cĩ thể cài đặt các HĐH khác nhau lên các Partition khác nhau. 6/25/2021 LAP TRINH XU LY DIA TU 23
  24. 03H starting sector 04H parttition type : PARTITON TABLE 0 Non Dos 1 cho đĩa nhỏ 12 bit FAT Entry 4 cho đĩa lớn 16 bit FAT Entry 5 Extended Dos 05H Ending nơi kết thúc Partition 06H Ending Cylinder 07H Ending Sector 08H, 0BH Starting sector for partition 0Ch,0FH Partition length in sectors 6/25/2021 LAP TRINH XU LY DIA TU 24
  25. Một số thí dụ kiểm tra Partition Active đọc sector đầu tiên của đĩa cứng lưu vào biến. kiểm tra offset 00 của 4 phần tử Partition trong Partition Table MOV CX, 4 JE ACTIVE MOV SI, 1BEH ADD SI, 16 PACTIVE : LOOP PACTIVE MOV AL, MBOOT [SI] NO_ACTIVE : CMP AL, 80H . ACTIVE : 6/25/2021 LAP TRINH XU LY DIA TU 25
  26. Một số thí dụ Đọc nội dung của BootSector ghi vào biến dem đọc sector đầu tiên của đĩa cứng lưu vào buffer. tìm partition active (phần tử trong bảng partition cĩ offset 80h) đọc byte tại offset 01h và word tại offset 02h của phần tử partition tương ứng ở trên (head, sector, cylinder) để xác định số hiệu bắt đầu của partition active → boot sector của đĩa cứng. đọc nội dung của sector đọc được ở trên lưu vào buffer. 6/25/2021 LAP TRINH XU LY DIA TU 26
  27. Một số thí dụ ACTIVE : MOV AX, 0201H ; đọc 1 sector MOV CX, WORD PTR MBOOT [SI+2] ; sector cylinder MOV DH, BYTE PTR MBOOT[SI+1] ; head MOV DL, 80H ; đĩa cứng MOV ES, CS ; trỏ về đầu vùng buffer lưu LEA BX, BUFFER INT 13H 6/25/2021 LAP TRINH XU LY DIA TU 27
  28. THƯ MỤC GỐC (ROOT DIRECTORY) Là danh sách tất cả các Files đã cĩ trên đĩa, các thư mục cấp 1 đã cĩ. Mỗi phần tử (32 bytes) trong bảng thư mục sẽ chứa thơng tin về tên file hoặc là thư mục, kích thước, thuộc tính, cluster bắt đầu của file này hoặc cluster bắt đầu của thư mục thứ cấp (thư mục con). mỗi bảng thư mục chứa tối đa 112 entry, mỗi entry là 32 bytes. 6/25/2021 LAP TRINH XU LY DIA TU 28
  29. THƯ MỤC GỐC (ROOT DIRECTORY) Offset Nội dung Kích thước 00H tên chính của File 8 bytes 08H phần mở rộng của tên file 3 bytes 0BH thuộc tính của File 1 byte 0CH dự trữ 10 bytes 16H giờ thay đổi thơng tin cuối cùng 2 bytes 18H ngày thay đổi thơng tin cuối cùng 2 bytes 1Ah cluster đầu tiên của File 2 bytes 1CH Kích thước File 4bytes 6/25/2021 LAP TRINH XU LY DIA TU 29
  30. BYTE THUỘC TÍNH x x a d v s h r x : khơng sử dụng a : thuộc tính lưu trữ (Archive) d : thuộc tính thư mục con (Sub – Directory) v : thuộc tính nhãn đĩa (Volume) s : thuộc tính hệ thống (System) h : thuộc tính ẩn (Hidden) r : thuộc tính chỉ đọc (Read Only) 6/25/2021 LAP TRINH XU LY DIA TU 30
  31. VÙNG LƯU TRỮ là vùng dành cho việc lưu trữ dữ liệu. như vậy việc lưu trữ dữ liệu trên đĩa cĩ cấu trúc là 1 danh sách liên kết mà bảng thư mục gốc là đầu của danh sách liên kết. đầu mỗi cluster luơn luơn chứa địa chỉ của cluster sau nĩ cho biết phần cịn lại của file là cluster nào. Nếu giá trị này là 0 thì cluster này là cluster cuối cùng. 6/25/2021 LAP TRINH XU LY DIA TU 31
  32. SỰ PHÂN VÙNG TRÊN ĐĨA BOOT RECORD SYSTEM FAT1 AREA FAT2 ROOT DIRECTORY DATA CLUSTERS AREA 6/25/2021 LAP TRINH XU LY DIA TU 32
  33. CÁC LOẠI ĐĨA Disk sides track sectors total cluster total Type per per sector size bytes side track 360K 2 40 9 720 1,024 368,640 720K 2 80 9 1,440 512 737,280 1.2MB 2 80 15 2,400 512 1,228,800 1.4MB 2 80 18 2,880 512 1,474,560 32MB 6 614 17 62,610 2,048 32,056,832 6/25/2021 LAP TRINH XU LY DIA TU 33
  34. TÍNH DUNG LƯỢNG ĐĨA Cơ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. 6/25/2021 LAP TRINH XU LY DIA TU 34
  35. MỘT SỐ HÀM THAO TÁC VỚI FILE VÀ ĐĨA INT 21H HÀM 36H INT 21H : Lấy số bytes cịn trống trên đĩa Input : AH = 36H DL = O63 đĩa (0 : mặc định, 1 ổ A . Output : Cĩ lỗi AX = 0FFFFH Khơng lỗi : AX = số sector / cluster BX = số cluster cịn trống DX = tổng số cluster trên đĩa CX = số bytes/cluster 6/25/2021 LAP TRINH XU LY DIA TU 35
  36. BÀ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. 6/25/2021 LAP TRINH XU LY DIA TU 36
  37. 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ệc nhậ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. 6/25/2021 LAP TRINH XU LY DIA TU 37
  38. LẬP TRÌNH XỬ LÝ FILE GiỚI THIỆU FILE CÁC HÀM CHỨC NĂNG XỬ LÝ FILE CỦA INT 21H CỦA DOS 6/25/2021 LAP TRINH XU LY DIA TU 38
  39. GIỚI THIỆU FILE Trong quản lý File, Dos vay mượn khái niệm Handle trong HĐH Unix để truy xuất File và thiết bị. HANDLE Handle là 1 số 16 bits được Dos sử dụng để nhận biết File đã mở hoặc 1 thiết bị trong hệ thống. 6/25/2021 LAP TRINH XU LY DIA TU 39
  40. GIỚI THIỆU FILE Có 5 Handle thiết bị chuẩn được Dos nhận dạng. Handle Thiết bị 0 Keyboard, standard input 1 Console, standard output 2 Error output thiết bị xuất lỗi – màn hình 3 Auxiliary device asynchronous 4 Printer 6/25/2021 LAP TRINH XU LY DIA TU 40
  41. CÁC THAO TÁC XỬ LÝ FILE 6/25/2021 LAP TRINH XU LY DIA TU 41
  42. CÁC CHỨC NĂNG CƠ BẢN VỀ XỬ LÝ FILE CỦA INT 21H CÁC CHỨC NĂNG Chức năng NÀY PHẢI ĐƯA Tác vụ VÀO AH 3Ch Tạo File mới 3Dh Mở File đã có để xuất/nhập/vừa nhập vừa xuất 3Eh Đóng thẻ File 3Fh Đọc từ File hay đọc từ thiết bị 1 số bytes định trước 40h Ghi vào File hay đọc từ thiết bị 1 số bytes định trước 42h di chuyển con trỏ File trước khi đọc/ ghi 6/25/2021 LAP TRINH XU LY DIA TU 42
  43. CHỨC NĂNG TẠO FILE 3Ch CREATE FILE FUNCTION 3Ch Chức năng : Mở 1 File mới để đọc ghi. Nếu file đã có thì file cũ sẽ bị xóa. AH = 3Ch DS:DX địa chỉ của tên File muốn mở (ASCIIZ String) CX = thuộc tính File (0 normal 1 ReadOnly 2 Hidden 4 System) Xuất : không lỗi CF =0 AX = File Handle Có lỗi CF =1. Mã lỗi trong AX (3,4,5). 6/25/2021 LAP TRINH XU LY DIA TU 43
  44. CHỨC NĂNG TẠO FILE 3Ch CREATE 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 ? 6/25/2021 LAP TRINH XU LY DIA TU 44
  45. CHỨC NĂNG TẠO FILE 3Ch CREATE FILE FUNCTION 3Ch Ex : CHỨC NĂNG 3Ch CÓ 1 KHUYẾT ĐIỂM LÀ NẾU CÓ 1 FILE CÙNG TÊN(CÙNG ĐƯỜNG DẪN) ĐÃ TỒN TẠI THÌ FILE CŨ SẼ BỊ XÓA. ĐỂ BẢO VỆ FILE, CÓ 2 CÁCH : C1 : MỞ FILE BẰNG CHỨC NĂNG 3Dh, NẾU FILE CHƯA CÓ THÌ TRẢ VỀ LỖI SỐ 2 (FILE NOT FOUND) ➔ YÊN TÂM MỞ FILE MỚI. C2 : DÙNG CHỨC NĂNG 5Bh MỞ FILE CÓ KIỂM TRA TÊN FILE NÀY ĐÃ CÓ CHƯA. 6/25/2021 LAP TRINH XU LY DIA TU 45
  46. CHỨC NĂNG 5Bh TẠO FILE MỚI CÓ KIỂM TRA ĐIỀU KIỆN : GIỐNG CHỨC NĂNG 3Ch NẾU FILE NÀY ĐÃ CÓ THÌ KHÔNG MỞ FILE MỚI MÀ TRẢ VỀ LỖI 50h CREATE_FILE : MOV AH,5BH MOV DX, OFFSET FILENAME MOV CX, 0 INT 21H JC ERROR . FILENAME DB ‘FILE1.DOC’ , 0 6/25/2021 LAP TRINH XU LY DIA TU 46
  47. CÁC LỖI KHI MỞ FILE MÃ LỖI DIỄN GIẢI 2 FILE NOT FOUND KHÔNG TÌM THẤY FILE, CÓ THỂ ĐƯỜNG DẪN KHÔNG ĐÚNG HOẶC TÊN FILE MÔ TẢ KHÔNG HỢP LỆ. 3 PATH NOT FOUND ĐƯỜNG DẪN KHÔNG CÓ. 4 TOO MANY OPEN FILES CÓ THỂ DO LỆNH PATH XX TRONG CONFIG.SYS QUÁ NHỎ KHÔNG CHO PHÉP MỞ NHIỀU FILE. 5 ACCESS DENIED TỪ CHỐI TRUY XUẤT. CÓ THỂ TA MUỐN XOÁ FILE ĐANG MỞ, HAY FILE NÀY CÓ THUỘC TÍNH CHỈ ĐỌ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 6/25/2021 LAP TRINH XU LY DIA TU 47
  48. CÁC LỖI KHI MỞ FILE MÃ LỖI DIỄN GIẢI 11H Khơng cùng thiết bị 12H Khơng tìm được thêm File nào 6/25/2021 LAP TRINH XU LY DIA TU 48
  49. CHỨC NĂNG MỞ FILE ĐÃ CÓ 3Dh Int 21h OPEN FILE ĐIỀU KIỆN : AH = 3DH DS:DX ĐỊA CHỈ TÊN FILE AL = MODE 0: INPUT (MỞ CHỈ ĐỌC) 1 : OUTPUT (MỞ ĐỂ GHI) 2 : INPUT OUTPUT (MỞ VỪA ĐỌC VỪA GHI) XUẤT : KHÔNG LỖI CF = 0 AX = FILE HANDLE CÓ LỖI CF = 1 AX mã lỗi (2,4,512) 6/25/2021 LAP TRINH XU LY DIA TU 49
  50. 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 6/25/2021 LAP TRINH XU LY DIA TU 50
  51. 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) 6/25/2021 LAP TRINH XU LY DIA TU 51
  52. 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 INT 21H FHANDLE DW ? MOV FHANDLE, AX MOV AX,@DATA JC OPEN_ERROR MOV DS,AX . MOV AH,3CH MOV CL,1 LEA DX,FNAME 6/25/2021 LAP TRINH XU LY DIA TU 52
  53. CHỨC NĂNG MỞ FILE ĐÃ CÓ SẴN HÀM 3Dh INT 21H OPEN 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) 6/25/2021 LAP TRINH XU LY DIA TU 53
  54. CHỨC NĂNG MỞ FILE ĐÃ CÓ SẴN HÀM 3Dh INT 21H OPEN 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 ? 6/25/2021 LAP TRINH XU LY DIA TU 54
  55. CHỨC NĂNG 3EH ĐÓNG FILE ĐIỀU KIỆN : AH = 3EH BX = FILE HANDLE CẦN ĐÓNG XUẤT : KHÔNG LỖI CF = 0 CÓ LỖI CF = 1 EX : LỖI SỐ 6 : INVALID HANDLE MOV AH, 3EH FILE HANDLE TRONG BX MOV BX, INFILEHANDLE KHÔNG PHẢI LÀ THẺ FILE CỦA FILE ĐÃ MỞ. INT 21H JC DISPLAY_ERROR INFILE DB ‘D:\FIEL1.DOC’, 0 INFILEHANDLE DW ? 6/25/2021 LAP TRINH XU LY DIA TU 55
  56. CHỨC NĂNG 3FH ĐỌC FILE ĐỌC 1 SỐ BYTES TỪ FILE LƯU VÀO BỘ NHỚ ĐIỀU KIỆN : AH = 3FH BX = FILE HANDLE , CX = SỐ BYTES CẦN ĐỌC DS:DX : ĐỊA CHỈ BỘ ĐỆM. XUẤT : AX = SỐ BYTES ĐỌC ĐƯỢC, NẾU AX = 0 HAY AX<CX FILE ĐÃ KẾT THÚC. NẾU CỜ CF ĐƯỢC LẬP ➔ CÓ LỖI, MÃ LỖI CHỨA TRONG AX( 5,6) 6/25/2021 LAP TRINH XU LY DIA TU 56
  57. CHỨC NĂNG 3FH ĐỌC FILE EX : ĐỌC 1 SECTOR 512 BYTES TỪ FILE .DATA MOV CX, 512 HANDLE DW ? INT 21H BUFFER DB 512 DUP(?) JC READ_ERROR MOV AX, @DATA NẾU CẦN ĐỌC HẾT CÁC SECTOR CHO MOV DS, AX ĐẾN HẾT FILE ➔ EOF CMP AX, CX MOV AH, 3FH JL EXIT MOV CX, 512 JMP READ_LOOP MOV BX, HANDLE 6/25/2021 LAP TRINH XU LY DIA TU 57
  58. CHỨC NĂNG 40H GHI FILE GHI 1 SỐ BYTES LÊN FILE HAY THIẾT BỊ INPUT : AH =40H BX = THẺ FILE CX = SỐ BYTES CẦN GHI DS:DX : ĐỊA CHỈ VÙNG ĐỆM. OUTPUT : AX : SỐ BYTES GHI ĐƯỢC, NẾU AX<CX, CÓ LỖI (ĐĨA ĐẦY).NẾU CF ĐƯỢC LẬP → CÓ LỖI, MÃ LỖI TRONG AX (5,6). HÀM 40H CŨNG CÓ THỂ DÙNG ĐỂ ĐƯA DỮ LIỆU RA MÀN HÌNH 6/25/2021 LAP TRINH XU LY DIA TU 58
  59. CON TRỎ FILE ⚫ DÙNG ĐỂ ĐỊNH VỊ TRONG FILE. ⚫ KHI FILE ĐƯỢC MỞ, CON TRỎ FILE NẰM Ở ĐẦU FILE. ⚫ SAU MỖI THAO TÁC ĐỌC, CON TRỎ FILE SẼ DI CHUYỂN ĐẾN BYTE KẾ. ⚫ SAU KHI GHI 1 FILE MỚI CON TRỎ CHỈ ĐẾN CUỐI FILE (EOF). ⚫ ĐỂ DI CHUYỂN CON TRỎ FILE HÀM 42H 6/25/2021 LAP TRINH XU LY DIA TU 59
  60. 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. 6/25/2021 LAP TRINH XU LY DIA TU 60
  61. DỊCH CHUYỂN CON TRỎ FILE HÀM 42H INT 21H AH = 42H AL = PHƯƠNG THỨC TRUY NHẬP 0 DỊCH CHUYỂN TƯƠNG ĐỐI SO VỚI ĐẦU FILE. 1 DỊCH CHUYỂN TƯƠNG ĐỐI SO VỚI VỊ TRÍ HIỆN THỜI CỦA CON TRỎ. 2 DỊCH CHUYỂN TƯƠNG ĐỐI SO VỚI CUỐI FILE. BX = THẺ FILE. CX : DX SỐ BYTES CẦN DỊCH CHUYỂN. OUTPUT : DX:AX : VỊ TRÍ MỚI CỦA CON TRỎ FILE TÍNH BẰNG BYTE TỪ ĐẦU FILE. NẾU CF =1 MÃ LỖI TRONG AX (1, 6). 6/25/2021 LAP TRINH XU LY DIA TU 61
  62. DỊCH CHUYỂN CON TRỎ FILE HÀM 42H INT 21H CX : DX CHỨA SỐ BYTES ĐỂ DI CHUYỂN CON TRỎ. NẾU LÀ SỐ DƯƠNG ➔ CHUYỂN VỀ CUỐI FILE. NẾU LÀ SỐ ÂM ➔CHUYỂN VỀ ĐẦU FILE. DI CHUYỂN CON TRỎ FILE ĐẾN CUỐI FILE VÀ XÁC ĐỊNH KÍCH THƯỚC FILE MOV AH, 42H ; DI CHUYỂN CON TRỎ FILE MOV BX, HANDLE ; LẤY THẺ FILE XOR DX, DX XOR CX, CX ; DỊCH CHUYỂN 0 BYTE MOV AL, 2 ; TÍNH TỪ CUỐI FILE INT 21H ; CHUYỂN CON TRỎ ĐẾN CUỐI FILE, DX:AX KÍCH THƯỚC FILE JC MOVE_ERROR 6/25/2021 LAP TRINH XU LY DIA TU 62
  63. THAY ĐỔI THUỘC TÍNH FILE HÀM 43H INT 21H INPUT : AH = 43H DS :DX = ĐỊA CHỈ CHUỔI ASCII STRING AL = 0 ĐỂ LẤY THUỘC TÍNH FILE AL =1 ĐỂ THAY ĐỔI THUỘC TÍNH FILE, CX = THUỘC TÍNH FILE MỚI (NẾU AL =1) OUTPUT : NẾU THÀNH CÔNG, CX = THUỘC TÍNH HIỆN THỜI NẾU CF ĐƯỢC LẬP ➔ CÓ LỖI, MÃ LỖI TRONG AX (2,3,5). 6/25/2021 LAP TRINH XU LY DIA TU 63
  64. Ex : thay đổi thuộc tính File thành hidden file MOV AH, 43H ; Hàm lấy / đổi thuộc tính File MOV AL, 1 ; tuỳ chọn thay đổi thuộc tính LEA DX, FILENAME ; lấy tên file kế cả đường dẫn. MOV CX, 1 I; thuộc tính Hideen INT 21H ; đổi thuộc tính JC ATT_ERROR ; thoát nếu có lỗi, mã lỗi trong AX 6/25/2021 LAP TRINH XU LY DIA TU 64
  65. LẬP TRÌNH FILE 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. 2. 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. 3. Viết chương trình ghép nội dung 1 file vào cuối 1 file khác đã cĩ. 4. 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). 6/25/2021 LAP TRINH XU LY DIA TU 65