計算機組成的一些總結(6)X86指令簡介

2022-08-05 18:48:10 字數 1219 閱讀 7751

x86指令主要包括:運算類指令(算術運算和邏輯運算)、傳送類指令、轉移類指令、控制類指令,一條指令要麼改變通用暫存器的內容,或者改變標誌位,或者改變儲存器單元的內容,或者改變外設埠的內容,或者改變指令指標。

1.傳送指令,作用是把資料或地址傳送到暫存器或儲存單元中。

mov指令(傳送)  push指令(壓棧) pop指令(彈棧)

2.算術運算指令

目的運算元不能是立即數或cs暫存器

兩個運算元不能同時為儲存器運算元

3.邏輯運算和移位指令

shl指令(左移)

shr指令(邏輯右移)相當於無符號數除以2^n的運算

sar指令(算術右移)相當於帶符號數除以2^n的運算

4.轉移指令

(1)無條件轉移指令-直接轉移

短轉移jmp short label 由一個位元組的操作碼和一個位元組的位移量組成,執行這條指令時,是將第二個位元組的8位的位移量與當前的指令指標暫存器ip相加,並將結果更新在ip中,位移量是 轉移的目標地址與當前指令指標值的差。

近轉移jmp near ptr label 第一個位元組的操作碼和兩個位元組的位移量,這樣可以在當前指令指標前後32k位元組的範圍內進行轉移,這是真實模式下。從80386開始,近轉移可以使用32位的位移量,這樣可以在前後2g位元組的範圍內進行轉移。

遠轉移jmp far ptr label 遠轉移直接給出了目標地址,而不是與當前指令指標的相對位移。一般是轉移到不同的**段,又稱段間轉移,當執行這條指令時,cpu會取出整條指令的編碼,並將這兩個位元組放入ip暫存器,另外兩個位元組放入cs段暫存器,下一條指令就會通過cs和ip這兩個暫存器中的新的內容計算得到( 實體地址=段基值(cs)*16+偏移量(ip)    ),cpu就會從新的地址取出下一條指令開始執行。

(2)無條件轉移指令-間接轉移

轉移目標地址在暫存器中

轉移目標地址在儲存器中

(3)條件轉移指令

根據當前的狀態標誌位決定是否發生轉移,一般在影響標誌位的算術或邏輯運算指令之後,在8086中,所有的條件轉移都是短轉移,從80386起,條件轉移指令可以使用32位的長位移量,可以在前後2g位元組的範圍內進行轉移。

jc label,在進位標誌cf=1時才會發生轉移

jnz/jne,在不為零/不相等時轉移 zf=0

5.處理器控制指令

控制cpu的功能,對標誌位進行操作

clc,把進位標誌cf清0

nop,空操作,執行nop指令使程式計數器pc加1,常用來延時一個機器週期。