30天自制操作系統(tǒng)日志第2天_第1頁
30天自制操作系統(tǒng)日志第2天_第2頁
30天自制操作系統(tǒng)日志第2天_第3頁
30天自制操作系統(tǒng)日志第2天_第4頁
30天自制操作系統(tǒng)日志第2天_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)實驗日志學號201608010520姓名甘昆祿專業(yè)年級班級智能1601實驗日期208.09.29實驗項目第2天:匯編語言學習與Makefile入門一、實驗主要內(nèi)容1.首先下了一個文本編輯器,真的厲害,我們看看。HTML可以辨別和顯示C和C+肯定也行二進制的鏡像文件也可以打開修改,這里輸入字母二進制文件自動修改了,很可以,不過在第五行再加字母就會出錯。2.學寄存器和匯編語言誒我們學計算機的寄存器真的哪里都學過,每個課幾乎都重新提一遍,特別電路邏輯已經(jīng)很細致的講了結構,系統(tǒng)課講了CPU寄存器的用法。所以我覺得有點多余,不過鞏固下知識也可以。用個例子說寄存器,我們把計算機看做一個機器人,CP

2、U就是大腦,寄存器是大腦里的記憶單元,而內(nèi)存和硬盤對計算機來說,只是一個柜子,一個存儲東西(數(shù)據(jù))的大柜子,機器人只能進行數(shù)據(jù)處理,按照人的指令執(zhí)行。指令已經(jīng)固化在大腦CPU內(nèi)部,但數(shù)據(jù)存儲在柜子里,這個柜子分為許多小格,每個小格都編了一個號,第一個小格叫0號,第二個叫1號,以此類推,每個小格存儲一個字節(jié)。抽象來講,是一個一維的線性數(shù)組。一個小格是8bit一個字節(jié),2個小格是2個字節(jié),CPU可以操作1個,2個,4個,8個格子,比如AL(1),AX(2),EAX(4),RAX(8)。對CPU來說,內(nèi)存和硬盤就是一個(數(shù)字)地址而已。顯存,IO地址,U盤也是地址,存取內(nèi)存比寄存器慢很多,所以編寫程

3、序盡量用寄存器存數(shù),而不是內(nèi)存地址。CPU的記憶單元-寄存器很少,只有幾十上百個,每個寄存器都有一個名字,比如AX,BX,CX,DX,SP,BP,DI,DI等等,因為名正則言順。寄存器只是一個存儲單元,他只能存儲東西(數(shù)據(jù)),我們對他所做的所有操作只有存數(shù)據(jù)在里面,還有從中取出數(shù)據(jù)。MOV AX,100 就是把數(shù)據(jù)100存儲在AX寄存器中,MOV SS,AX 就是把AX中的數(shù)據(jù)取出來,并放到寄存器SS中。MOV指令對應一個機器指令01碼,處理器有一個專門的譯碼電路逐條把這些01編碼翻譯為各種控制信號,然后控制其內(nèi)部的電路完成一個個的運算或者是其它操作。M

4、OV AX,2000H;將16位數(shù)據(jù)2000H傳送到AX寄存器 MOV AL,20H;將8位數(shù)據(jù)20H傳送到AL寄存器 MOV AX,BX;將BX寄存器的16位數(shù)據(jù)傳送到AX寄存器 MOV AL,2000H;將2000H單元的內(nèi)容傳送到AL寄存器 需要注意的是: (1)兩個存儲單元之間不能直接傳送數(shù)據(jù),即:MOV指令只允許一個操作數(shù)在存儲器中。MOV SI,2000H;這是錯誤的 (2)MOV指令中立即數(shù)不能直接傳送給段寄存器(CS、DS、SS、ES)和IP;段寄存器之間不能直接傳送。MOV IP,2000 H ;這是錯誤的 (3)CS和IP不能作為目的操作數(shù)。MOV CS,AX ;這是錯誤的

