內(nèi)存管理機(jī)制與TC編譯模式.ppt
《內(nèi)存管理機(jī)制與TC編譯模式.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《內(nèi)存管理機(jī)制與TC編譯模式.ppt(23頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
2020 1 25 1 第八章內(nèi)存管理機(jī)制與TC編譯模式 寄存器和偽變量?jī)?nèi)存的尋址模式TC的編譯模式 2020 1 25 2 第一節(jié)寄存器和偽變量 寄存器是CPU中的部件 用來(lái)存儲(chǔ)數(shù)據(jù) 地址和指令 8086 8088 80286的CPU只有14個(gè)寄存器 都是16位寄存器其中AX BX CX DX每個(gè)都可以分為兩個(gè)8位寄存器來(lái)使用 2020 1 25 3 80386之后的CPU對(duì)前十個(gè)寄存器做了擴(kuò)充 32位 同時(shí)又增加了兩個(gè)寄存器FS和GS 如圖所示 TC只支持14個(gè)寄存器且認(rèn)為它們都是16位的 2020 1 25 4 程序中 有時(shí)候需要操作這些寄存器 為了能在TC中使用它們 TC定義了一些偽變量以對(duì)應(yīng)相應(yīng)的寄存器 AX 對(duì)應(yīng)寄存器AX AH 對(duì)應(yīng)寄存器AH AL 對(duì)應(yīng)寄存器AL BX 對(duì)應(yīng)寄存器BX BH 對(duì)應(yīng)寄存器BH BL 對(duì)應(yīng)寄存器BL CX 對(duì)應(yīng)寄存器CX 例如 若要將字符 A 置于AL中 則可用 AL A 若要將整數(shù)100置于AX中 則可用 AX 100 2020 1 25 5 第二節(jié)內(nèi)存的尋址模式 實(shí)模式尋址保護(hù)模式尋址默認(rèn)的段寄存器近程指針與遠(yuǎn)程指針與地址操作有關(guān)的幾個(gè)函數(shù) 宏 2020 1 25 6 一 內(nèi)存的實(shí)模式 8086 8088 80286的CPU都是16位的 對(duì)應(yīng)的數(shù)據(jù)總線 地址總線 控制總線也 應(yīng) 是16位 但16位的地址總線只能尋址65536個(gè)內(nèi)存單元 64K 顯然太小了 當(dāng)時(shí)認(rèn)為尋址能力達(dá)到1M就夠用了 故將地址總線設(shè)定成了20位 20位的地址不便用16位的CPU處理 因此當(dāng)時(shí)采用了一種將內(nèi)存分段的方法 來(lái)解決這個(gè)問(wèn)題 2020 1 25 7 從內(nèi)存的任意一個(gè) 地址能被16整除 的單元開(kāi)始 將該單元之后的共64K內(nèi)存劃為一個(gè) 段 之所以要求段的起點(diǎn)必須是16的倍數(shù) 是為了把段的首地址存入段寄存器中 只能存16位 在一個(gè)段內(nèi) 任意單元的地址都可以用一個(gè)相對(duì)于段起點(diǎn)的地址來(lái)表示 稱作偏移地址 偏移地址是一個(gè)16位的無(wú)符號(hào)整數(shù) 2020 1 25 8 如圖 段的起始地址是00030H 則段寄存器中存儲(chǔ)的是0003H 圖中00072單元的偏移地址是0042H段內(nèi)任意單元的地址都可以表示成 段地址 偏移地址 的形式 00072單元的地址可表示為 0003 0042段與段可以重疊 如圖所示另一段的基址00050H 此時(shí)00072H的地址又可表示為 0005 0022 2020 1 25 9 可見(jiàn) 同一個(gè)物理地址可有多種不同的表示法采用這種分段的方式使尋址能力達(dá)到了1M 但是這種尋址方式缺乏對(duì)內(nèi)存的有效保護(hù)為了區(qū)別后來(lái)的保護(hù)模式 將上述內(nèi)存分段尋址的方式稱作實(shí)地址模式或內(nèi)存的實(shí)模式 2020 1 25 10 二 內(nèi)存的保護(hù)模式 為了保護(hù)內(nèi)存 需要記錄段的首地址 段長(zhǎng)度 段的訪問(wèn)權(quán)限等信息 這些信息合起來(lái)是一個(gè)64位的數(shù)據(jù)結(jié)構(gòu) 段描述符顯然 段寄存器存儲(chǔ)不下這個(gè)段描述符解決方法 在內(nèi)存中開(kāi)辟一段區(qū)域 按順序存儲(chǔ)所有段的段描述符 組成一個(gè)段描述符表段寄存器中只存儲(chǔ)段描述符的索引 段選擇子 2020 1 25 11 三 默認(rèn)的段寄存器 CS 總是存儲(chǔ)代碼段的基址DS 總是存儲(chǔ)數(shù)據(jù)段的基址ES 總是存儲(chǔ)附加段的基址SS 總是存儲(chǔ)堆棧段的基址 2020 1 25 12 四 近程指針和遠(yuǎn)程指針 近程指針是一個(gè)16位的指針 用來(lái)在段內(nèi)尋址 近程指針在定義時(shí) 使用near關(guān)鍵字說(shuō)明 可以省略 如 intnear p 或int p p用于在數(shù)據(jù)段內(nèi)尋址 p存儲(chǔ)的是數(shù)據(jù)段內(nèi)的偏移地址 而數(shù)據(jù)段的首址固定在DS中 2020 1 25 13 四 近程指針和遠(yuǎn)程指針 近程指針的最大值只能到0 xffff 即65535 超過(guò)將出錯(cuò) 如 charnear p p charnear 0 xffff p printf p n p p是用十六進(jìn)制輸出地址其運(yùn)行結(jié)果是 0000因?yàn)?5535加1將產(chǎn)生進(jìn)位 丟棄 使p的16位都是0 這種現(xiàn)象稱作折回 2020 1 25 14 四 近程指針和遠(yuǎn)程指針 遠(yuǎn)程指針是一個(gè)32位的指針 用來(lái)尋址不同的段 其中高位的兩個(gè)字節(jié)存儲(chǔ)段值 低位的兩個(gè)字節(jié)存儲(chǔ)偏移地址 由于遠(yuǎn)程指針對(duì)應(yīng)的數(shù)據(jù)可以在不同的段 故數(shù)據(jù)段寄存器中的段基址可能會(huì)發(fā)生改變 遠(yuǎn)程指針定義時(shí)用far說(shuō)明 如 charfar p p charfar 0 x2A000002 對(duì)遠(yuǎn)程指針加減運(yùn)算 只對(duì)偏移地址進(jìn)行 段地址不參與運(yùn)算 故也會(huì)發(fā)生折回現(xiàn)象 2020 1 25 15 四 近程指針和遠(yuǎn)程指針 對(duì)于同一個(gè)物理地址 用 段地址 偏移地址 的方式表示時(shí) 可以有若干種形式 如物理地址1234H可以表示為 0000 1234 0001 1224 0002 1214 雖然這些地址表示的是同一物理地址 但如果對(duì)它們進(jìn)行比較 得出的結(jié)果是不相等 設(shè)遠(yuǎn)程指針p1 p2存儲(chǔ)的是同一物理地址 但段地址和偏移地址不同 則表達(dá)式p1 p2的值為0 因?yàn)橛?jì)算機(jī)是直接比較兩個(gè)指針變量中的32位二進(jìn)制數(shù) 而不是轉(zhuǎn)化為物理地址后再比較 2020 1 25 16 五 與地址操作有關(guān)的幾個(gè)函數(shù) TC在dos h中定義了幾個(gè)函數(shù) 實(shí)際是宏 用來(lái)處理段地址或偏移地址FP SEGFP OFFMK FPpeekb和peekpokeb和poke 2020 1 25 17 五 與地址操作有關(guān)的幾個(gè)函數(shù) 1 FP SEG功能 獲取遠(yuǎn)地址中的段值原型 unsignedFP SEG voidfar farptr 例8 1 include includeintmain charfar filename fpseg c printf 04x n FP SEG filename 0表示用0補(bǔ)足4位return0 2020 1 25 18 五 與地址操作有關(guān)的幾個(gè)函數(shù) 2 FP OFF功能 獲取遠(yuǎn)地址中的偏移地址原型 unsignedFP OFF voidfar farptr 例8 2 include includeintmain charfar str fpoff c printf 04x n FP OFF str return0 2020 1 25 19 五 與地址操作有關(guān)的幾個(gè)函數(shù) 3 MK FP功能 由段值和偏移地址組成一個(gè)遠(yuǎn)程指針 原型 voidfar MK FP unsignedseg unsignedoff 例8 3 主要程序段 charfar p unsignedseg off p MK FP 0 xb000 0 x20 seg FP SEG p off FP OFF p printf farp Fp seg 04X off 04X n p seg off 2020 1 25 20 五 與地址操作有關(guān)的幾個(gè)函數(shù) 4 peekb和peek功能 從給定的地址讀取一個(gè)字節(jié)或一個(gè)字原型 charpeekb unsignedseg unsignedoff intpeek unsignedseg unsignedoff 例如 charc s hello c peekb DS s printf c n c 輸出結(jié)果是 h 2020 1 25 21 五 與地址操作有關(guān)的幾個(gè)函數(shù) 5 pokeb和poke功能 向指定的位置寫(xiě)一個(gè)字節(jié)或一個(gè)字原型 voidpokeb unsignedseg unsignedoff charvalue voidpoke unsignedseg unsignedoff intvalue 例如 chars 10 inta 0 x0041 poke DS s a printf s n s 輸出結(jié)果是 A 2020 1 25 22 第三節(jié)TC的編譯模式 微模式 Tiny 小模式 Small 中模式 Medium 緊湊模式 Compact 大模式 Large 巨模式 Huge 2020 1 25 23 問(wèn)題 若要使寄存器AX存儲(chǔ)3 C中應(yīng)如何表達(dá) 實(shí)地址模式如何尋址 常用的段寄存器有哪些 分別存儲(chǔ)什么 什么是近程指針 遠(yuǎn)程指針 如何定義 使用時(shí)注意什么 如何從一個(gè)遠(yuǎn)程指針?lè)蛛x出段地址和偏移地址 如何由段地址和偏移地址得到一個(gè)遠(yuǎn)程指針 TC的編譯模式有哪些 適用于什么情況- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 內(nèi)存 管理機(jī)制 TC 編譯 模式
鏈接地址:http://m.italysoccerbets.com/p-5310214.html