計算機基礎 2

2022-09-13 19:30:16 字數 2695 閱讀 4001

程式計數器

程式計數器(program counter)是用來儲存下一條指令所在單元的位址。

程式執行時,pc的初值為程式第一條指令的位址,在順序執行程式時,控制器首先按程式計數器所指出的指令位址從記憶體中取出一條指令,然後分析和執行該指令,同時將pc的值加1指向下一條要執行的指令。

位址0100是程式執行的起始位置。windows 等作業系統把程式從硬碟複製到記憶體後,會將程式計數器作為設定為起始位置 0100,然後執行程式,每執行一條指令後,程式計數器的數值會增加1(或者直接指向下一條指令的位址),然後,cpu 就會根據程式計數器的數值,從記憶體中讀取命令並執行,也就是說,程式計數器控制著程式的流程

條件分支和迴圈機制

高階語言中的條件控制流程主要分為三種:順序執行、條件分支、迴圈判斷三種,順序執行是按照位址的內容順序的執行指令。條件分支是根據條件執行任意位址的指令。迴圈是重複執行同一位址的指令。

程式的開始過程和順序流程是一樣的,cpu 從0100處開始執行命令,在0100和0101都是順序執行,pc 的值順序+1,執行到0102位址的指令時,判斷0106暫存器的數值大於0,跳轉(jump)到0104位址的指令,將數值輸出到顯示器中,然後結束程式,0103 的指令被跳過了,這就和我們程式中的if()判斷是一樣的,在不滿足條件的情況下,指令會直接跳過。所以 pc 的執行過程也就沒有直接+1,而是下一條指令的位址。

標誌暫存器

條件和迴圈分支會使用到jump(跳轉指令),會根據當前的指令來判斷是否跳轉,上面我們提到了標誌暫存器,無論當前累加暫存器的運算結果是正數、負數還是零,標誌暫存器都會將其儲存

cpu 在進行運算時,標誌暫存器的數值會根據當前運算的結果自動設定,運算結果的正、負和零三種狀態由標誌暫存器的三個位表示。標誌暫存器的第乙個位元組位、第二個位元組位、第三個位元組位各自的結果都為1時,分別代表著正數、零和負數。

cpu 的執行機制比較有意思,假設累加暫存器中儲存的 *** 和通用暫存器中儲存的 yyy 做比較,執行比較的背後,cpu 的運算機制就會做減法運算。而無論減法運算的結果是正數、零還是負數,都會儲存到標誌暫存器中。結果為正表示 *** 比 yyy 大,結果為零表示 *** 和 yyy 相等,結果為負表示 *** 比 yyy 小。程式比較的指令,實際上是在 cpu 內部做減法運算。

函式呼叫機制

接下來,我們繼續介紹函式呼叫機制,哪怕是高階語言編寫的程式,函式呼叫處理也是通過把程式計數器的值設定成函式的儲存位址來實現的。函式執行跳轉指令後,必須進行返回處理,單純的指令跳轉沒有意義,下面是乙個實現函式跳轉的例子

圖中將變數 a 和 b 分別賦值為 123 和 456 ,呼叫 myfun(a,b) 方法,進行指令跳轉。圖中的位址是將 c 語言編譯成機器語言後執行時的位址,由於1行 c 程式在編譯後通常會變為多行機器語言,所以圖中的位址是分散的。在執行完 myfun(a,b)指令後,程式會返回到 myfun(a,b) 的下一條指令,cpu 繼續執行下面的指令。

函式的呼叫和返回很重要的兩個指令是callreturn指令,再將函式的入口位址設定到程式計數器之前,call 指令會把呼叫函式後要執行的指令位址儲存在名為棧的主存內。函式處理完畢後,再通過函式的出口來執行 return 指令。return 指令的功能是把儲存在棧中的位址設定到程式計數器。myfun 函式在被呼叫之前,0154 位址儲存在棧中,myfun 函式處理完成後,會把 0154 的位址儲存在程式計數器中。這個呼叫過程如下

在一些高階語言的條件或者迴圈語句中,函式呼叫的處理會轉換成 call 指令,函式結束後的處理則會轉換成 return 指令。

通過位址和索引實現陣列

接下來我們看一下基址暫存器和變址暫存器,通過這兩個暫存器,我們可以對主存上的特定區域進行劃分,來實現類似陣列的操作,首先,我們用十六進製制數將計算機記憶體上的 00000000 - ffffffff 的位址劃分出來。那麼,凡是該範圍的記憶體位址,只要有乙個 32 位的暫存器,便可檢視全部位址。但如果想要想陣列那樣分割特定的記憶體區域以達到連續檢視的目的的話,使用兩個暫存器會更加方便。

例如,我們用兩個暫存器(基址暫存器和變址暫存器)來表示記憶體的值

這種表示方式很類似陣列的構造,陣列是指同樣長度的資料在記憶體中進行連續排列的資料構造。用陣列名表示陣列全部的值,通過索引來區分陣列的各個資料元素,例如: a[0] - a[4],內的 0 - 4 就是陣列的下標。

幾乎所有的馮·諾伊曼型計算機的cpu,其工作都可以分為5個階段:取指令、指令解碼、執行指令、訪訪問數、結果寫回

2 計算機基礎(2)

目錄二.儲存器詳解 三.匯流排 四.作業系統的啟動流程 cpu的分類與指令集 cpu具有向下相容性 64位的cpu既可以執行64位的程式,也可以執行32位的程式 代表cpu的兩種工作方式 兩種狀態的轉換 應用程式的執行必然涉及計算機硬體的操作,那就必須有使用者態轉換到核心態下才可以實現,所以計算機工...

計算機 計算機基礎整理

大學四年浪費的代價。半夜整理東西 cpu 其功能主要是解釋計算機指令以及處理計算機軟體中的資料。cpu由運算器 控制器和暫存器及實現它們之間聯絡的資料 控制及狀態的匯流排構成。差不多所有的cpu的運作原理可分為四個階段 提取 fetch 解碼 decode 執行 execute 和寫回 writeb...

計算機基礎知識 2

運算子 描述示例結果 加y 1 x y 1 x 2 減 y 10 x y 5 x 5 乘 y 2 x y 5 x 10 除 y 10 x y 5 x 2 取餘 y 3 x y 2 x 1 自加 y 1 x y x 2 自減 y 1 x y x 0 運算子描述作用 按位與同真則真,否則為假 1 1 1...