CPU 順序執行指令:
計算機是如何執行一條條指令的呢? 計算機內部是由許多的寄存器和鎖存器組成的,由不同的與或非門構造而成。而在其內部主要的寄存器有:
程序在CPU內的執行過程:
CPU根據 PC寄存器裏的地址,從內存中讀取對應需要執行的指令到指令寄存器中執行,然後根據指令長度自增順序執行下一條指令。
我們可以看出一個程序是連續存儲在內存中的。那當我們編程時用到 if… else這樣的語句,會發生指令跳轉,那CPU又是如何讀取跳轉後的指令的呢?????????
CPU執行跳轉指令:
編寫一個簡單的程序:
編譯成彙編代碼:
gcc -g -C test.c
objdump -d -M intel -S test.o
主要看 if … else部分的彙編代碼:
主要是 cmp , jne 兩個指令。
代碼解釋:
cmp 用於比較兩個數的指令 , DWORD PTR 數據類型爲32爲整形
[rbp-ox4] 寄存器地址, 0x0 常量0的十六進制數
先從寄存器中讀取一個數然後執行 cmp指令,如果 r==0 則將條件碼寄存器 ZF=0,否則 ZF = 1;然後執行37行代碼 jne(jump if not equal )跳轉指令,跳轉的條件是根據條件碼寄存器中 ZF 的值來判斷執行與否。如果 ZF =1 則會跳轉到 42 行的指令,將其讀取到內存 ,根據 mov 將指針移到42指令。這裏的 0x2相當於個寄存器賦值的操作。
如果 if 條件爲真則最後也會跳轉到 49行離開程序。
以此類推相應的循環語句也無非使用相應的條件跳轉指令。
總結時刻: 說了 cpu 順序執行指令的過程和如何跳轉執行指令過程以及相應的跳轉條件。