回覆列表
  • 1 # 使用者4232141002578

    其實如果只是想知道怎麼工作的還是很簡單的。硬體的話有幾個獨立的部分:

    計算器暫存器程式指標(PC)記憶體直譯器

    現在我們可以模擬一下計算機,來執行a = a + 1這一行程式碼。用匯編語言來寫的話就是 addi a, 1。

    編譯器首先會將這行程式碼翻譯為機器碼:

    我們假設 addi 對應的機器碼為10a 對應的暫存器為 0011 為常數000001

    所以我們得到的機器語言為 10 001 000001。這個過程看起來很複雜,但如果不考慮最佳化,亂序執行等功能實際上是一個簡單的一一對應功能。比如 sub 可能對應的是 01 等等。(有一點因為篇幅有限這裡就不細說了,命令addi的另一個功能是告訴直譯器我們的這一行程式怎麼“斷句”,但是我們現在可以假設命令只有一種“斷句”方法)

    這一串二進位制數字是存放在可執行記憶體中的。和一般的記憶體不同,這一塊記憶體是專門用來放程式的,有一個專門的PC指標。這個PC指標就是告訴CPU下一個要執行的命令在哪,cpu處理完命令時pc指標自動+1(具體操作後面會解釋)。現在假設pc指標正指著我們的程式碼 010 001 000001, 記憶體的這一行命令進入直譯器。

    直譯器也是一個一一對應電路,其中的“命令解釋”更為簡單是一個選擇電路(MUX)。如下圖所示

    我們的命令的前兩個bits 10 進入到了命令直譯器電路(X1 = 1, X0 = 0)打開了Y2 (Y2 = 1)。Y2 同時和一個“和門” AND 打開了 ADD的計算機(其他的計算器:儲存,載入等等則為關閉狀態)。接下來就是CPU最為重要的計算器了。

    現代的CPU可以直接計算加,減,乘,除和開根號等複雜運算。但最開始的計算器只有一個功能加法。減法的實現是把其中一個運算數用邏輯電路變為負數再加起來。乘法則是多次運算來解決。這個加法電路的實現原理是“xor門”電路,也就是相同為假。1 xor 1 = 0; 0 xor 0 = 0; 1 xor 0 = 1; 0 xor 1 = 1;這基本實現了加法功能,再用一個簡易的邏輯電路處理進位基本就成型了。

    現在我們有了計算器,還缺少用來計算的資料。和命令直譯器一樣,指令中的第二部分 001 對應著另外一個MUX電路,會使暫存器a開啟而其他暫存器關閉,這樣暫存器a的資料就進入到了計算器的輸入端。我們的命令的最後一部分為一個常數 000001,它會直接連線到計算器的另一個輸入端。

    計算機運算結束後,結果會更新 001 對應的 a暫存器。這行程式也算是執行完了。這時候pc指標透過專門為pc指標用的計算機+1。(pc指標其實也是放在一個暫存器中)下一行程式進入直譯器以此類推。

    最後想說的就是這裡的計算器不但會被用來計算資料,更多的會被用來計算記憶體地址實現載入,儲存的功能。

  • 2 # 使用者2562339713923

    計數器是簡單的數字計算,是簡單的晶片中人為的輸入了彙編程式來透過對指示鍵(計數器上的1.2.3.4.鍵)的2進位制0.1識別,可以說是識別器.計算器裡面是一塊已經程式設計好了的數位電路.它先判斷出並儲存外部的按鍵訊號(就是你按下哪個鍵),然後根據這些訊號進行運算,再輸出訊號到顯示屏上. 計算機工作原理: 如果想叫計算機工作,就得先把程式編出來,然後透過輸人裝置送到儲存器中儲存起雜,即程式儲存.接來就是執行程式的問題了.根據馮.諾依曼的設計,計算機應能自動執行程式,而執行程式文歸結為逐條執行指令. ①取出指令:從儲存器某個地址中取出要執行的指令送到 CPU 內部的指令暫存器暫存; ②分析指令:把儲存在指令暫存器中的指令送到指令暫存器,譯出該指令對應的微操作; ③執行指令:根據招令譯碼器向各個部件發出相應控制訊號,完成指令規定的操作; ④為執行下一條指令做好準備,即形成下一條指令地址.

  • 中秋節和大豐收的關聯?
  • 吃飯過程中喝水好不好,為什麼?