從零開(kāi)發(fā)操作系統(tǒng)-關(guān)于 0x7c00 地址

你好获高,我是 shengjk1船响,多年大廠(chǎng)經(jīng)驗(yàn)躬拢,努力構(gòu)建 通俗易懂的、好玩的編程語(yǔ)言教程见间。 歡迎關(guān)注聊闯!你會(huì)有如下收益:

  1. 了解大廠(chǎng)經(jīng)驗(yàn)
  2. 擁有和大廠(chǎng)相匹配的技術(shù)等

希望看什么,評(píng)論或者私信告訴我米诉!

一菱蔬、背景

其實(shí)也沒(méi)有啥背景。
最主要的原因就像 《30天自制操作系統(tǒng)》一書(shū)作者說(shuō)的那樣史侣,寫(xiě)一個(gè)操作系統(tǒng)拴泌,僅僅想想就是一件特別有趣的事情呢。一兩年前曾經(jīng)入手開(kāi)始寫(xiě)過(guò)惊橱,但慢慢的就不了了之了◎礁現(xiàn)在又有這個(gè)想法了,準(zhǔn)備一直干下去税朴,最終寫(xiě)一個(gè)操作系統(tǒng)出來(lái)回季,算是程序員生涯的一份禮物。

其次的原因掉房,是因?yàn)槲乙舱J(rèn)為未來(lái)初級(jí)程序員的崗位會(huì)越來(lái)越少茧跋,借助 LLM 人人都是初級(jí)程序員可能會(huì)變成現(xiàn)實(shí)。這個(gè)時(shí)候?qū)I(yè)性和底層就會(huì)越來(lái)越重要

二卓囚、 0x7c00

從零開(kāi)發(fā)操作系統(tǒng)-第二天匯編語(yǔ)言瘾杭、BIOS以及Makefile介紹 這篇文章中,我們提到了 0x7c00 這個(gè)地址中說(shuō)了哪亿,這是IMB大叔們規(guī)定的粥烁。但我依然有很多問(wèn)題,因?yàn)镃PU要想從這個(gè)執(zhí)行蝇棉,PC寄存器必須設(shè)置為 0x7c00 才可以讨阻,但我們上篇文章從未設(shè)置過(guò) PC,滿(mǎn)滿(mǎn)的大問(wèn)號(hào)篡殷,這也帶來(lái)了一系列的問(wèn)題钝吮。

要想解決,就不得不從點(diǎn)擊開(kāi)機(jī)鍵說(shuō)起。當(dāng)我們點(diǎn)擊電腦開(kāi)機(jī)鍵的時(shí)候

在計(jì)算機(jī)啟動(dòng)過(guò)程中奇瘦,CPU 和 BIOS 的啟動(dòng)順序是這樣的:

  1. 電源啟動(dòng)

    • 當(dāng)你按下電源按鈕時(shí)棘催,電源供應(yīng)器開(kāi)始向主板和 CPU 提供電壓。這個(gè)電源的引入觸發(fā)了CPU的硬件復(fù)位(reset)耳标。
  2. CPU 初始化

    • CPU 在接收到電源后會(huì)自動(dòng)初始化醇坝。這個(gè)初始化過(guò)程是硬件級(jí)別的,由 CPU 內(nèi)部的電路和微代碼控制次坡。CPU 會(huì)重置其內(nèi)部狀態(tài)呼猪,它會(huì)自動(dòng)將內(nèi)部狀態(tài)重置到一個(gè)預(yù)定義的初始狀態(tài),包括寄存器和指令指針砸琅。例如:將程序計(jì)數(shù)器(PC)設(shè)置到一個(gè)特定的啟動(dòng)地址宋距。

    • 在x86架構(gòu)中,這個(gè)啟動(dòng)地址被硬編碼為0xFFFFFFF0(對(duì)于現(xiàn)代處理器)或0xFFFF0(對(duì)于舊的16位x86系統(tǒng))明棍。這個(gè)地址是設(shè)計(jì)時(shí)就確定的乡革,是由硬件電路和微處理器設(shè)計(jì)決定的,這個(gè)初始地址是CPU的一個(gè)硬編碼的啟動(dòng)向量摊腋,用于確保在系統(tǒng)啟動(dòng)時(shí)能夠找到并執(zhí)行BIOS(或UEFI)固件。

    • 在早期的 x86 系統(tǒng)中嘁傀,物理內(nèi)存地址空間是 1MB(0x100000)兴蒸,而 BIOS 通常被映射在這個(gè)地址空間的高端,以避免與操作系統(tǒng)使用的內(nèi)存沖突细办。

  3. BIOS 執(zhí)行

    • CPU 初始化完成后橙凳,會(huì)從預(yù)設(shè)的固定內(nèi)存地址(通常是物理地址 0xFFFFFFF0 或 0xFFFF0)開(kāi)始執(zhí)行代碼。這個(gè)地址在 x86 架構(gòu)中是 BIOS 的 ROM 或 Flash 存儲(chǔ)器的映射地址
    • 這種映射地址是通過(guò)地址解碼邏輯和內(nèi)存映射硬件實(shí)現(xiàn)的笑撞,這些硬件在主板設(shè)計(jì)時(shí)就已經(jīng)確定
    • BIOS 存儲(chǔ)在主板上的非易失性存儲(chǔ)器中岛啸,它包含了一系列的指令和程序,用于在系統(tǒng)啟動(dòng)時(shí)進(jìn)行硬件檢測(cè)和初始化茴肥。
  4. BIOS 檢測(cè)硬件

    • BIOS 開(kāi)始執(zhí)行后坚踩,會(huì)進(jìn)行一系列的硬件檢測(cè),包括檢測(cè) CPU 類(lèi)型瓤狐、內(nèi)存大小瞬铸、硬盤(pán)、顯卡等础锐。
    • BIOS 會(huì)根據(jù)檢測(cè)到的硬件配置來(lái)初始化硬件設(shè)備嗓节,并設(shè)置相應(yīng)的配置參數(shù)。
  5. 引導(dǎo)過(guò)程

    • 在硬件檢測(cè)和初始化完成后皆警,BIOS 會(huì)查找可引導(dǎo)設(shè)備(如硬盤(pán)拦宣、軟盤(pán)、USB驅(qū)動(dòng)器等)。
    • BIOS 從可引導(dǎo)設(shè)備的第一個(gè)扇區(qū)(通常是512字節(jié))讀取數(shù)據(jù)鸵隧,并將其加載到內(nèi)存中的0x7C00地址绸罗。
  6. 跳轉(zhuǎn)到引導(dǎo)扇區(qū)

    • BIOS 會(huì)設(shè)置一個(gè)新的 CS:IP 組合,通常是將 CS 設(shè)置為 0xF000掰派,IP 設(shè)置為 0xFFF0从诲。這樣,CS:IP 的實(shí)際值就是 0xF000:FFF0靡羡,轉(zhuǎn)換為物理地址是 0xFFFFFFF0系洛。
    • 引導(dǎo)扇區(qū)的前幾個(gè)字節(jié)通常包含一個(gè)跳轉(zhuǎn)指令(如 JMP 0x7C00),這個(gè)指令會(huì)將 CPU 的 CS:IP 跳轉(zhuǎn)到 0x7C00 地址略步。
    • 在 x86 架構(gòu)的 CPU 中描扯,并沒(méi)有一個(gè)名為 "PC" 的寄存器。在 x86 架構(gòu)中趟薄,程序計(jì)數(shù)器(Program Counter)的功能是由 CS(代碼段寄存器)和 IP(指令指針寄存器)共同實(shí)現(xiàn)的绽诚。這種設(shè)計(jì)是由于 x86 架構(gòu)使用了分段內(nèi)存模型。
  7. 執(zhí)行引導(dǎo)扇區(qū)代碼

    • 從 0x7C00 地址開(kāi)始杭煎,引導(dǎo)扇區(qū)中的代碼開(kāi)始執(zhí)行恩够。這個(gè)代碼通常會(huì)初始化一些基本的硬件設(shè)置,然后加載操作系統(tǒng)或其他引導(dǎo)加載程序羡铲。

三蜂桶、進(jìn)一步解釋

從零開(kāi)發(fā)操作系統(tǒng)-第二天匯編語(yǔ)言、BIOS以及Makefile介紹 中的匯編也用到了 jump 命令

        ORG     0x7c00          
        JMP     entry

剛開(kāi)始也切,我一直不明白扑媚,為什么《30天自制操作系統(tǒng)》一書(shū)作者說(shuō) entry 的地址就是 0x7c00,現(xiàn)在明白了,因?yàn)槌绦虻难b載地址為 0x7c00雷恃,而 entry 又是的程序入口點(diǎn)疆股,所以它的地址為 0x7c00。這個(gè) JMP 也設(shè)置了 CPU 的PC寄存器地址為 0x7C00倒槐,后續(xù) CPU 會(huì)從這里開(kāi)始執(zhí)行旬痹。

四、總結(jié)

文章深入探討了計(jì)算機(jī)啟動(dòng)過(guò)程中CPU和BIOS的相互作用导犹,以及引導(dǎo)扇區(qū)在啟動(dòng)過(guò)程中的關(guān)鍵作用唱凯。作者通過(guò)解釋硬件復(fù)位、CPU初始化谎痢、BIOS執(zhí)行磕昼、硬件檢測(cè)、引導(dǎo)過(guò)程以及執(zhí)行引導(dǎo)扇區(qū)代碼等步驟节猿,為讀者提供了對(duì)操作系統(tǒng)啟動(dòng)過(guò)程以及 0x7c00 的全面理解票从。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漫雕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子峰鄙,更是在濱河造成了極大的恐慌浸间,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吟榴,死亡現(xiàn)場(chǎng)離奇詭異魁蒜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)吩翻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)兜看,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人狭瞎,你說(shuō)我怎么就攤上這事细移。” “怎么了熊锭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵弧轧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我碗殷,道長(zhǎng)精绎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任锌妻,我火速辦了婚禮捺典,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘从祝。我一直安慰自己,他們只是感情好引谜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布牍陌。 她就那樣靜靜地躺著,像睡著了一般员咽。 火紅的嫁衣襯著肌膚如雪毒涧。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天贝室,我揣著相機(jī)與錄音契讲,去河邊找鬼。 笑死滑频,一個(gè)胖子當(dāng)著我的面吹牛捡偏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播峡迷,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼银伟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼你虹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起彤避,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤傅物,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后琉预,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體董饰,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年圆米,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卒暂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榨咐,死狀恐怖介却,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情块茁,我是刑警寧澤齿坷,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站数焊,受9級(jí)特大地震影響永淌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜佩耳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一遂蛀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧干厚,春花似錦李滴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至挂捅,卻和暖如春芹助,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闲先。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工状土, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伺糠。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓蒙谓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親退盯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子彼乌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容