1. 程式人生 > >80x86的指令系統(一)

80x86的指令系統(一)

1、資料傳送指令:

  • 通用資料傳送指令
    MOV、PUSH、POP、XCHG
  • 累加器專用傳送指令
    IN、OUT、XLAT
  • 地址傳送指令
    LEA、LDS、LES
  • 標誌暫存器傳送指令
    LAHF、SAHF、PUSHF、POPF
  • 型別轉換指令
    CBW、CWD

2、MOV DST, SRC
注意:
* DST、SRC 不能同時為段暫存器 MOV DS, ES ×
* 立即數不能直接送段暫存器 MOV DS, 2000H ×
* DST 不能是立即數和CS
* DST、SRC 不能同時為儲存器定址
* 不影響標誌位

3、進棧指令: PUSH SRC
出棧指令: POP DST
堆疊:‘先進後出’的儲存區,段地址存放在SS中,
SP在任何時候都指向棧頂,進出棧後自動修改SP。
注意:
* 堆疊操作必須以字為單位。
* 不影響標誌位
* 不能用立即定址方式
PUSH 1234H ×
* DST不能是CS
POP CS ×

4、 交換指令:XCHG OPR1, OPR2
注意:
* 不影響標誌位
* 不允許使用段暫存器

5、累加器專用傳送指令(只限使用AX或AL)
輸入指令 IN (I/O → CPU)
輸出指令 OUT (CPU → I/O)
注意:
* 不影響標誌位
* 前256個埠號00H~FFH可直接在指令中指定(長格式)
* 如果埠號≥ 256,埠號 →DX(短格式)

6、換碼指令:XLAT 或 XLAT OPR
執行操作:(AL) <— ( (BX) + (AL) )
注意:
* 不影響標誌位
* 位元組表格(長度不超過256)
首地址 → (BX)
* 需轉換的程式碼位移量 → (AL)

7、地址傳送指令
有效地址送暫存器指令:
LEA REG, SRC
執行操作: (REG) <— SRC
注意:
* 不影響標誌位
* REG 不能是段暫存器
* SRC 必須為儲存器定址方式

8、標誌暫存器傳送指令
標誌送AH指令: LAHF
執行操作:(AH) <— (FLAGS的低位元組)

9、型別轉換指令
CBW AL → AX
CWD AX → (DX,AX)
注意:
* 無運算元指令
* 隱含對AL 或AX 進行符號擴充套件
* 不影響條件標誌位

10、算術指令:
加法指令
ADD、ADC、INC
減法指令
SUB、SBB、DEC、NEG、CMP
乘法指令
MUL、IMUL
除法指令
DIV、IDIV
十進位制調整指令
DAA、DAS、
AAA、AAS、AAM、AAD

11、加法指令
加法指令: ADD DST, SRC
帶進位加法指令: ADC DST, SRC
加1指令: INC OPR
注意:
* 除INC指令不影響CF標誌外,均對條件標誌位有影響。
SF:
1 結果為負
0 否則
ZF:
1 結果為0
0 否則
CF:
1 和的最高有效位有向高位的進位
0 否則
OF:
1 兩個運算元符號相同,而結果符號與之相反
CF 位表示 無符號數 相加的溢位。
OF 位表示 帶符號數 相加的溢位。

12、減法指令
減法指令: SUB DST, SRC
帶借位減法指令: SBB DST, SRC
減1指令: DEC OPR
求補指令:NEG OPR
比較指令: CMP OPR1, OPR2
注意:
除DEC指令不影響CF標誌外,均對條件標誌位有影響。
減法指令對條件標誌(CF/OF/ZF/SF)的影響:
CF:
1 被減數的最高有效位有向高位的借位或減法轉換為加法運算時無進位
0 否則
OF:
1 兩個運算元符號相反,而結果的符號與減數相同
0 否則
CF 位表示 無符號數 減法的溢位。
OF 位表示 帶符號數 減法的溢位。
NEG指令對CF/OF的影響
CF:
0 運算元為0
1 否則
OF:
1 運算元為-128(位元組運算)或運算元為-32768(字運算)
0 否則

13、乘法指令
無符號數乘法指令: MUL SRC
帶符號數乘法指令: IMUL SRC
執行操作:
位元組運算元 (AX) <— (AL) * (SRC)
字運算元 (DX, AX) <— (AX) *(SRC)
注意:
* AL (AX) 為隱含的乘數暫存器。
* AX (DX,AX) 為隱含的乘積暫存器。
* SRC不能為立即數。
* 除CF和OF外,對條件標誌位無定義。
乘法指令對 CF/OF 的影響:
MUL指令:CF,OF
00:乘積的高一半為零
11 否則
IMUL指令:CF,OF
00:乘積的高一半是低一半的符號擴充套件
11:否則

14、除法指令
無符號數除法指令: DIV SRC
帶符號數除法指令: IDIV SRC
執行操作:
(AL) <— (AX) / (SRC) 的商
(AH) <— (AX) / (SRC) 的餘數
字操作
(AX) <— (DX, AX) / (SRC) 的商
(DX) <— (DX, AX) / (SRC) 的餘數
注意:
* AX (DX,AX) 為隱含的被除數暫存器。
* AL (AX) 為隱含的商暫存器。
* AH (DX) 為隱含的餘數暫存器。
* SRC不能為立即數。
* 對所有條件標誌位均無定義。如何判別結果有效?