標(biāo)題: Windows 3.0的內(nèi)存空間分配--有點(diǎn)老,但有用 [打印本頁(yè)]

作者: 51黑er    時(shí)間: 2015-11-2 14:51
標(biāo)題: Windows 3.0的內(nèi)存空間分配--有點(diǎn)老,但有用
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 部分代碼(實(shí)模式)

083C:00001AE8 MOV DWORD PRT [0040],80000000H      ;設(shè)置win386常駐區(qū)的基址
083C:00001AF1 MOV WORD PTR [0044],0280H        ;設(shè)置win386常駐區(qū)的頁(yè)面數(shù)
083C:00001AF7 MOV DWORD PTR [0046],80280000H    ;設(shè)置win386初始化區(qū)的基址
083C:00001B00 MOV WORD PTR [004A],0180H        ;設(shè)置win386初始化區(qū)的頁(yè)面數(shù)   



083C:0000271C PUSH SI                ;建立一級(jí)頁(yè)目錄表
                        ;入口參數(shù):EAX--控制V86內(nèi)存的二級(jí)頁(yè)表的物理地址
                              EBX--控制WIN386內(nèi)存的二級(jí)頁(yè)表的物理地址
                              ES:DI--一級(jí)頁(yè)表地址
....
083C:0000272F MOV ECX,[0040]            ;WIN386常駐區(qū)的基址
083C:00002734 SHR ECX,16H            ;對(duì)應(yīng)的一級(jí)索引,只有高10位有效,所以右移22位=16H




083C:00001D10 MOV ECX,[085C]            ;分配的頁(yè)面對(duì)應(yīng)的虛擬地址
083C:00001D15 SUB ECX,80000000            ;win386區(qū)的開始地址是80000000
083C:00001D1C LES DI,[087C]            ;ES:DI指向控制win386區(qū)的二級(jí)頁(yè)表








歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1