一步步编写操作系统 43 汇编语言和c语言的理解
也許有的同學喜歡用匯編語言來實現(xiàn)操作系統(tǒng),覺得用匯編來寫程序似乎更簡單直接,可控性比較強,有種“一切盡在掌握”的趕腳。而用c語言實現(xiàn)操作系統(tǒng)這件事,雖然輕松很多,但似乎隱約感覺到有些慌張。因為雖然c語言相對來說更接近于人的邏輯思維,但恰恰是這種優(yōu)越性,給一些好學的同學帶來了困擾,畢竟咱們是在寫底層的軟件,必須要隨心所欲地控制cpu,要時時刻刻知道cpu在干什么。而感覺上,c語言不能直接控制cpu,比如無法直接控制寄存器,這里面有太多的黑盒子,無法掌控的東西似乎有很多,不知道編譯器在后面是怎么將我的邏輯思維轉(zhuǎn)換成機器指令的。這種黑盒式的操作確實讓人覺得神秘又不放心。
不同語言應(yīng)用在不同的層級,各層級有不同的思維方式,c語言運用在更高的層級上,它的一行代碼相當于多行匯編語言代碼,因此c語言的語法對于匯編語言來說類似于一種需求。匯編語言相對來說運用在較低層級上,它是為完成宏觀需求的具體步驟,在程序語言層面,匯編語言可以認為是不能再細分的最基本的原子。應(yīng)用不同層級的語言,我們只要運用那個層級的思維即可。c語言和匯編語言的關(guān)系就像產(chǎn)品經(jīng)理和開發(fā)人員那樣,產(chǎn)品經(jīng)理在設(shè)計一款產(chǎn)品時,只需要提出需求,這是站在“高層”上的開發(fā),而開發(fā)人員要將需求轉(zhuǎn)換為具體的代碼,需要在微觀上細化那些“高層”的需求,對于這款產(chǎn)品來說,無論是產(chǎn)品經(jīng)理還是開發(fā)人員,他們都在自己的層級上開發(fā)。一個是以需求為粒度做開發(fā),另一個是以代碼為粒度做開發(fā),一個是在“高層上”思考提哪些需求,另一個是在“底層上”思考如何滿足需求。
匯編指令與機器指令幾乎是一對一的,即一名匯編代碼只對應(yīng)一句具體的機器碼,不會有更多對應(yīng)的選擇,所以可以認為匯編指令就是機器指令。c語言的編譯過程是先將c語言代碼轉(zhuǎn)換成匯編代碼,然后再將匯編代碼轉(zhuǎn)換成機器指令。所以用c語言寫出來的程序,最終是可以轉(zhuǎn)換成對應(yīng)的一句或多句匯編指令。它們的關(guān)系就好比出租車上的乘客和司機,乘客只要告訴司機想去哪里就行了,其它的工作由司機和車共同配合完成。比如乘客說要去北京大學南門,司機根據(jù)當前的位置計算相對路徑,比如先開車直行1公里,在路口處左轉(zhuǎn),再直行2公里后右轉(zhuǎn)彎就到達了北京大學南門。乘客要去北京大學南門的這個需求就相當于c語言代碼,這是上層需求。司機相當于編譯器,由它將客戶需求轉(zhuǎn)換成具體的實現(xiàn)步驟,比如轉(zhuǎn)換成踩油門直行、左轉(zhuǎn)方向盤拐彎、再踩油門直行、再右轉(zhuǎn)方向盤拐彎這四個駕駛操作,當然,司機只是發(fā)號施令,并不是司機在跑,真正把乘客帶到目的地的工作者是出租車。出租車相當于cpu,由它最終落實司機的駕駛操作,將乘客帶到目的地,司機的這些駕駛操作相當于機器指令。站在乘客的角度,它只是說了一句話,就讓汽車做了加油門、轉(zhuǎn)彎等多個微操作,這就是c和機器指令之間的關(guān)系。
不知道我這樣舉例子是否打消了您的疑慮,總之我們用c語言寫程序,一定要充分相信c編譯器的工作。也許有人曾經(jīng)想過,寫操作系統(tǒng)已經(jīng)是底層的事了,做底層的事就應(yīng)該用更底層的東西來實現(xiàn),必須用匯編語言或比匯編語言還要低層的東西。這種想法我非常理解,我學習之初也曾有過類似的猜想。當然,確實可以用更原始的東西來實現(xiàn)操作系統(tǒng),但那樣也更麻煩,需要極大的耐心和良好的體格,哈哈。語言只是個工具,對機器而言,它能接受的是機器指令,只要最終交給機器的是機器指令就成了。而c語言這種高級語言是可以被編譯成機器指令的,就是我們平時編譯出來的二進制文件,它里面都是二進制的機器指令,cpu處理起來完全沒有問題。選擇哪種語言,只是實現(xiàn)的途徑不同,最終還是匯總到機器指令那里。就像吃飯用筷子還是用勺子一樣,飯最終還是被送到了嘴里。如果您對此還是覺得很模糊,可以想想咱們平時炒菜的過程,一般炒菜時都要放醬油吧,醬油本身就是個高級的東西,它也是被其它的一些農(nóng)做物制作出來的(比如一般的醬油是用大豆制作的),咱們不也是直接拿來就用嗎,有哪位同學因不清楚醬油的制作過程而不敢用醬油啦。炒菜時加醬油和用c語言寫操作系統(tǒng)是同一個道理,都是以高級的東西為基礎(chǔ)來創(chuàng)建新的東西。
如果以上三段內(nèi)容并沒有解開您的疑惑也不要著急,這一切都會在今后的c語言編程中理解,由量變到質(zhì)變,您的問題自然就解決了。
本節(jié)內(nèi)容摘自《操作系統(tǒng)真象還原》,請大家支持正版。
總結(jié)
以上是生活随笔為你收集整理的一步步编写操作系统 43 汇编语言和c语言的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一图看懂iGame G-ONE Plus
- 下一篇: 一些关于ROS中move_base的理解