5、 (4)MOV指令中立即數(shù)不能作目標操作數(shù)。MOV 2000H,SI ;這是錯誤的還還還講了add,CMP,JE等我就不講了。3.中斷誒嘿,這個也是學過的,可能不同系統(tǒng)對應的中斷號不同,但機制都是一樣的,無非就是通過I/O的硬中斷或系統(tǒng)的軟中斷讓CPU暫時停止當前工作,轉(zhuǎn)而去執(zhí)行對應中斷的程序,結束后繼續(xù)執(zhí)行原來的工作,這里軟中斷對應16號中斷函數(shù)。而這些中斷函數(shù)在出廠的時候就已經(jīng)寫在了BIOS(基本輸入輸出系統(tǒng))程序裝在了芯片里。電腦啟動后,CPU把BIOS程序調(diào)入內(nèi)存某個地址emmm是的4.簡述匯編程序作用效果主體如下:entry:MOVAX,0MOVSS,AXMOVSP,0x7c00MO

6、VDS,AXMOVES,AXMOVSI,msgputloop:MOVAL,SIADDSI,1CMPAL,0JEfinMOVAH,0x0eMOVBX,15INT0x10JMPputloopfin:HLTJMPfinmsg:DB0x0a, 0x0aDB"hello, world"DB0x0aDB0RESB0x7dfe-$DB0x55, 0xaa前面entry部分就是寄存器的初始化,把程序加載到地址0X7c00(IBM大叔設的),然后放msg(這里是一個數(shù)據(jù))地址到寄存器SI里,我們看到msg地址其實就是我們要開始輸出的內(nèi)容。首先是兩個換行,然后就到那個字符串,那具體怎么輸出看中

7、間putloop。這里是用INT中斷一個字符一個字符地輸出,所以還用到了判斷,當判斷對應的字符不是0時,就不斷的輸出,否則就跳到fin地址,這里的HLT就是作者說的停止,CPU停止工作。我們看,當msg地址不斷加1后會出現(xiàn)一個字符是0,誒符合停止輸出的條件,這時就跳到了HLT指令,若沒有I/O指令(鼠標電腦等),這時CPU是釋放的,挺好。那么helloworld就是這么打印出來的,學到這總算是明白了。5.Makefile入門可能作者覺得很多bat文件太煩?誒想想不對,確實程序員們要簡潔不然很容易弄亂的,這時候就需要聰明的批處理文件了。.Makefile入門-一個聰明的批處理文件 ip

8、l.bin : ipl.nas Makefile./z_tools/nask.exe ipl.nas ipl.bin ipl.lstMake ipl.bin;尋找后面兩個依賴文件,執(zhí)行匯編生成目標文件clean : -del ipl.bin -del ipl.lst ;刪除生成兩個文件Makefile就很方便,把很多文件匯聚成了一個,文件、操作都簡單了很多直接一個make run就行了而且也不怕什么錯誤,無論怎樣make img和make run都不會錯。二、遇到的問題及解決方法第二天

9、主要還是理解和知識點吧,總的操作上并沒有什么問題。1、 輸出顯示的時候有點困惑,沒有完全了解匯編代碼是,不知道輸出是怎樣的形式,是瞬間一次同時輸出,還是像數(shù)碼管掃描輸出。后來明白是一個字符一個字符的輸出,知道命令結束。解決方法:主要是CMP指令理解錯誤了,以為是AL里地址為0時跳轉(zhuǎn),后來經(jīng)老師提醒是對比對應的字符,當字符為0時跳轉(zhuǎn),我轉(zhuǎn)回去看msg地址內(nèi)容是看見0才恍然大悟。三、程序設計創(chuàng)新點1、為了確認我的猜測對不對,我對ipl.nas進行了修改,如下:這次我把CMP判斷變成了1,結果不僅輸出了helloworld,還輸出了我后面的內(nèi)容,直到比較到1.改為2后出現(xiàn)了亂碼,程序差點崩(下次不試了),證明猜想正確四、實驗心得體會總的來說這節(jié)對于有基礎的

溫馨提示

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

評論

0/150

提交評論