指令跳轉


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 順序執行指令的過程和如何跳轉執行指令過程以及相應的跳轉條件。

發佈了50 篇原創文章 · 獲贊 58 · 訪問量 2417
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章