色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

0x7C00的起源和原因

程序員cxuan ? 來源:程序員cxuan ? 2023-08-17 10:41 ? 次閱讀

這是一個很值得拿來探討一下的問題。

為什么 x86 中 BIOS 會把 MBR 放在 0x7c00 這個地址上呢?針對這個問題,你可能有兩個疑惑點:

我讀過所有的 x86 程序開發手冊,但是都沒有找到 0x7c00 這個魔數。

首先 0x7c00 這個魔數和 x86 CPU 無關,所以你在 intel 特定的 CPU 手冊里面找不到也能說得通。然后你會好奇,那是誰決定了這個數字?

0x7c00 是十進制的 32kib - 1024b,這個數字是什么意思?

其實任何人都可以決定這個數字,但是,問題的關鍵是為什么會選擇一個這樣中間的地址?

所以現在圍繞 0x7c00 就有兩個需要討論的問題

誰決定了 0x7c00 這個數字

0x7c00 = 32 kib - 1024b 是什么意思?

問題需要追溯到 IBM PC 5150 了,它是 x86 的祖先!

0x7C00 首次出現在 IBM PC 5150 ROM BIOS INT 19h 處理程序中

如果你了解過 x86 的歷史,那么你就會知道 IBM PC 5150是 x86(32位)IBM PC/AT 的祖先。這款電腦于 1981 年 8 月發布,采用了 8088(16)位和 16 kib RAM 的最低內存型號。BIOS 和 Microsoft BASIC 存儲在 ROM 中。

開機上電時,BIOS 會進行 POST 開機自檢,然后調用 INT 19h 中斷。在 INT 19 h 中斷例程中,BIOS 會檢查從哪里啟動操作系統,是從硬盤,軟盤還是固定磁盤。如果計算機有任何可用的磁盤,BIOS 就會將磁盤的第一個扇區 512 字節加載到 0x7c00 處。

所以你現在知道了為什么在 x86 文檔中找不到這個神奇的數字了,因為這個數字屬于 BIOS 規范。

0x7c00 的起源

SCP(一家公司)的 “86-DOS”(1980年)是 IBM PC DOS 1.0 的參考操作系統。86-DOS(最早叫 QDOS)是適用于 8086/8088 CPU 的 CP/M 兼容操作系統。在 1979 年,Digital Research Inc(數字搜索公司)還沒有開發出 8086/8088 CPU 的 CP/M 操作系統。

其實 Digital Research Inc 這家公司本來有機會能在計算機高速發展的年代占據先機,但是礙于其目光短淺最后敗給了微軟。

大家知道,當時 Paul Allen 和 Bill Gates 開發出來了 BASIC 解釋器并成立了微軟公司,1980年10月,IBM公司決定推出基于Intel 8086芯片的PC。它找到 Digital Research 公司,要求獲得授權使用 CP/M 系統。但是協議沒有談成。于是,IBM 又去找微軟公司,要求微軟為它提供操作系統。

當時,微軟沒有操作系統產品,但是 Bill Gates 知道 SCP 公司正在開發 QDOS。微軟支付2.5萬美元給SCP,獲得了 QDOS 的使用許可。

后來 Bill Gates 看見了巨大的商機,索性直接把 QDOS 買下來了,于是 QDOS 成為了微軟的財產,后來 QDOS 改名為 MS-DOS 。

這段完全是 cxuan 強行拓展的,與正文無關。

SCP 賣了兩塊 S-100 的板子,第一個是 8086 CPU 的板子,第二個是 "CPU Monitor"的板子。CPU Monitor 程序提供了 bootloader 引導加載器和 debugger 調試器。CPU Monitor 的 bootloader 會把 MBR 加載到 "0x200" ,而非 "0x7c00",1981年,IBM PC DOS 是 8086/8088 的下一個類似 CP/M 的操作系統。

所以,0x7c00 第一次出現在 IBM PC 5150 ROM BIOS 中,而 SCP 的 CPU Monitor 會將引導程序加載至 0x200 而非 0x7c00 處。

那么問題又來了。。。。。。

為什么 CPU Monitor 要把 bootloader 加載到 0x200 ?

關于 0x200 有三個原因:

8086 中斷向量使用 0x0 - 0x3FF 。

86 - DOS 會被加載到 0x400 處。

86 - DOS 并不會使用 0x200 - 0x3FF 之間的中斷向量。

這些原因意味著 0x200-0x3FF 需要保留,不能妨礙操作系統,無論 86-DOS 或用戶應用程序要加載到哪里。

所以 Tim Paterson(86 - DOS 的開發者)選擇了 0x200 這個地址作為 MBR 的加載地址。

誰決定了 0x7c00?

