Giáo trình Asembly
Trong Computer dữ liệu được ghi nhớ bằng các mạch điện có khả năng thể hiện một số trạng thái
xác định . Mỗi mạch điệ n như vậy là một phần tử nhớ căn bản . Số giá trị một phần tử nhớ cănbản có thể
biểu diễn cũng chính là số trạng thái mạch điện tạo nên nó có thể xác định. Do khả năng của kỹ thuật chế
tạo mạch, và cũng do giá thành của mạch điện, các phần tử nhớ trên các Computer hiện nay đều được
thiết lập từ các mạch điện có hai trạng thái xác định bởi mức điện thế cao và thấp.
Tương ứng với hai trạng thái của mạch điện, mỗi phần tử nhớ mang một trong hai giá trị 0 và 1. Một
phần tử nhớ như vậy được gọi là một bit .
CB (Memory Control Block). ..... | |---------------- | MCB | |---------------- Memory | Block | |---------------- | MCB | |---------------- Memory | Block | |---------------- ..... | 18.1 MEMORY CONTROL BLOCK: Đứng trước mỗi memory block là một MCB (không thuộc về memory block). Mỗi MCB chiếm 16 bytes (hay một paragraph) có cấu trúc như sau: Offset Size Description 00h BYTE block type: 5Ah nếu là MCB cuối, 4Dh cho các MCB khác 01h WORD 0000h --> chưa sử dụng 0008h --> thuộc về DOS Khác --> PSP của chương trình đang quản lý (owner) 03h WORD Kích thước của memory block tính bằng paragraph 05h 3 BYTEs Không sử dụng ---DOS 2.x,3.x--- 08h 8 BYTEs Không sử dụng ---DOS 4+ --- 08h 8 BYTEs Tên chương trình (nếu là PSP memory block) ---DOS 5+ --- 08h 2 BYTEs Nếu block thuộc về DOS (Block type = 0008) thì mang một trong hai giá trị: “SC” --> System code, locked-out inter-UMB memory “SD” --> System data, device driver 111 Các MCB liên kết các memory block lại thành một dây xích (chain). Quá trình quản lý bộ nhớ của DOS dựa hoàn toàn trên các thông tin lưu chứa trong các MCB. Nếu thông tin trong một MCB không đúng dẫn đến chuỗi các MCB bị rối loạn, để bảo đảm an toàn, DOS sẽ thông báo Memory Alocation Error và yêu cầu khởi động lại hệ thống. Dưới DOS 3.1+, memory block đầu tiên là DOS data segment,chứa các device, table, buffer ... được chỉ định trong config.sys Dưới DOS 4+ memory block đầu tiên được chia thành nhiều khối con, mỗi khối có riêng một Control Block với cấu trúc như sau: Offset Size Description ====== ==== ==================================================== 00h BYTE Kiểu của khối con “D” device driver “E” device driver appendage “I” IFS (Installable File System) driver “F” FILES= (File system table) “X” FCBS= (FCB table) “C” BUFFERS EMS (Buffers EMS block) “B” BUFFERS= (Buffer block) “L” LASTDRIVE= (LASTDRIVE entry) “S” STACKS= (STACK code segment) “T” INSTALL= 01h WORD Segment bắt đầu 03h WORD Kích thước của khối con 05h 3 BYTEs Không sử dụng 08h 8 BYTEs Tên của file chứa device (nếu kiểu là D hay I) 18.2HIMEM HIMEM.SYS là trình quản lý bộ nhớ mở rộng (extended memory) của DOS. Với các CPU 286 trở lên bộ nhớ có thể lớn hơn 1MB. HIMEM cho phép một số ứng dụng của DOS như RAMDRIVE,SMARTDRV ...dùng phần mở rộng này. Trên các PC dùng CPU 286 trở lên, address bus là 24 hoặc 32 bit. Các địa chỉ được tạo thành từ segment và offset bị giới hạn trong 20 bit đầu (0-19) của address bus. Nếu bit 20 của address bus được sử dụng, địa chỉ tạo thành từ segment FFFFh và các offset từ 0-FFFFh sẽ cho phép truy nhập thêm 64KB tính từ địa chỉ 100000h (trên 1MB). Từ DOS 5.0, sau khi nạp HIMEM, với chỉ định DOS=HIGH trong CONFIG.SYS, bit A20 của address bus (A20) sẽ được đưa vào sử dụng. DOS sẽ cố gắng dùng tất cả vùng nhớ này cho các internal device, system table, buffer... Bằng cách này, DOS sẽ chỉ chiếm khoảng 15 KB trong vùng nhớ tiêu chuẩn. 18.3UPPER MEMORY CONTROL BLOCK Từ DOS 5.0, với các CPU 80386 trở lên, driver EMM386.EXE cho phép khai thác bộ nhớ một cách hữu hiệu hơn: vùng nhớ mở rộng (extend memory) có thể được dùng để giả lập cho bộ nhớ bành trướng (expand memory), đồng thời cũng cho cho phép tạo ra các UMB làm tăng thêm số lượng bộ nhớ dành cho các chương trình ứng dụng của DOS. Upper Memory Block là các khối nhớ thuộc vùng nhớ mở rộng trên PC (Ngoài 1MB quy ước, từ 100000h trở đi). Trên các CPU 80386 trở đi, EMM386 cho phép định vị lại địa chỉ các khối nhớ đó vào các “khoảng trống” thuộc A0000-100000. Để sử dụng UMB cần : Chỉ định DEVICE=EMM386.EXE NOEMS trong CONFIG.SYS 112 ( hoặc DEVICE=EMM386.EXE RAM ) Chỉ định DOS=UMB trong CONFIG.SYS Các UMB cũng được DOS quản lý giống như các memory block. Mỗi UMB có một UMCB đứng trước với cấu trúc như sau: Upper Memory Control Block (DOS 5+): Offset Size Description ====== ==== ===================================================== 00h BYTE 5Ah nếu là UMCB cuối, 4Dh cho các UMCB khác 01h WORD 0000h --> UMB chưa sử dụng 0008h --> UMB thuộc về DOS Khác --> PSP của chương trình sở hữu (owner) 03h WORD Kích thước của memory block tính bằng paragraph 05h 3 BYTEs Không sử dụng 08h 8 BYTEs block type: “UMB” nếu là khối đầu tiên “SM” nếu là khối cuối Để tránh các vùng nhớ dành riêng như video buffer, video bios ...,DOS tạo ra các UMCB ngay trước các vùng ấy và đánh dấu là thuộc về DOS. (Coi các vùng này như là các UMB đã dùng rồi). 18.4DOS SYSVAR Chức năng 52h của interrupt 21h cung cấp rất nhiều thông tin quan trọng bên trong DOS. Tuy nhiên đây là một chức năng nội (không công bố) do đó các cấu trúc đã cho có thể bị thay đổi trong các version kế tiếp của DOS. Input : AH = 52h Output : ES:BX -> Pointer to DOS SYSVAR TABLE (ES = DOS data segment) *DOS SYSVAR TABLE Offset Size Description ====== ===== ========================================================== 2 WORD segment của MCB đầu tiên 00h DWORD địa chỉ của Drive Parameter Block đầu tiên 04h DWORD địa chỉ của System File Table đầu tiên 08h DWORD địa chỉ của CLOCK$ device’s header hiện hành (device được load lên sau cùng có CLOCK bit được set) 0Ch DWORD địa chỉ của CON device’s header hiện hành (device được load lên sau cùng có STDIN bit được set) ---DOS 2.x--- 10h BYTE số lượng ổ đĩa (logic) trong hệ thống 11h WORD số byte tối đa trong một block của các block device 13h DWORD địa chỉ của disk buffer đầu tiên 17h 18 BYTEs NUL device driver header NUL luôn luôn là device đầu tiên trong chuỗi các device của DOS ---DOS 3.0--- 10h BYTE số lượng block device 11h WORD số byte tối đa trong một block của các block device 13h DWORD địa chỉ của disk buffer đầu tiên 17h DWORD địa chỉ của bảng thông tin các thư mục hiện hành 113 1Bh BYTE giá trị của LASTDRIVE (trong CONFIG.SYS) 1Ch DWORD địa chỉ của STRING= 20h WORD kích thước của vùng STRING (giá trị x trong STRING=x) 22h DWORD địa chỉ của FCB table 26h WORD giá trị y trong FCBS=x,y 28h 18 BYTEs NUL device driver header ---DOS 3.1-3.3--- 10h WORD số bytes tối đa trong một sector của block device 12h DWORD địa chỉ của disk buffer đầu tiên 16h DWORD địa chỉ của bảng thông tin các thư mục hiện hành 1Ah DWORD địa chỉ của FCB tables 1Eh WORD giá trị y trong FCBS=x,y 20h BYTE số lượng block device đã được cài đặt 21h BYTE số ổ đĩa logic (Cũng là số phần tử của bảng thông tin các thư mục hiện hành) 22h 18 BYTEs NUL device driver header 34h BYTE số lượng các ổ đĩa JOIN ---DOS 4.x--- 35h WORD 0 37h DWORD địa chỉ đầu vào của resident IFS utility functions 3Bh DWORD địa chỉ của chuỗi các IFS (installable file system) drivers 3Fh WORD giá trị x trong BUFFERS x,y 41h WORD giá trị y trong BUFFERS x,y 43h BYTE boot drive (1=A:) 44h BYTE flag: 01h to use DWORD moves (80386+), 00h otherwise 45h WORD kích thước extended memory (KB) ---DOS 5.0-6.0--- 37h DWORD địa chỉ của danh sách chương trình trong SETVER 3Bh WORD ?? 3Dh WORD segment của PSP của chương trình vừa được gọi (EXEC) (nếu DOS được nạp ở vùng nhớ cao HMA) 3Fh WORD giá trị x trong BUFFERS x,y 41h WORD giá trị y trong BUFFERS x,y 43h BYTE boot drive (1=A:) 44h BYTE 01h --> cho phép dùng DWORD moves (80386+) 45h WORD kích thước extended memory (KB) Cấu trúc đầu vào của STACKS code segment: Offset Size Description ====== ==== ==================================================== 00h WORD ??? 02h WORD Số lượng stack (giá trị x trong STACKS=x,y) 04h WORD Kích thước của stack control block array 06h WORD Kích thước của mỗi stack (giá trị y trong STACKS=x,y) 08h DWORD Địa chỉ của STACKS data segment Cấu trúc đầu vào của system file table và FCB table: 114 Offset Size Description ====== ==== ==================================================== 00h DWORD địa chỉ của file table kế tiếp (FFFFh nếu không có) 04h WORD số file handle hay FCB trong bảng 06h 36h bytes DOS 3.0 35h bytes DOS 3.1 - 3.3x 3Bh bytes DOS 4.0 - 6.0 Offset Size Description ====== ==== ============================================= 00h WORD số lượng file handle cùng tham chiếu đến file 02h WORD file open mode (see AH=3Dh) bit 15 set if this file opened via FCB 04h BYTE file attribute (see AX=4301h) 05h WORD device info word (see also AX=4400h) bit 15 set if remote file bit 14 set means do not set file date/time on closing bit 13 set if named pipe bit 12 set if no inherit bit 11 set if network spooler bit 7 set if device, clear if file (only if local) bits 6-0 as for AX=4400h 07h DWORD địa chỉ của device driver header (character device) hoặc DOS Drive Parameter Block 0Bh WORD cluster bắt đầu của file 0Dh WORD file time 0Fh WORD file date 11h DWORD file size 15h DWORD file pointer 19h ?? Cấu trúc đầu vào của bảng thông tin thư mục hiện hành (LASTDRIVE entries) Offset Size Description ====== ==== ==================================================== 00h 67 BYTEs Chuỗi ASCIZ dạng X:\PATH (Với X: là lastdrive) 43h ?? CHƯƠNG 19 : CHƯƠNG TRÌNH THƯỜNG TRÚ. CHƯƠNG 20 : TẬP TIN .BAT CỦA MSDOS CHƯƠNG 21 : THIẾT LẬP CẤU HÌNH CHO MSDOS 21.1 Tập tin CONFIG.SYS
File đính kèm:
- Giao_trinh_GTASM.pdf