組合語言(一)

2021-07-24 11:04:13 字數 1370 閱讀 1480

8086暫存器都是16位的暫存器,根據用途可分為4種型別。分別是資料暫存器、位址暫存器、段暫存器和控制暫存器。如圖所示

資料暫存器中每個暫存器又可以分為2個8位的暫存器。分別為ah、al,bh、bl,ch、cl,dh、dl。h表示高位元組(高8位)暫存器、l表示低位元組(低8位)暫存器。例如 用ax暫存器存放乙個字1234h,表示為(ax)=1234h,即高位元組12放在ah,低位元組34放在al中。

位址暫存器包括指標和變址暫存器sp、bp、si、di四個16位暫存器。顧名思義,它們可用來存放儲存器運算元的偏移位址。另外,它們也可以作為通用暫存器用。

8086cpu有4個16位的段暫存器,分別是cs**段暫存器、ds資料段暫存器、es附加段暫存器、ss堆疊段暫存器。

控制暫存器包括ip和flags(又稱為psw程式狀態字)兩個16位暫存器。用於控制程式的執行。ip 指令指標暫存器,用來存放**段中的偏移位址,指出當前正在執行指令的下一條指令所在單元的偏移位址。 flags標誌暫存器中的某位代表cpu的1個標誌,表示出cpu的某種執行狀態。最低位為d0,最高位為d15。8086cpu的標誌暫存器共有9個標誌,分別為6個條件碼標誌和3個控制標誌。

如圖:(1)條件碼標誌

cf進製標誌。當指令執行結果的最高位向前有進製時,cf=1,否則cf=0。

sf符號標誌。當指令執行結果的最高位(符號位)為負時,sf=1,否則sf=0。

zf零標誌。當指令執行結果為0時,zf=1,結果不為0時,zf=0。

of溢位標誌。當指令執行結果有溢位(超出了數的表示範圍)時,of=1,否則of=0。

af輔助進製標誌。當指令執行結果的第3位(半位元組)向前有進製時,af=1,否則af=0。

pf奇偶標誌。當指令執行結果中1的個數為偶數個時,pf=1,否則pf=0。

(2)控制標誌

df方向標誌。執行串處理指令時,若設定df=0,儲存單元的位址暫存器的值自動增加,若設定df=1,儲存單元的位址暫存器的值自動減小。

if中斷標誌。設定if=1,允許cpu響應可遮蔽中斷,if=0則不響應。

tf陷阱標誌。在debug除錯時,tf=1,採用單步執行方式,即進入陷阱;tf=0,正常執行程式。

例: 兩個二進位制數相加運算,有關標誌位自動發生變化。

根據計算結果可知cpu會自動地把標誌位設為:cf=0,sf=1,zf=0,of=0,pf=0,即無進製,結果為負數,結果不為0,沒有溢位,奇數個1。 對溢位的判斷也可以從簡單的角度理解,因為進行運算的二進位制數是補碼,可看出本題是乙個負數和乙個正數相加,結果為負數,不溢位。若兩個正數相加,結果為負數,或者兩個負數相加,結果為正數,那都是溢位了,說明8位補碼已經表示不了該結果。

在debug除錯環境下以字母縮寫的形式表示各個標誌位的狀態。進入debug後,用r命令檢視暫存器狀態時,可以看到除了陷阱標誌以外的標誌位的狀態。如表2-1所示。 

組合語言(一)

每一種微處理器都有自己的機器指令集 組合語言 由於很長的1與0難以辨別與記憶,所以誕生組合語言操作 暫存器bx的內容送到ax中 機器指令 1000100111011000 彙編指令 mov ax,bx組合語言由彙編指令,偽指令,其他符號 後兩者都不對應機器碼 分別對應 機器碼的助記符,編譯器執行,由...

組合語言 AT T組合語言

這兩天的pwn題環境都是在linux中,採用的組合語言是 at t 格式。之前學習的是intel格式的8086彙編,今天學習了下at t組合語言。基於x86 架構的處理器所使用的彙編指令一般有兩種格式 操作intel格式at t格式 暫存器命名 push eax pushl eax 常數 立即運算元...

組合語言 《組合語言》王爽 實驗一

從 1000 0 開始寫入命令 a 1000 0 mov ax,4e20 add ax,1416 mov bx,2000 add ax,bx mov bx,ax add ax,bx mov ax,001a mov bx,0026 add al,bl add ah,bl add bh,al mov a...