找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2074|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

Windows 3.0的內(nèi)存空間分配--有點老,但有用

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:94349 發(fā)表于 2015-11-2 14:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
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ū)的二級頁表



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表