|
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 ;設(shè)置win386常駐區(qū)的基址
083C:00001AF1 MOV WORD PTR [0044],0280H ;設(shè)置win386常駐區(qū)的頁面數(shù)
083C:00001AF7 MOV DWORD PTR [0046],80280000H ;設(shè)置win386初始化區(qū)的基址
083C:00001B00 MOV WORD PTR [004A],0180H ;設(shè)置win386初始化區(qū)的頁面數(shù)
083C:0000271C PUSH SI ;建立一級頁目錄表
;入口參數(shù):EAX--控制V86內(nèi)存的二級頁表的物理地址
EBX--控制WIN386內(nèi)存的二級頁表的物理地址
ES:DI--一級頁表地址
....
083C:0000272F MOV ECX,[0040] ;WIN386常駐區(qū)的基址
083C:00002734 SHR ECX,16H ;對應(yīng)的一級索引,只有高10位有效,所以右移22位=16H
083C:00001D10 MOV ECX,[085C] ;分配的頁面對應(yīng)的虛擬地址
083C:00001D15 SUB ECX,80000000 ;win386區(qū)的開始地址是80000000
083C:00001D1C LES DI,[087C] ;ES:DI指向控制win386區(qū)的二級頁表
|
|