Các table, stack, buffer (data)

Một phần của tài liệu Giáo trình TASM (Trang 110 - 114)

Từ địa chư 0050:0000 đên 0070:0000 là vùng communication cụa DOS. Trong đó DOS thiêt laơp moơt sô các câu trúc rieđng dùng lưu giữ các thođng tin veă heơ thông.

DOS kernel và các internal device cụa DOS được náp baĩt đaău từ 0070:0000. Boơ nhớ kê tiêp được chia thành nhieău khôi nôi tiêp nhau (Memory block).

Các memory block được quạn lý baỉng heơ thông các MCB (Memory Control Block). ... | |--- | MCB | |--- Memory | Block | |--- | MCB | |--- Memory | Block | |--- ... |

18.1 MEMORY CONTROL BLOCK:

Đứng trước moêi memory block là moơt MCB (khođng thuoơc veă memory block). Moêi MCB chiêm 16 bytes (hay moơ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 --> thuoơc veă 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 baỉng paragraph 05h 3 BYTEs Khođng sử dúng

---DOS 2.x,3.x---

08h 8 BYTEs Khođng sử dúng ---DOS 4+ ---

08h 8 BYTEs Teđn chương trình (nêu là PSP memory block) ---DOS 5+ ---

08h 2 BYTEs Nêu block thuoơc veă DOS (Block type = 0008) thì mang moơt trong hai giá trị:

“SC” --> System code, locked-out inter-UMB memory

Các MCB lieđn kêt các memory block lái thành moơt dađy xích (chain). Quá trình quạn lý boơ nhớ cụa DOS dựa hoàn toàn tređn các thođng tin lưu chứa trong các MCB. Nêu thođng tin trong moơt MCB khođng đúng dăn đên chuoêi các MCB bị rôi lốn, đeơ bạo đạm an toàn, DOS sẽ thođng báo Memory Alocation Error và yeđu caău khởi đoơng lái heơ thông.

Dưới DOS 3.1+, memory block đaău tieđn là DOS data segment,chứa các device, table, buffer ... được chư định trong config.sys

Dưới DOS 4+ memory block đaău tieđn được chia thành nhieău khôi con, moêi khôi có rieđng moơt Control Block với câu trúc như sau:

Offset Size Description

====== ==== ==================================================== 00h BYTE Kieơ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 baĩt đaău (adsbygoogle = window.adsbygoogle || []).push({});

03h WORD Kích thước cụa khôi con 05h 3 BYTEs Khođng sử dúng

08h 8 BYTEs Teđn cụa file chứa device (nêu kieơu là D hay I)

18.2HIMEM

HIMEM.SYS là trình quạn lý boơ nhớ mở roơng (extended memory) cụa DOS. Với các CPU 286 trở leđn boơ nhớ có theơ lớn hơn 1MB. HIMEM cho phép moơt sô ứng dúng cụa DOS như RAMDRIVE,SMARTDRV ...dùng phaăn mở roơng này. Tređn các PC dùng CPU 286 trở leđn, address bus là 24 hoaịc 32 bit. Các địa chư được táo thành từ segment và offset bị giới hán trong 20 bit đaă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 nhaơp theđm 64KB tính từ địa chư 100000h (tređ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ô gaĩng dùng tât cạ vùng nhớ này cho các internal device, system table, buffer... Baỉng cách này, DOS sẽ chư chiêm khoạng 15 KB trong vùng nhớ tieđu chuaơn.

18.3UPPER MEMORY CONTROL BLOCK

Từ DOS 5.0, với các CPU 80386 trở leđn, driver EMM386.EXE cho phép khai thác boơ nhớ moơt cách hữu hieơu hơn: vùng nhớ mở roơng (extend memory) có theơ được dùng đeơ giạ laơp cho boơ nhớ bành trướng (expand memory), đoăng thời cũng cho cho phép táo ra các UMB làm taíng theđm sô lượng boơ 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ớ thuoơc vùng nhớ mở roơng tređn PC (Ngoài 1MB quy ước, từ 100000h trở đi). Tređ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” thuoơc A0000-100000. Đeơ sử dúng UMB caăn :

( hoaị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. Moêi UMB có moơ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 thuoơc veă 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 baỉng paragraph 05h 3 BYTEs Khođng sử dúng

08h 8 BYTEs block type:

“UMB” nêu là khôi đaău tieđn

“SM” nêu là khôi cuôi

Đeơ tránh các vùng nhớ dành rieđ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à thuoơc veă DOS. (Coi các vùng này như là các UMB đã dùng roăi).

18.4DOS SYSVAR

Chức naíng 52h cụa interrupt 21h cung câp rât nhieău thođng tin quan trĩng beđn trong DOS. Tuy nhieđn đađy là moơt chức naíng noơi (khođng cođng bô) do đó các câu trúc đã cho có theơ bị thay đoơ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 đaău tieđn

00h DWORD địa chư cụa Drive Parameter Block đaău tieđn 04h DWORD địa chư cụa System File Table đaău tieđn

08h DWORD địa chư cụa CLOCK$ device’s header hieơn hành (device được load leđn sau cùng có CLOCK bit được set) 0Ch DWORD địa chư cụa CON device’s header hieơn hành (device được load leđn sau cùng có STDIN bit được set) ---DOS 2.x---

10h BYTE sô lượng oơ đĩa (logic) trong heơ thông

11h WORD sô byte tôi đa trong moơt block cụa các block device 13h DWORD địa chư cụa disk buffer đaău tieđn

17h 18 BYTEs NUL device driver header

NUL luođn luođn là device đaău tieđn trong chuoêi các device cụa DOS ---DOS 3.0--- (adsbygoogle = window.adsbygoogle || []).push({});

10h BYTE sô lượng block device

11h WORD sô byte tôi đa trong moơt block cụa các block device 13h DWORD địa chư cụa disk buffer đaău tieđn

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 moơt sector cụa block device 12h DWORD địa chư cụa disk buffer đaău tieđn

16h DWORD địa chư cụa bạng thođng tin các thư múc hieơ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 đaịt 21h BYTE sô oơ đĩa logic

(Cũng là sô phaăn tử cụa bạng thođng tin các thư múc hieơn hành) 22h 18 BYTEs NUL device driver header

34h BYTE sô lượng các oơ đĩa JOIN ---DOS 4.x---

35h WORD 0

37h DWORD địa chư đaău vào cụa resident IFS utility functions

3Bh DWORD địa chư cụa chuoê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 đaă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 moêi stack (giá trị y trong STACKS=x,y) 08h DWORD Địa chư cụa STACKS data segment

Offset Size Description

====== ==== ==================================================== 00h DWORD địa chư cụa file table kê tiêp (FFFFh nêu khođ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 (adsbygoogle = window.adsbygoogle || []).push({});

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 iffile (only if local) bits 6-0 as for AX=4400h

07h DWORD địa chư cụa device driver header (character device) hoaịc DOS Drive Parameter Block

0Bh WORD cluster baĩt đaă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 đaău vào cụa bạng thođng tin thư múc hieơn hành (LASTDRIVE entries) Offset Size Description

====== ==== ==================================================== 00h 67 BYTEs Chuoê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 : TAƠP TIN .BAT CỤA MSDOS

CHƯƠNG 21 : THIÊT LAƠP CÂU HÌNH CHO MSDOS

Một phần của tài liệu Giáo trình TASM (Trang 110 - 114)