Orange s學習筆記(一)

2021-07-12 05:10:22 字數 1217 閱讀 8215

偽彙編指令org

學習作業系統兩個多月以來,一直對org這個偽彙編指令似懂非懂,拿orange』s的乙個最簡單的引導扇區**來說

org 07c00h						;告訴編譯器程式載入到7c00處

mov ax,cs

mov ds,ax

mov es,ax

call dispstr ;呼叫字顯示字串例程

jmp $ ;無限迴圈

dispstr:

mov ax,bootmessage

mov bp,ax ;es:bp = 串位址

mov cx,16 ;cx = 串長度

mov ax,01301h ;ah = 13h,al = 01h

mov bx,000ch ;頁號為0(bh = 0) 黑底紅字(bl = 0ch,高亮)

mov dl,0

int 10h ;10h號中斷

retbootmessage: db "hello, os world!"

times 510-($-$$) db 0 ;填充剩下的空間,使生成的二進位制**恰好為512位元組

dw 0xaa55

這段**的org 07c00h指的是,這段程式將來要載入到偏移位址為07c00h的地方,所以在編譯器編譯時會將標號代表的相對位址(編譯後的程式**位址從0開始)+07c00h(org指明的位址值)作為編譯後標號所在位置的實際數值,ep:看第16行標號bootmessage,不考慮org,編譯後的二進位制**在檔案中位址的偏移為0x1e,加上org指定的位址值,則第8行指令編譯出來的bootmessage所佔空間儲存的數值應該是0x7c1e,用二進位制檔案檢視器檢視,如下圖:

其中的b8 1e 7c機器碼對應的就是第8行的mov ax,bootmessage指令。

如果我們去掉org這條指令編譯之後,得到的機器碼,如下圖:

可以看出其中表示的位址偏移值為0x001e。

org偽指令其實僅僅是個開始,在學習orange』s過程中問題很多,前前後後我看過很多遍的書,每次重看都有新的收穫,但是還有很多搞不明白的,所以想寫出來,既與大家分享了學習經驗也想獲得一些指點

orange s學習 記憶體 定址空間學習

參考資料 記憶體 記憶體是計算機中重要的部件之一,它是與cpu進行溝通的橋梁。計算機中所有程式的執行都是在記憶體中進行的,因此記憶體的效能對計算機的影響非常大。記憶體 memory 也被稱為記憶體儲器,其作用是用於暫時存放cpu中的運算資料,以及與硬碟等外部儲存器交換的資料。只要計算機在執行中,cp...

Orange s 乙個作業系統的實現之筆記1

orange s 乙個作業系統的實現 之筆記1 從今天開始,我們要自己設計乙個超簡陋的os了,主要的參考教材就是于淵的 orange s 乙個作業系統的實現 這是一本非常非常好的書!俗話說,工欲善其事,必先利其器,我們需要以下工具 bochs 執行我們的os的主要平台,這是乙個x86指令集模擬器,非...

orange s學習 第十章 exec函式

exec的語義很簡單,它將當前的程序映像替換成另乙個。也就是說,我們可以從硬碟上讀取另乙個可執行的檔案,用它替換掉剛剛被fork出來的子程序,於是被替換的子程序搖身一邊,就成了徹頭徹尾的新鮮程序了。execv 所做的其實只是一件事,那就是向mm提供最終供呼叫exec的程序使用的堆疊。我們知道,mai...