vmm.h
/*
* Address space (arena) boundaries
*/
#define MAXSYSTEMLADDR ((ULONG) 0xffbfffff) /* 4 gig - 4meg */
#define MINSYSTEMLADDR ((ULONG) 0xc0000000) /* 3 gig */
#define MAXSHAREDLADDR ((ULONG) 0xbfffffff)
#define MINSHAREDLADDR ((ULONG) 0x80000000) /* 2 gig */
#define MAXPRIVATELADDR ((ULONG) 0x7fffffff)
#define MINPRIVATELADDR ((ULONG) 0x00400000) /* 4 meg */
#define MAXDOSLADDR ((ULONG) 0x003fffff)
#define MINDOSLADDR ((ULONG) 0x00000000)
#define MAXSYSTEMPAGE (MAXSYSTEMLADDR >> PAGESHIFT)
#define MINSYSTEMPAGE (MINSYSTEMLADDR >> PAGESHIFT)
#define MAXSHAREDPAGE (MAXSHAREDLADDR >> PAGESHIFT)
#define MINSHAREDPAGE (MINSHAREDLADDR >> PAGESHIFT)
#define MAXPRIVATEPAGE (MAXPRIVATELADDR >> PAGESHIFT)
#define MINPRIVATEPAGE (MINPRIVATELADDR >> PAGESHIFT)
#define MAXDOSPAGE (MAXDOSLADDR >> PAGESHIFT)
#define MINDOSPAGE (MINDOSLADDR >> PAGESHIFT)
vmm.inc
/*
* Address space (arena) boundaries
*/
PAGESHIFT EQU 12
PAGESIZE EQU (1 SHL PAGESHIFT)
PAGEMASK EQU (PAGESIZE-1)
MAXSYSTEMLADDR EQU (0ffbfffffH)
MINSYSTEMLADDR EQU (0c0000000H)
MAXSHAREDLADDR EQU (0bfffffffH)
MINSHAREDLADDR EQU (80000000H)
MAXPRIVATELADDR EQU (7fffffffH)
MINPRIVATELADDR EQU (00400000H)
MAXDOSLADDR EQU (003fffffH)
MINDOSLADDR EQU (00000000H)
MAXSYSTEMPAGE EQU (MAXSYSTEMLADDR SHR PAGESHIFT)
MINSYSTEMPAGE EQU (MINSYSTEMLADDR SHR PAGESHIFT)
MAXSHAREDPAGE EQU (MAXSHAREDLADDR SHR PAGESHIFT)
MINSHAREDPAGE EQU (MINSHAREDLADDR SHR PAGESHIFT)
MAXPRIVATEPAGE EQU (MAXPRIVATELADDR SHR PAGESHIFT)
MINPRIVATEPAGE EQU (MINPRIVATELADDR SHR PAGESHIFT)
MAXDOSPAGE EQU (MAXDOSLADDR SHR PAGESHIFT)
MINDOSPAGE EQU (MINDOSLADDR SHR PAGESHIFT)
win386.exe 部分代碼(實模式)
083C:00001AE8 MOV DWORD PRT [0040],80000000H ;設置win386常駐區的基址
083C:00001AF1 MOV WORD PTR [0044],0280H ;設置win386常駐區的頁面數
083C:00001AF7 MOV DWORD PTR [0046],80280000H ;設置win386初始化區的基址
083C:00001B00 MOV WORD PTR [004A],0180H ;設置win386初始化區的頁面數
083C:0000271C PUSH SI ;建立一級頁目錄表
;入口參數:EAX--控制V86內存的二級頁表的物理地址
EBX--控制WIN386內存的二級頁表的物理地址
ES:DI--一級頁表地址
....
083C:0000272F MOV ECX,[0040] ;WIN386常駐區的基址
083C:00002734 SHR ECX,16H ;對應的一級索引,只有高10位有效,所以右移22位=16H
083C:00001D10 MOV ECX,[085C] ;分配的頁面對應的虛擬地址
083C:00001D15 SUB ECX,80000000 ;win386區的開始地址是80000000
083C:00001D1C LES DI,[087C] ;ES:DI指向控制win386區的二級頁表
|