微代碼和彙編語言的區別

我是寫微代碼的,當我告訴朋友我的職業的時候,他顯得很迷惑。他覺得微代碼就是彙編,兩者沒有區別。其實,兩者之間有着本質的區別。

的確,微代碼和彙編都是低級語言,但是微代碼比彙編更底層。微代碼和彙編都和硬件有着緊密的聯繫,但是對於同一產品系列的不同代產品來說,彙編可以完全相同,微代碼可能有着巨大的區別,因爲微代碼是完全依賴於芯片內部的硬件連接。

對於同樣一句C語言,在不同的處理器上會生成不同的彙編語言。每一條彙編語言的執行時間也許是一個或者兩個時鐘週期,甚至更多。微代碼和彙編的關係,就像C 與彙編的關係,也就是說一條彙編也許會生成一條或多條微代碼。所謂微代碼,或者微指令,是處理器內部最小的操作原語,控制着諸如門電路(gates)開關等專門動作,和組成一條指令的微操作的序列。例如,對於一個加法"ADD"的簡單動作,微代碼可以決定接受哪兩個寄存器或總線爲輸入,輸出到什麼總線或者寄存器裏,標誌寄存器要保存還是丟棄,根據條件進行跳轉或者直接執行下一條微代碼。一個內部只有8位寬的數據總線完全可以支持32位整數的彙編操作,就是因爲有微代碼。

微代碼原來只是用來開發計算機的邏輯控制。古老的CPU往往都是“硬連線”,每個機器指令(加法,移動)都是由電路實現,雖然有着高性能的優點,但隨着指令複雜度的增長,也帶來了研發和DEBUG的困難,以及電路的複雜性。微代碼的出現讓CPU的設計者可以通過寫一個微程序的方式來實現一條機器指令,而不是設計電路來實現它。在將來的開發設計過程中,微代碼可以很容易地改變,硬件電路卻不可更改,否則帶來的將是巨大的商業損失。這種靈活的CPU設計導致了今天日益複雜的指令集。

微代碼一般存儲在處理器的 ROM,也就是芯片在工廠裏生成的時候就被固化在裏面的微程序。它實現了一系列底層硬件操作,而用戶只要知道它外部的彙編接口和引腳情況以及寄存器即可,至於內部細節,對不起,這是商業機密。微代碼也可以存儲在處理器的RAM裏,一般是一些非核心內容,或者升級更新指令集,更多的是一些勘誤,也就是糾正 ROM裏的代碼錯誤。這也是爲什麼INTEL的芯片會有微代碼升級的內容。這些都是BOOT LOADER,也就是PC BIOS的任務。

巧妙地運用微代碼可以實現算法的優化和加速,較少訪問內存的次數。因爲對底層硬件的瞭解,可以在同一時鐘週期做盡量多的並行的硬件操作,從而加快程序的執行。一個處理器 的核心往往是加法器和乘法器,兩者是獨立的部件,如果能在同一時鐘週期同時操作加法和乘法,豈不是大大加快了執行速度嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章