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 .

pdf114 trang | Chuyên mục: Kiến Trúc Máy Tính | Chia sẻ: dkS00TYs | Lượt xem: 1830 | Lượt tải: 1download
Tóm tắt nội dung Giáo trình Asembly, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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:

  • pdfGiao_trinh_GTASM.pdf