指令到底是什么?機器碼又是什么?


在初學C語言編程的時候,有這么一個概念——程序是由指令構成,若干條指令按照一定的順序排列,來完成某個特定的任務。
我就在想指令到底是什么?

網絡上說:“高級語言被翻譯成匯編指令,匯編指令又被轉換為可執行機器碼。”
那么,匯編指令到底是什么?
匯編里的mov,add,sub,到底是什么?
教材里說匯編指令就是機器碼,那機器碼又是什么?

我們都知道計算機是由硬件電路組成的,而基本的硬件電路,只能完成最簡單的功能。
這肯定不能滿足需求,於是人們把這些基本的硬件電路組合成復雜的電路,來實現復雜的功能。

——————————————————————————————————————————
假設我們有一塊復雜的電路,它只能完成“加”和“減”兩個功能,這兩個功能是由兩個單獨的部件實現,加法電路和減法電路。
要驅動電路工作,就必須給它一個電信號,加法的電信號與減法的電信號肯定不同。
  因為電路本身沒有智慧,如果信號相同,它無法區別到底使用哪一個部件。
  這兩個不同的信號就能實現兩個不同的功能。
要想實現更多的功能,比如乘法,除法,就往它身上上添加新的硬件電路。
最后添加完成的復雜電路,就叫做微體系結構。
回到當初的問題,指令到底是什么?
指令(機器碼)就是信號,不同的電信號就能驅動不同的硬件,來實現不同的功能。
許許多多各不相同的指令(機器碼),人們給它歸納匯總,就是指令集系統。

———————————————————————————————————————————

指令就是信號說起來蠻簡單。
機器碼在我們人類看來它就是個二進制數,又怎么變成信號了?
實際上在cpu內部,指令的具體執行還是挺麻煩的。
一條指令通常可以被分成兩個部分:操作碼   地址碼
計算機在執行一條指令的時候,常規步驟如下:
1.  從內存里取出指令;
2.   把該指令放到指令寄存器;
3.  cpu內部有一個硬件電路叫做譯碼器,它就負責把指令寄存器中的指令操作碼進行“翻譯”,翻譯結果交給操作控制器(硬件電路),控制器產生控制信號!
4.  指令寄存器中那條指令的地址碼,被送到地址寄存器;
到了第3步,指令到信號的轉換才真正完成。

所以硬件才是程序能夠運行的基礎。
計算機系統結構就是軟硬件的接口,人們在這個部分設置一系列的規范,硬件的開發者按照規范去實現硬件。
把規范的每一條指令都用邏輯電路去實現。
值得注意的是,每一條指令都有邏輯電路實現,這句話還可以細分。
有些指令它的邏輯電路屬於共用實現,也就是說好幾個邏輯電路配合起來完成該指令,這些邏輯電路也可以是另一條指令的組成部分。
有些指令它的邏輯電路屬於專用實現,比如x86的mmx或sse擴展指令,每一條mmx或sse指令都對應了專用的硬件電路。
很簡單就能想到——指令越多,硬件電路也越多越復雜。
這樣上層依賴於指令的高級語言,才能完成各種功能,如果沒有底層指令支持,程序是無法運行的。
所以在學習過程中,遇到一條指令,“為什么會有這個指令?”,“為什么指令是這個格式?”
諸如此類的問題,那是因為最初在計算機系統結構部分(分析+評測),被人為規定好的!
先有規范,再去實現硬件!
————————————————
版權聲明:本文為CSDN博主「dark_tone」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/dark_tone/article/details/52426886


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM