我正在使用x86機器上的啓動加載器。啓動後的寄存器狀態
當BIOS將MBR的內容複製到0x7c00並跳轉到該地址時,寄存器內容是否有標準含義?寄存器是否有標準值?
我知道段寄存器通常設置爲0,但有時會是0x7c0。其他硬件寄存器呢?
我正在使用x86機器上的啓動加載器。啓動後的寄存器狀態
當BIOS將MBR的內容複製到0x7c00並跳轉到該地址時,寄存器內容是否有標準含義?寄存器是否有標準值?
我知道段寄存器通常設置爲0,但有時會是0x7c0。其他硬件寄存器呢?
這個早期執行環境是高度實現定義的,這意味着您的特定BIOS的實現。不要對寄存器的內容做任何假設。它們可能被初始化爲0,但它們也可能包含一個隨機值。
從OS dev Wiki,這是我得到的信息,當我跟我玩玩具OS的
最好的選擇是什麼都不要。如果他們有意義,當你需要他們提供的信息時,你會發現從另一端。
未定義,我相信嗎?我認爲這取決於主板和CPU,爲了您自己的利益,應視爲隨機。
您可以自己總是初始化他們開始用已知狀態。
最安全的賭注是假定未定義。
我知道唯一能夠很好地定義的是復位後立即處理器狀態。
因爲你可以找到記錄是在Intel's Software Developer's Manual第3卷第8章:標題爲表「處理器管理和初始化」「IA-32處理器狀態通電後,復位,或INIT」
總是假定未定義,否則如果嘗試移植架構,則會遇到不好的問題。
沒有什麼比移植代碼更痛苦的了,它假設所有未初始化的東西都將被設置爲零。