回覆列表
  • 1 # 使用者4626971672798

    這個問題好複雜的,,,大學中需要學好幾門課才能完整回答這個問題。我在這大致提幾個相關的知識點,零零碎碎地也算是回答以下這個問題。(我也沒有這個能力把這個問題完整而又體系化地解釋清楚)

    CPU不能直接識別並執行高階語言(比如C語言)寫成的程式碼。這裡的“直接”就是不依靠專門的軟體就能完成的意思。任何高階語言程式碼必須經過某個複雜的軟體(編譯器、直譯器)的處理才能執行。CPU能夠直接識別的程式是由一條一條指令組成的。每一條指令都對應一個CPU的一個基本操作,這些操作實際上都很基礎,比如更改某個暫存器的值、讓兩個暫存器中的數字相加。指令在不同CPU上的結構不一樣,有時候不同CPU之間沒辦法互相識別對方的指令。但高階語言不存在這個問題,高階語言的程式碼並不直接操縱CPU。對於指令,透過純粹的電路是可以完成識別的,畢竟它在結構上比較簡單,而且也不太需要考慮上下文。不過似乎也可以將指令進一步翻譯成微指令、微程式,這一部分我還沒學完,不敢亂說,不過微指令的識別肯定是靠純電路完成的。機器語言(CPU可以直接識別的語言)不存在“變數”這個概念,它只能操作記憶體和暫存器(CPU內部的幾個暫存電路,數量很有限)。變數這個概念在實現的時候通常是將之對應於某個暫存器或者某一片記憶體。CPU提供了一系列指令來方便程式設計師維護一個叫“棧”的資料結構。棧位於記憶體當中,棧頂和棧底都儲存在特殊的暫存器當中,CPU可以隨時將資料壓棧或者出棧。這個“資料”的含義實際上比較寬泛,它可以是一個數字、字元,也可以是CPU的執行狀態。CPU可以將某一刻的執行狀態壓棧,然後跳轉到其他地方執行一段程式,然後出棧恢復之前的執行狀態,這就實現了函式的呼叫。沒錯,CPU也不太認識什麼叫做“函式”,不過將執行狀態壓棧以及恢復執行狀態都有專門的指令,一般就把它們成為”子程式呼叫指令“和“返回指令”。對於“區域性變數”,CPU連“變數”都不認識,所以區域性變數什麼的也不存在了。不過這玩意可以依靠棧來實現,透過壓棧就可以隨時分配一個記憶體,出棧就可以認為這個記憶體區域不再被使用。配合剛才說過的“函式”呼叫的實現方法,這種依靠壓棧分配出的記憶體一定只能被當前正在執行的函式使用。因為函式呼叫前,這片記憶體還沒有被分配,返回後這片記憶體也不再使用了。

  • 中秋節和大豐收的關聯?
  • 求電影《亂世佳人》內容介紹?