所以決定 0x7c00 這個地址的是 IBM PC 5150 BIOS 的開發團隊 (Dr. David Bradley)。如上所述,這個神奇的數字誕生于1981年,“IBM PC/at Compat” PC/BIOS 供應商沒有因為 BIOS 和操作系統的向后兼容性而改變這個值。

也不是 Intel(8086/8088)或者是微軟(操作系統廠商)決定的。

0x7c00 = 32 kib - 1024b 是什么意思?

IBM PC 5150 最小的內容模型只有 16 kib 的 RAM,所以你可能會有疑問。

最小內存型號僅僅 16 kib 能從軟盤加載操作系統嗎?BIOS 會將 MBR 加載到 32 kib - 1024 b ,但是物理 RAM 顯然不夠。

這種情況顯然缺乏考慮,BM PC 5150 ROM BIOS 開發團隊的成員,David Bradley 博士說到:

DOS 1.0 都需要至少 32 kb,所以我們不用擔心嘗試以 16 kb 啟動。

BIOS 的開發者團隊決定使用 0x7c00 這個地址是因為下面幾個原因:

他們想要給 32 Kib 操作系統的加載留下足夠的空間。

8086/8088 使用 0x0 - 0x3FF 作為中斷向量地址,并且 BIOS 的數據區在這個地址后面。

boot 引導扇區是 512 字節,引導程序的堆棧/數據區域需要的空間要比 512 字節多。

因此,選擇 0x7C00,即 32 KiB的最后 1024B。

一旦操作系統加載并啟動,啟動扇區將永遠不會使用,直到電源重置。因此,操作系統和應用程序可以自由使用32 KiB 的最后1024B。

4325836e-3c92-11ee-ac96-dac502259ad0.png

說點人話:

我們可以來計算機一下內存空間的占用情況:

0x0 - 0x3FF 用來做中斷向量,所以只剩下 0x400 - 0x7FFF(32 kb) 可用。

為了把更多的內存空間給操作系統,MBR 就被放在了 32 Kib 的尾部,由于一個扇區占用 512 字節,MBR 本身也會產生數據,所以留給 MBR 和其數據區的空間就變為了 1024 字節。

于是 0x7FFF - 1024 + 1 = 0x7c00 。

這就是 0x7C00 的起源和原因,這個神奇的數字在 PC/AT Compat BIOS INT 19h 處理程序中存活了大約三十年。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10880

    瀏覽量

    212210
  • 計算機
    +關注

    關注

    19

    文章

    7520

    瀏覽量

    88221
  • intel
    +關注

    關注

    19

    文章

    3483

    瀏覽量

    186125
  • 操作系統
    +關注

    關注

    37

    文章

    6854

    瀏覽量

    123434
  • 中斷
    +關注

    關注

    5

    文章

    899

    瀏覽量

    41553

原文標題:0x7c00 的歷史根源

文章出處:【微信號:cxuangoodjob,微信公眾號:程序員cxuan】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    i2c地址范圍是0x000x07嗎

    在DVK板示意圖中,I2C(24LC256)AdvestSCAN僅3線可配置。所以我認為地址范圍是0x000x07。但是在SDK I2C ReMead示例中,地址總是設置為
    發表于 04-25 15:24

    NUC980網口接收MAC=0x01-0x0E-0xCF-0x00-0x00-0x00的問題求解

    NUC980的網口接收 0x01-0x0E-0xCF-0x00-0x00-0x00這類MAC地址時,為什么在MAC地址和協議類型之間插入 4字節數據 觀察發現是 0x81 00 00
    發表于 06-27 08:44

    ARM7_s3c44b0x

    ARM7 s3c44b0x,喜歡的朋友可以下載來學習。
    發表于 01-14 15:39 ?26次下載

    計算機啟動的細節與匯編Demo的拆解1

    。 ``` org 0x7c00 ;程序起始位07c00h ``` 此處的org是Origin的縮寫,意為起源位置、起始位置。
    的頭像 發表于 02-01 15:53 ?799次閱讀
    計算機啟動的細節與匯編Demo的拆解1

    計算機啟動的細節與匯編Demo的拆解2

    。 ``` org 0x7c00 ;程序起始位07c00h ``` 此處的org是Origin的縮寫,意為起源位置、起始位置。
    的頭像 發表于 02-01 15:53 ?600次閱讀
    計算機啟動的細節與匯編Demo的拆解2

    計算機啟動的細節與匯編Demo的拆解3

    。 ``` org 0x7c00 ;程序起始位07c00h ``` 此處的org是Origin的縮寫,意為起源位置、起始位置。
    的頭像 發表于 02-01 15:53 ?696次閱讀

    R0E521000EPB00 用戶手冊(Emulation Probe for R8C/1x and R8C/2x Series)

    R0E521000EPB00 用戶手冊 (Emulation Probe for R8C/1x and R8C/2x Series)
    發表于 04-10 18:37 ?0次下載
    R<b class='flag-5'>0E521000EPB00</b> 用戶手冊(Emulation Probe for R8<b class='flag-5'>C</b>/1<b class='flag-5'>x</b> and R8<b class='flag-5'>C</b>/2<b class='flag-5'>x</b> Series)

    UPD43256B-X 數據表(M11012EJ7V0DS00)

    UPD43256B-X 數據表 (M11012EJ7V0DS00)
    發表于 04-26 19:46 ?0次下載
    UPD43256B-<b class='flag-5'>X</b> 數據表(M11012EJ<b class='flag-5'>7V0DS00</b>)

    UPD444012A-X 數據表(M14464EJ7V0DS00)

    UPD444012A-X 數據表 (M14464EJ7V0DS00)
    發表于 05-05 19:46 ?0次下載
    UPD444012A-<b class='flag-5'>X</b> 數據表(M14464EJ<b class='flag-5'>7V0DS00</b>)

    UPD448012-X 數據表(M14466EJ7V0DS00)

    UPD448012-X 數據表 (M14466EJ7V0DS00)
    發表于 05-05 19:46 ?0次下載
    UPD448012-<b class='flag-5'>X</b> 數據表(M14466EJ<b class='flag-5'>7V0DS00</b>)

    R7F0C30x, R7F0C31x 用戶手冊: 硬件

    R7F0C30x, R7F0C31x 用戶手冊: 硬件
    發表于 05-15 20:26 ?0次下載
    R<b class='flag-5'>7F0C30x</b>, R<b class='flag-5'>7F0C31x</b> 用戶手冊: 硬件

    UPD444012A-X 數據表(M14464EJ7V0DS00)

    UPD444012A-X 數據表 (M14464EJ7V0DS00)
    發表于 06-26 19:38 ?0次下載
    UPD444012A-<b class='flag-5'>X</b> 數據表(M14464EJ<b class='flag-5'>7V0DS00</b>)

    UPD448012-X 數據表(M14466EJ7V0DS00)

    UPD448012-X 數據表 (M14466EJ7V0DS00)
    發表于 06-26 19:38 ?0次下載
    UPD448012-<b class='flag-5'>X</b> 數據表(M14466EJ<b class='flag-5'>7V0DS00</b>)

    R7F0C30x, R7F0C31x 用戶手冊: 硬件

    R7F0C30x, R7F0C31x 用戶手冊: 硬件
    發表于 07-12 19:19 ?0次下載
    R<b class='flag-5'>7F0C30x</b>, R<b class='flag-5'>7F0C31x</b> 用戶手冊: 硬件

    R0E521000EPB00 用戶手冊(Emulation Probe for R8C/1x and R8C/2x Series)

    R0E521000EPB00 用戶手冊 (Emulation Probe for R8C/1x and R8C/2x Series)
    發表于 07-14 19:15 ?0次下載
    R<b class='flag-5'>0E521000EPB00</b> 用戶手冊(Emulation Probe for R8<b class='flag-5'>C</b>/1<b class='flag-5'>x</b> and R8<b class='flag-5'>C</b>/2<b class='flag-5'>x</b> Series)
    主站蜘蛛池模板: 久9视频这里只有精品123| 一起碰一起噜一起草视频| 国产成人免费| 曰本少妇高潮久久久久久| 少妇伦子伦情品无吗| 两个女人互添下身高潮自视频| 国产成人在线视频| 99精品视频一区在线视频免费观看 | 河南老太XXXXXHD| WWW国产亚洲精品久久| 伊人久久电影院| 亚洲AV國產国产久青草| 日本高清加勒比| 免费久久狼人香蕉网| 精品欧美小视频在线观看| 国产h视频在线观看网站免费| 97草碰在线视频免费| 亚洲最大成人| 无码国产精品高潮久久9 | 欧美精品中文字幕亚洲专区 | 人人碰国产免费线观看| proburn中文破解版下载| 亚洲一区在线观看无码欧美| 一起碰一起噜一起草视频| 欲香欲色天天综合和网| 131美女爱做视频午夜剧场| 98久久人妻少妇激情啪啪| vivoe另类| 国产精品VIDEOSSEX久久发布| 国产精品无码亚洲精品| 果冻传媒在线观看进入窗口| 久久6699精品国产人妻| 久久视频精品38在线播放| 暖暖在线观看播放视频| 日本无卡无吗在线| 视频一区在线免费观看| 亚洲国产AV精品卡一卡二| 一本到2019线观看| 九九九精品国产在线| 国产婷婷综合在线视频中文| 国产精品久久久久久久人热|