tft每日頭條

 > 科技

 > c語言和彙編語言是如何轉換的

c語言和彙編語言是如何轉換的

科技 更新时间:2024-09-12 21:20:24

c語言和彙編語言是如何轉換的(一步步編寫操作系統)1

也許有的同學喜歡用彙編語言來實現操作系統,覺得用彙編來寫程序似乎更簡單直接,可控性比較強,有種“一切盡在掌握”的趕腳。而用c語言實現操作系統這件事,雖然輕松很多,但似乎隐約感覺到有些慌張。因為雖然c語言相對來說更接近于人的邏輯思維,但恰恰是這種優越性,給一些好學的同學帶來了困擾,畢竟咱們是在寫底層的軟件,必須要随心所欲地控制cpu,要時時刻刻知道cpu在幹什麼。而感覺上,c語言不能直接控制cpu,比如無法直接控制寄存器,這裡面有太多的黑盒子,無法掌控的東西似乎有很多,不知道編譯器在後面是怎麼将我的邏輯思維轉換成機器指令的。這種黑盒式的操作确實讓人覺得神秘又不放心。

不同語言應用在不同的層級,各層級有不同的思維方式,c語言運用在更高的層級上,它的一行代碼相當于多行彙編語言代碼,因此c語言的語法對于彙編語言來說類似于一種需求。彙編語言相對來說運用在較低層級上,它是為完成宏觀需求的具體步驟,在程序語言層面,彙編語言可以認為是不能再細分的最基本的原子。應用不同層級的語言,我們隻要運用那個層級的思維即可。c語言和彙編語言的關系就像産品經理和開發人員那樣,産品經理在設計一款産品時,隻需要提出需求,這是站在“高層”上的開發,而開發人員要将需求轉換為具體的代碼,需要在微觀上細化那些“高層”的需求,對于這款産品來說,無論是産品經理還是開發人員,他們都在自己的層級上開發。一個是以需求為粒度做開發,另一個是以代碼為粒度做開發,一個是在“高層上”思考提哪些需求,另一個是在“底層上”思考如何滿足需求。

彙編指令與機器指令幾乎是一對一的,即一名彙編代碼隻對應一句具體的機器碼,不會有更多對應的選擇,所以可以認為彙編指令就是機器指令。c語言的編譯過程是先将c語言代碼轉換成彙編代碼,然後再将彙編代碼轉換成機器指令。所以用c語言寫出來的程序,最終是可以轉換成對應的一句或多句彙編指令。它們的關系就好比出租車上的乘客和司機,乘客隻要告訴司機想去哪裡就行了,其它的工作由司機和車共同配合完成。比如乘客說要去北京大學南門,司機根據當前的位置計算相對路徑,比如先開車直行1公裡,在路口處左轉,再直行2公裡後右轉彎就到達了北京大學南門。乘客要去北京大學南門的這個需求就相當于c語言代碼,這是上層需求。司機相當于編譯器,由它将客戶需求轉換成具體的實現步驟,比如轉換成踩油門直行、左轉方向盤拐彎、再踩油門直行、再右轉方向盤拐彎這四個駕駛操作,當然,司機隻是發号施令,并不是司機在跑,真正把乘客帶到目的地的工作者是出租車。出租車相當于cpu,由它最終落實司機的駕駛操作,将乘客帶到目的地,司機的這些駕駛操作相當于機器指令。站在乘客的角度,它隻是說了一句話,就讓汽車做了加油門、轉彎等多個微操作,這就是c和機器指令之間的關系。

不知道我這樣舉例子是否打消了您的疑慮,總之我們用c語言寫程序,一定要充分相信c編譯器的工作。也許有人曾經想過,寫操作系統已經是底層的事了,做底層的事就應該用更底層的東西來實現,必須用彙編語言或比彙編語言還要低層的東西。這種想法我非常理解,我學習之初也曾有過類似的猜想。當然,确實可以用更原始的東西來實現操作系統,但那樣也更麻煩,需要極大的耐心和良好的體格,哈哈。語言隻是個工具,對機器而言,它能接受的是機器指令,隻要最終交給機器的是機器指令就成了。而c語言這種高級語言是可以被編譯成機器指令的,就是我們平時編譯出來的二進制文件,它裡面都是二進制的機器指令,cpu處理起來完全沒有問題。選擇哪種語言,隻是實現的途徑不同,最終還是彙總到機器指令那裡。就像吃飯用筷子還是用勺子一樣,飯最終還是被送到了嘴裡。如果您對此還是覺得很模糊,可以想想咱們平時炒菜的過程,一般炒菜時都要放醬油吧,醬油本身就是個高級的東西,它也是被其它的一些農做物制作出來的(比如一般的醬油是用大豆制作的),咱們不也是直接拿來就用嗎,有哪位同學因不清楚醬油的制作過程而不敢用醬油啦。炒菜時加醬油和用c語言寫操作系統是同一個道理,都是以高級的東西為基礎來創建新的東西。

如果以上三段内容并沒有解開您的疑惑也不要着急,這一切都會在今後的c語言編程中理解,由量變到質變,您的問題自然就解決了。

本節内容摘自《操作系統真象還原》,請大家支持正版。

c語言和彙編語言是如何轉換的(一步步編寫操作系統)2

【再續】

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved