自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)
自己動手寫操作系統(tǒng)(開篇)
自己動手寫操作系統(tǒng)(字符顯示)
說明:Intel 8086 或者不同的處理器,開機寄存器數(shù)據(jù)可能不一樣,但是大致原理差不多了解過計算機啟動的同學肯定知道,當計算機啟動的時候 BIOS 會加載 MBR 數(shù)據(jù) 512 字節(jié)到 0x7c00 處。
為什么會加載到這個地方了?
這里給出參考鏈接:
英文參考鏈接:
https://www.glamenv-septzen.net/en/view/6中文參考鏈接:
http://www.ruanyifeng.com/blog/2015/09/0x7c00.html現(xiàn)在我們簡單了解一下,計算機開機加電過程到底是怎么一個樣子了?這里以 VirtualBox 6.1.6 虛擬軟件為例子:
VirtualBox 6.1.6 下載地址:
https://www.virtualbox.org/wiki/Downloadshttps://download.virtualbox.org/virtualbox/6.1.6/VirtualBox-6.1.6-137129-Win.exe安裝virtualbox出現(xiàn)2503、2502的錯誤提示解決方法: 右鍵點擊 選擇 以管理員身份運行
之后我們就可以看到這樣的效果了:
現(xiàn)在我們在:Command 輸入 r 回車就可以看到效果:
Welcome to the VirtualBox Debugger!Current VM is 09980000, CPU #0VBoxDbg> reax=00000000 ebx=00000000 ecx=00000000 edx=00000600 esi=00000000 edi=00000000eip=0000fff0 esp=00000000 ebp=00000000 iopl=0 nv up di pl nz na pe nccs=f000 ds=0000 es=0000 fs=0000 gs=0000 ss=0000 eflags=00000002f000:0000fff0 ea 5b e0 00 f0 jmp far 0f000h:0e05bhVBoxDbg>我們可以清晰的看到: eip = 0000fff0, cs=f000,( 對應的物理內存其實就是 FFFF0) 也就是開機加電的時候 cs 和 ip(eip) 設置為一個固定的值。 在內存 f000:0000fff0 處的內容為 ea 5b e0 00 f0 。, 距離內存最頂端只有 16 字節(jié)。8086 有 20 根地址線,所以最大尋找范圍為 1M的地址空間。
·
8086 內存布局
f000:0000fff0 ea 5b e0 00 f0 jmp far 0f000h:0e05bh ; ; 這里對應的是一條跳轉指令, 跳轉到物理內存為 FE05B 內存處; 這個地址還是 ROM BIOS 內存地址范圍。繼續(xù)執(zhí)行,直到通過調用; 中斷程序最終將 mbr 加載到 0x7c00處; 當然這里其中還干了很多其他的事情,比如搬數(shù)據(jù)到 0x00000 開始處。; 此時 CS:IP 對應為 F000: E05B ; 注意 jmp 會改變 cs 和 ip 的值中斷向量表:
參考來源:
http://www.bioscentral.com/misc/biosservices.htm中斷向量表
設置斷點繼續(xù)運行,就可以看到對應寄存器的值了
VBoxDbg> ba x 1 7c00Set access breakpoint 0 at 0000000000007c00VBoxDbg> dbgf event: Breakpoint 0! (raw)eax=0000aa55 ebx=00000000 ecx=00000001 edx=00000000 esi=00000000 edi=0000fff0eip=00007c00 esp=00007800 ebp=00000000 iopl=0 nv up ei pl zr na po nccs=0000 ds=0000 es=0000 fs=0000 gs=0000 ss=0000 eflags=002002460000:00007c00 eb 4e jmp +04eh (07c50h)VBoxDbg> u0000:00007c00 eb 4e jmp +04eh (07c50h)0000:00007c02 90 nop0000:00007c03 48 dec ax0000:00007c04 45 inc bp0000:00007c05 4c dec sp0000:00007c06 4c dec sp0000:00007c07 4f dec di0000:00007c08 49 dec cx0000:00007c09 50 push ax0000:00007c0a 4c dec spVBoxDbg>總結
以上是生活随笔為你收集整理的自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 添加python的系统路径_如何将项目路
- 下一篇: 和后台如何对接_业务系统如何对接第三方服