Tải bản đầy đủ (.docx) (9 trang)

Quản lý vùng nhớ và tổ chức, thi hành file dưới DOS

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (72.67 KB, 9 trang )

III. Quản lý vùng nhớ và Tổ chức, thi hành File dới
DOS.
1. Sơ đồ vùng nhớ dới DOS.
Vùng RAM nằm trong quyền điều khiển của DOS đợc chia thành hai
phần chính:
- Phần hệ điều hành:
Bắt đầu từ địa chỉ thấp nhất 00000, nghĩa là nó bao gồm cả bảng
vector ngắt, hệ điều hành (bao gồm các file hệ thống IO.SYS,
MSDOS.SYS, các device driver đợc khai báo trong config.sys và phần th-
ờng trú của COMMAND.COM.
Phần vùng nhớ của hệ điều hành này có kích thớc thay đổi tuỳ theo
Version và tuỳ theo số lợng các Device Driver.
- Phần chơng trình tạm thời:
Phần nhớ này còn đợc gọi là vùng nhớ hoạt động, là vùng nhớ ngay
sau vùng hệ điều hành và đạt đến địa chỉ cao nhất có thể. Vùng nhớ này đ-
ợc tổ chức thành các khối tạo thành chuỗi. Các file đợc tải lên và thi hành
trong vùng nhớ này, cho nên vùng nhớ này chỉ mang tính tạm thời.
Sơ đồ sau tóm tắt cấu trúc vùng nhớ:
Địa chỉ Mô tả chức năng vùng nhớ
0000:000
0
Bảng vector ngắt: 256 * 4 byte.
0040:000
0
Vùng dữ liệu của ROM BIOS.
0050:000
0
Vùng dữ liệu của DOS.
xxxx:000
0
Đoạn mã BIOS ở mức thấp của DOS.


xxxx:000
0
Bộ xử lý ngắt của DOS (Int 21h)
xxxx:000 Buffer DOS, các vùng dữ liệu, các bộ ĐKTB đã cài
0 đặt
xxxx:000
0
Phần thờng trú của COMMAND.COM (khoảng
4K) gồm các bộ xử lý ngắt Int 22h, Int 23h, Int
24h.
xxxx:000
0
Dữ liệu và các chơng trình thờng trú (TSR).
xxxx:000
0
Chơng trình ứng dụng hiện đang thực hiện.
xxxx:000
0
Phần tạm trú của COMMAND.COM bao gồm bộ
thông dịch lệnh, các lệnh nội trú,... Phần này sẽ đ-
ợc nạp lại nếu có chơng trình nào ghi lên vùng này.
A000:000
0
Vùng nhớ EGA-VGA cho một số Mode màn hình
nhất định.
B000:000
0
Vùng nhớ cho bộ điều hợp màn hình đơn sắc.
B800:000
0

Vùng nhớ màn hình CGA.
C800:000
0
Bắt đầu từ đây là vùng nhớ ROM (ngoại trú và nội
trú)
2. Một số chức năng liên quan đến vùng nhớ của DOS.
a. Cấp phát vùng nhớ.
Vào:
AH = 48h
BX = Kích thớc vùng nhớ cần cấp phát (tính theo paragraph).
Gọi Int 21h
Ra:
Nếu CF = 1, thì AX chứa mã lỗi và BX là số vùng nhớ tối đa còn
lại còn dùng đợc. Ngợc lại, nếu CF = 0 thì việc cấp phát
thành công và AX chính là segment của vùng nhớ mà DOS
đã cấp phát theo yêu cầu.
b. Giải phóng vùng nhớ.
Chức năng này dùng để yêu cầu DOS giải phóng vùng nhớ đã cấp phát
trớc đây mà bây giờ không còn sử dụng đến chúng. Khi chấm dứt một ch-
ơng trình do DOS tải và thi hành, quyền điều khiển đợc trả lại cho DOS,
khi đó chính DOS cũng dùng chức năng này để giải phóng vùng nhớ trớc
đây đã cấp phát cho chơng trình.
Vào:
AH = 49h
ES = Segment của vùng nhớ cần giải phóng
Ra:
Nếu cờ CF = 1 là có lỗi, khi đó AX chứa mã lỗi.
c. Điều chỉnh kích thớc vùng nhớ.
Vào:
AH = 4Ah

ES = Segment của khối vùng nhớ cần điều chỉnh
BX = Kích thớc yêu cầu điều chỉnh
Ra:
AX là mã lỗi nếu cờ CF =1, lúc đó BX là khối lớn nhất còn dùng
đợc.
3. Cấu trúc của MCB (Memory Control Block).
Nh chúng ta đã nói ở trên, phần vùng nhớ tạm thời đợc chia thành các khối
tạo thành chuỗi, mỗi khối đợc quản lý bằng một cấu trúc đầu khối gọi là MCB.
MCB có kích thớc 16 byte, đặt ngay ở đầu vùng nhớ mà nó quản lý,
cấu trúc của MCB nh sau:
Offse
t
Siz
e
Item Nội dung
+0 1 ID Byte nhận diện loại của MCB
+1 2 PSP PSP của MCB.
+3 2 Size Kích thớc vùng nhớ mà MCB quản lý.
+5 0B
h
Reseve
d
Dành riêng
+10h Khối vùng nhớ bắt đầu từ đây và chấm
dứt ở byte (Size*10h) tính từ đây.
Giá trị của các trờng trong cấu trúc trên có ý nghĩa nh sau:
- ID: Là byte nhận diện xem MCB này có phải là MCB cuối cùng của
chuỗi hay cha. nếu cha là cuối chuỗi, byte này có giá trị 4Dh, ngợc lại sẽ
có giá trị 5Ah.
- PSP: Cho biết vùng nhớ do MCB này quản lý hiện còn trống hay

đang đợc dùng cho chơng trình nào. Nếu giá trị là 0 thì cha có chơng trình
nào sử dụng, ngợc lại noc là giá trị PSP của chơng trình đã xin cấp phát
vùng nhớ này. Căn cứ vào giá trị trong PSP mà DOS biết đợc vùng nhớ nào
là của chơng trình vừa chấm dứt để giải phóng vùng nhớ đó.
- Size: Là kích thớc theo đoạn của khối vùng nhớ mà MCB quản lý.
Để xác định đợc MCB đầu tiên, dùng chức năng 52h của ngắt 21h.
Sau khi thực hiện chức năng này, ES:BX trỏ tới khối tham biến của DOS
mà trớc đó 2 byte (ở ES:[BX-2]) là giá trị segment của MCB đầu tiên. Các
MCB tiếp theo sẽ đợc tính bằng cách cộng kích thớc của khối MCB trớc nó
với 1.
Đoạn chơng trình sau minh họa cách duyệt qua các MCB:
mov ah,52h
int 21h
sub bx,2
mov ax,word ptr es:[bx]
mov es,ax ; es = đoạn của MCB đầu tiên
Next:
mov al,byte ptr es:[0] ; Lấy ID của MCB
cmp al,5Ah ; Là phần tử cuối?
je OK ; đúng, kết thúc
mov bx,word ptr es:[1] ; bx = PSP
mov ax,word ptr es:[3] ; ax = Size
call Print_MCB
mov dx,ax
mov ax,es
add ax,dx
inc ax
mov es,ax
jmp Next
OK:

call Print_MCB
int 20h
4. Quản lý và tổ chức thi hành File dới DOS.
a. Phân loại File.
File là một cách tổ chức dữ liệu trên đĩa để DOS quản lý. Căn cứ vào
mục đích và nội dung, File đợc phân ra thành hai loại chính:
- File dữ liệu: Dùng để chứa thông tin về một đối tợng. Dữ liệu có thể
ở dạng Text hoặc dạng nhị phân. Để truy xuất các thông tin nh vậy cần có
các chơng trình thi hành đợc truy xuất đến nó.
- File thi hành: Nội dung của nó là tập mã lệnh máy nhằm thi hành
một nhiệm vụ nào đó. Khi thi hành, đánh tên chơng trình tại dấu đợi lệnh
của DOS, hoặc dùng chức năng 4Bh của Int 21h. File thi hành có đuôi
.COM hoặc .EXE
b. Cách tổ chức thi hành File khả thi của DOS.

×