微機課設-啟動過程_第1頁
微機課設-啟動過程_第2頁
微機課設-啟動過程_第3頁
微機課設-啟動過程_第4頁
微機課設-啟動過程_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

課程設計(綜合實驗)報告(2023--2023年度第1學期)名稱:微機原理課程設計題目:微機啟動過程分析院系:控制與計算機工程學院班級:學號:學生姓名:指導教師:設計周數(shù):成績:日期:年月日一、課程設計(綜合實驗)的目的與要求分析安裝微軟操作系統(tǒng)的PC計算機啟動過程的兩個階段------硬盤識別及分區(qū)識別階段的兩段代碼的執(zhí)行過程。要求自己找一臺符合要求的微機,提取硬盤主引導記錄和分區(qū)引導記錄,采用DEBUG工具,通過分析給出正確的反匯編清單,加上注釋,給出框圖,說明道理。二、設計〔實驗〕正文計算機的啟動過程〔從翻開電源到操作系統(tǒng)啟動之前〕1、當電源開關按下時,電源開始向主板和其他設備供電,此時電壓并不穩(wěn)定,于是,當主板認為電壓并沒有到達CMOS中記錄的CPU的主頻所要求的電壓時,就會向CPU發(fā)出RESET信號〔即復位,不讓CPU進一步運行〕,不過僅一瞬間不穩(wěn)定的電壓就能到達符合要求的穩(wěn)定值,此時復位信號撤銷,CPU馬上從根本內存的BIOS段讀取一條跳轉指令,跳轉到BIOS的真正啟動代碼處,如此,系統(tǒng)BIOS啟動,此后的過程都由系統(tǒng)BIOS控制。2、系統(tǒng)BIOS啟動后會進行加電自檢POST〔PowerOnSelfRest〕。不過這個過程進行得很快,它主要是檢測關鍵設備〔如電源、CPU芯片、BIOS芯片、根本內存等電路是否存在以及供電情況是否良好。如果自檢出現(xiàn)了問題,系統(tǒng)喇叭會發(fā)出警報聲〔根據(jù)警報聲的長短和次數(shù)可以知道到底出現(xiàn)了什么問題〕。3、如果自檢通過,系統(tǒng)BIOS會查找顯卡BIOS,找到后會調用顯卡BIOS的初始化代碼,此時顯示器就開始顯示了〔這就是為什么自檢失敗只能靠發(fā)聲進行提醒了〕。顯卡BIOS會在屏幕上顯示顯卡的相關信息〔不過現(xiàn)在的筆記本似乎并不顯示這個〕。4、顯卡檢測成功后會進行其他設備的測試,通過后系統(tǒng)BIOS重新執(zhí)行自己的代碼,并顯示自己的啟動畫面,將自己的相關信息顯示在屏幕上,而后會進行內存測試〔這些在現(xiàn)在的計算機上也看不到了〕,僅僅是短暫出現(xiàn)系統(tǒng)BIOS設置頁面,此時就可以對系統(tǒng)BIOS進行需要的設置了,完成后會重新啟動。5、此后BIOS會檢測系統(tǒng)的標準硬件〔如硬盤、軟驅〔雖然現(xiàn)在很多計算機已沒有軟驅了〕串行和并行接口等〕檢測完成后會接著檢測即插即用設備,、,如果有的話就為該設備分配中斷、DMA通道和I/O端口等資源,到了這里,所有的設備都已經檢測完成了,老時機進行一次清屏并顯示一個系統(tǒng)配置表,如果和上次啟動相比出現(xiàn)了硬件變動,BIOS還會更新ESCD,即“ExtendedSystemConfigurationData〞〔擴展系統(tǒng)配置數(shù)據(jù)〕,它是系統(tǒng)BIOS用來與操作系統(tǒng)交換硬件配置信息的數(shù)據(jù),這些數(shù)據(jù)被存放在CMOS中?,F(xiàn)在的機器那么不再顯示這些了。6、當上面的所有步驟都順利進行以后,BIOS將執(zhí)行最后一項任務:按照用戶指定的啟動順序進行啟動〔即我們經常需要用到的設置系統(tǒng)從哪里啟動,一般默認是硬盤,如果需要安裝系統(tǒng),還會設置為光驅或USB設備〕,注意,這里是指的啟動順序,如果設置為從光驅啟動,而光驅中又沒有光盤的話,系統(tǒng)還是會接著從硬盤啟動的。微機啟動過程一覽表-A100XXXX:XXXXMOVAX,0201〔用功能號2讀1個扇區(qū)〕XXXX:XXXXMOVBX,1000〔把讀出的數(shù)據(jù)放入緩沖區(qū)的地址為CS:1000〕XXXX:XXXXMOVCX,0001〔讀0柱面,1扇區(qū)〕XXXX:XXXXMOVDX,0080〔指定第一物理盤的0磁頭〕XXXX:XXXXINT13XXXX:XXXXINT3XXXX:XXXX〔按回車鍵〕-G=100由于win7系統(tǒng)中這一方法并不適用,因此通過winhex軟件進行引導記錄的導出,以及w32dsm進行反匯編,從而得到引導記錄的匯編語言程序。0000-0088MasterBootRecord主引導程序主引導程序0089-01BD出錯信息數(shù)據(jù)區(qū)數(shù)據(jù)區(qū)01BE-01CD分區(qū)項1〔16字節(jié)〕分區(qū)表01CE-01DD分區(qū)項2〔16字節(jié)〕01DE-01ED分區(qū)項3〔16字節(jié)〕01EE-01FD分區(qū)項4〔16字節(jié)〕01FE55結束標志01FFAA三、課程設計〔綜合實驗〕總結或結論反匯編清單;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;設置棧SS:SP=0:7C00;0000:7C00xorax,ax0000:7C02movss,ax0000:7C04movsp,7C00h0000:7C07sti;;DS=ES=0;0000:7C08pushax0000:7C09popes0000:7C0Apushax0000:7C0Bpopds;將后面的代碼復制到低端內存,為加載;活動分區(qū)的引導扇區(qū)騰出空間,因為引導;扇區(qū)也必須加載到0:7C000000:7C0Ccld0000:7C0Dmovsi,7C1Bh0000:7C10movdi,61Bh0000:7C13pushax0000:7C14pushdi0000:7C15movcx,1E5h0000:7C18repemovsb;跳到低端內存的代碼繼續(xù)執(zhí)行0000:7C1Aretf;開始掃描分區(qū)表(PartitionTable),尋找活動分區(qū)0000:061Bmovbp,7BEh;600h+1BEh,分區(qū)表起始偏移為1BEh0000:061Emovcl,4;分區(qū)表中有4個分區(qū)表項loc_620:0000:0620cmp[bp+0],ch;是活動分區(qū)嗎?(此時ch中的值為0)0000:0623jlloc_62E;活動分區(qū)的標志是80h,如果解釋成有符號數(shù),那么小于00000:0625jnzloc_63A;引導標志的合法值只能是0和80h,其它的值那么出錯0000:0627addbp,10h;指向下一個表項(每一個表項的長度為10h字節(jié))0000:062Alooploc_620;依次掃描所有分區(qū)表項;沒有發(fā)現(xiàn)活動分區(qū),無法啟動OS,按照標準調用Int18h;早期的BIOS的Int18h中斷效勞程序就是啟動ROM-Basic,;現(xiàn)在的BIOS一般是打印錯誤信息0000:062Cint18h;找到活動分區(qū)后,還要檢查剩余分區(qū)的啟動標志是否為0;不允許存在多個活動分區(qū)loc_62E:0000:062Emovsi,bploc_630:0000:0630addsi,10h;下一個分區(qū)表項0000:0633deccx0000:0634jzloc_64F;所以剩余分區(qū)都掃描完0000:0636cmp[si],ch;啟動標志是否為0?0000:0638jzloc_630;是那么合法,檢查下一分區(qū);分區(qū)啟動標志不合法,打印錯誤信息;"Invalidpartitiontable"loc_63A:0000:063Amoval,byte_7B5loc_63D:0000:063Dmovah,70000:063Fmovsi,axloc_641:0000:0641lodsb0000:0642loc_642:0000:0642cmpal,00000:0644jzloc_642;打印完錯誤信息后,進入死循環(huán)0000:0646movbx,70000:0649movah,0Eh0000:064Bint10h;調用Int10h顯示一個字符0000:064Djmpshortloc_641;開始加載活動分區(qū)的引導扇區(qū)loc_64F:;將一個標志的初始值清0。這個標志表示是否嘗試過備份的引導扇區(qū);[bp+10h]的字節(jié)肯定是沒用的空間0000:064Fmov[bp+10h],cl0000:0652callsub_69B0000:0655jnbloc_681loc_657:0000:0657incbyteptr[bp+10h];標志已經嘗試過加載備份的引導扇區(qū);如果活動分區(qū)是FAT32分區(qū),嘗試加載備份的引導扇區(qū)0000:065Acmpbyteptr[bp+4],0Bh;FAT320000:065Ejzloc_66B0000:0660cmpbyteptr[bp+4],0Ch;FAT32(需用擴展Int13h訪問)0000:0664jzloc_66B;加載引導扇區(qū)失敗,顯示錯誤信息;"Errorloadingoperatingsystem"0000:0666moval,byte_7B60000:0669jnzloc_63Dloc_66B:;FAT32的備份引導扇區(qū)號=引導扇區(qū)號+60000:066Baddbyteptr[bp+2],60000:066Faddwordptr[bp+8],60000:0673adcwordptr[bp+0Ah],00000:0677callsub_69B0000:067Ajnbloc_681;連備份的引導扇區(qū)也壞了,就沒轍了!0000:067Cmoval,byte_7B60000:067Fjmpshortloc_63D;在把控制權交給引導扇區(qū)前,要先檢查引導扇區(qū)的簽名(signature);防止把控制權交給已經損壞的引導扇區(qū)0000:0681loc_681:0000:0681cmpwordptrds:[7DFEh],0AA55h;簽名就是扇區(qū)最后的2個字節(jié)0000:0687jzloc_694;引導扇區(qū)損壞,那么嘗試用備份引導扇區(qū)0000:0689cmpbyteptr[bp+10h],0;已經是備份的引導扇區(qū)?0000:068Djzloc_657;備份引導扇區(qū)也壞了,死翹翹0000:068Fmoval,byte_7B70000:0692jmpshortloc_63D;交權給引導扇區(qū),讓它去完成OS的引導0000:0694loc_694:0000:0694movdi,sp;di=sp=7C00h0000:0696pushds0000:0697pushdi0000:0698movsi,bp;把活動分區(qū)表項指針傳給引導扇區(qū)0000:069Aretf;跳到0:7C00;讀取引導扇區(qū)的子過程sub_69Bprocnear0000:069Bmovdi,5;磁盤I/O錯允許重試次數(shù)為5次0000:069Emovdl,[bp+0];分區(qū)的啟動標志其實就是硬盤號0000:06A1movah,80000:06A3int13h0000:06A5jbloc_6CA;如果取參數(shù)失敗,認為BIOS肯定不支持擴展Int13h;只好用傳統(tǒng)Int13h;計算用傳統(tǒng)Int13h能訪問的最大邏輯扇區(qū)號;計算公式為:(最大磁頭號+1)*每道扇區(qū)數(shù)*(最大磁道號+1);注意這個計算次序是有講究的,因為(最大磁頭號+1)*每道扇區(qū)數(shù);的結果可以用16位存放器就可以存放。如果先用磁道號來計算,;乘的結果就必須用兩個存放器來存放,導致第二步乘計算復雜化0000:06A7moval,cl0000:06A9andal,3Fh0000:06ABcbw;ax中為第道扇區(qū)數(shù)0000:06ACmovbl,dh0000:06AEmovbh,ah;bh=0,ah肯定為00000:06B0incbx0000:06B1mulbx;(最大磁頭號+1)*每道扇區(qū)數(shù)0000:06B3movdx,cx0000:06B5xchgdl,dh0000:06B7movcl,60000:06B9shrdh,cl;dx中為(最大磁道號+1)0000:06BBincdx0000:06BCmuldx;(最大磁頭號+1)*每道扇區(qū)數(shù)*(最大磁道號+1);判斷引導扇區(qū)是否可以用傳統(tǒng)Int13h來訪問;如果引導扇區(qū)的邏輯扇區(qū)號>=剛剛算出的扇區(qū)號,必須用擴展Int13h來讀取;否那么就用傳統(tǒng)Int13h來訪問;注意一下雙字數(shù)的比擬方法!0000:06BEcmp[bp+0Ah],dx0000:06C1jaloc_6E60000:06C3jbloc_6CA0000:06C5cmp[bp+8],ax0000:06C8jnbloc_6E60000:06CA;用傳統(tǒng)Int13h來讀引導扇區(qū)loc_6CA:0000:06CAmovax,201h0000:06CDmovbx,7C00h0000:06D0movcx,[bp+2]0000:06D3movdx,[bp+0]0000:06D6int13h0000:06D8jnblocret_72B;讀取失敗可以重試,試完規(guī)定的次數(shù)后還失敗就沒方法了0000:06DAdecdi0000:06DBjzlocret_72B;重試前重置一下磁盤系統(tǒng)0000:06DDxorah,ah0000:06DFmovdl,[bp+0]0000:06E2int13h0000:06E4jmpshortloc_6CA;檢查BIOS是否支持擴展Int13h0000:06E6loc_6E6:0000:06E6movdl,[bp+0]0000:06E9pusha0000:06EAmovbx,55AAh0000:06EDmovah,41h0000:06EFint13h0000:06F1jbloc_7290000:06F3cmpbx,0AA55h0000:06F7jnzloc_7290000:06F9testcl,1;必須支持Fixeddiskaccess這個功能子集0000:06FCjzloc_7290000:06FEpopa;擴展Int13h讀扇區(qū)0000:06FFloc_6FF:0000:06FFpusha;在棧中構造磁盤地址包(DiskAddressPacket)0000:0700push00000:0702push00000:0704pushwordptr[bp+0Ah]0000:0707pushwordptr[bp+8];要讀扇區(qū)的LBA地址(4個word)0000:070Apush00000:070Cpush7C00h;引導扇區(qū)讀到0:7C00h0000:070Fpush1;讀一個扇區(qū)0000:0711push10h;包長度16個字節(jié)0000:0713movah,42h0000:0715movsi,sp0000:0717int13h0000:0719popa;這里用了一個小技巧,一下子從棧中彈出8個word;(地址包剛好是8個word)0000:071Apopa;這才是真

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論