1. 程式人生 > >《30天自制作業系統》避坑排雷指南和命令大全

《30天自制作業系統》避坑排雷指南和命令大全

前言

        《30天自制作業系統》是日本Coder川合秀實先生的著作,對於想了解作業系統原理或者有志於底層開發的同學們好處多多。近幾日我開始閱讀這本著作,順便製作一個避坑排雷指南,防止在無用的事情上浪費時間,附帶收集一下常用命令,方便自己同時分享出來方便他人。

使用指南

        這篇文章的推薦使用方法是:發現書裡難懂的地方->根據頁碼檢視避坑排雷指南->檢視命令大全或知識點合集。

避坑排雷

坑點 頁碼 詳細描述
檔案路徑的連線符不正確 全域性 書裡的檔案路徑連線符多使用的是’/’而實際上本人在Win7系統中發現應該是’\’,但又有部分路徑確實應該是’/’,如果有錯就多試幾次吧!
檔案路徑中的’¥’無意義 全域性 書裡的檔案路徑很多都有’¥’這個字元,其實毫無意義,直接忽略掉即可,應該是印刷問題。
EDX、DX、DL到底什麼關係 P82 書裡對EDX、DX、DL之間的關係好像沒仔細講,特別是看到P82程式碼會比較懵,詳細解釋請參考知識點合集。
調色盤色號為什麼要除以4 P77、P79 注意寫入RGB顏色時都除以了4,我在網上搜了半天又想了好久也不知道為什麼,事實上不除以4完全可以正確執行,這讓我感到更加奇怪,為啥除以4和不除以4表示的顏色一樣?!明明色號都不一樣了啊喂!這個問題真的不知道怎麼回事,暫且擱置吧!看到一些人說除以4是一種亮度調整,我倒是沒看出有什麼區別。。。

彙編命令/語法大全

宣告常量(EQU)

        語法:常量名 EQU 數值
        說明:宣告一個常量,接下來可以用常量名指代該值,EQU是equals的縮寫。
        舉例:例如“COUNT EQU 1”相當於C語言裡“#define COUNT 1”的作用,接下來“MOV CX,COUNT”在編譯後就會直接變成“MOV CX,1”,這種宣告常量的方式是不佔據空間的。

組合語言和C語言聯合使用時的引數傳遞

        舉例:

    _function:
        MOV ECX,[ESP+4]
        MOV AL,[ESP+8
] MOV [ECX],AL RET

        彙編程式碼如上,除此函式主體內容之外,還需要寫GLOBAL指令與C語言函式連結,寫section分段提示劃分出程式碼段等等。這些內容參考書P62左右內容和《最簡單的彙編程式》即可。
        再看C程式碼

    void function(int addr, int data);

        如上,C程式碼中只需要加入這樣的一行函式宣告即可,編譯器會幫你在彙編程式碼原始檔中找到對應的函式主體。

        注意彙編程式碼的函式名必須是C程式碼中宣告的函式名在開頭加上一個’_’,這是規定啦。

        然後解釋一下引數傳遞,ESP是extended stack pointer的意思,也就是擴充套件棧指標,是傳入引數的地址變數(應該說跟傳入引數的所在地址有直接關係),引數的存放地址依次是:

        第一個引數的存放地址:ESP+4
        第二個引數的存放地址:ESP+8
        第三個引數的存放地址:ESP+12
        以下略…

        也就是說function的第一個引數addr的值被存在了ESP+4這個地址上,[ESP+4]就可以取到這個值啦,所以上面的彙編程式碼會有“MOV ECX,[ESP+4]”這樣的語句。

底層小知識合集

 EDX、DX、DL之間的關係

        stackOverflow上有人問過這個問題:點此連結,回答的非常好,其實DX就是指EDX的低16位,同理EDX也就是RDX的低32位,參見下面:

[76543210 76543210 76543210 76543210 76543210 76543210 76543210 76543210] bits
[                                  RDX                                  ]
                                    [                EDX                ]                 
                                                      [       DX        ]
                                                      [  DH    ][   DL  ]

資料推薦

        這裡推薦一些學習資料: