第二章 8086/8088尋址和指令系統

2.1 8086/8088寄存器組

cpu寄存器

  • 通用寄存器
    • 數據寄存器
      • AX
        • AH
        • AL
      • BX
        • BH
        • BL
      • CX
        • CH
        • CL
      • DX
        • DH
        • DL
    • 指針寄存器
      • SP
      • BP
    • 變址寄存器
      • SI
      • DI
  • 控制寄存器
    • IP
    • FLAG
  • 段寄存器
    • CS
    • DS
    • SS
    • ES

標誌寄存器

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF

運算結果標識

  • 進位標誌(CF) : 用於反映運算是否產生進位或借位
  • 零標誌(ZF):用於反映運算結果是否爲零
  • 符號標誌(SF): 用於反映運算的符號位
  • 溢出標誌(OF): 用於反映加減法是否產生溢出
  • 奇偶標誌 (PF): 用於反映運算結果中1的個數是否爲1
  • 輔助進位標示(AF): 用於反映半字節向高字節是否進位或借位
  • 方向標識(DF): 決定字符串操作的方向
  • 中斷允許標識(IF): 決定CPU是否允許響應外部中斷
  • 追蹤標示(TF): 決定cpu是否進入單步模式

2.2 存儲分段和地址的形成

存儲單元的地址和內容

8086或8088系統中以字節爲單位線性組織存儲器

存儲器的分段

因爲8086或8088有20根地址線,所以可以直接尋址1M(2^20)的空間,但是由於寄存器只有16位,所以通過對1M的空間進行邏輯分段來實現尋址1M的能力。

物理地址的形成

物理地址= 段值*16 + 偏移

段寄存器的引用

訪問存儲器的方式 正常使用的寄存器 可選寄存器 偏移
取指令 CS IP
堆棧操作 SS SP
一般數據存取 DS CS、ES、SS 有效地址
源數據串 DS CS、ES、SS SI
目的數據串 ES DI
BP作爲指針寄存器使用 SS CS、DS、ES 有效地址

8086/8088的尋址方式

立即尋址方式

操作數包含在指令中
MOV AX, 1234h

寄存器尋址方式

操作數在cpu內部寄存器中
MOV SI,AX

直接尋址方式

操作數存放在存儲器中,指令直接包含操作數的有效地址
MOV ES:[5678H], BL

寄存器間接尋址

操作數在存儲器中,操作數有效地址時SI、DI、BX、BP四個存儲器之一
MOV AX,[SI]

寄存器相對尋址

操作數在存儲器中,操作數的有效地址時一個基址寄存器(BX、BP)或變址寄存器(SI,DI)加上一個偏移
MOV AX, [DI+1234h]

基址加變址尋址

操作數在存儲器中,操作數的有效地址是基址寄存器之一加上變址寄存器之一
MOV AX, [BX+DI]

相對基址加變址尋址

操作數在寄存器,操作數有效地址是基址寄存器加上變址寄存器再加上偏移
MOV AX, [BX+DI-2]

8086/8088指令系統

指令集說明

  • 分組

    • 數據傳送
    • 算數運算
    • 邏輯運算
    • 串操作
    • 程序控制
    • 處理器控制
  • 指令格式
    [標號:] 指令助記符 [操作數1 [,操作數2]] [:註釋]

數據傳送指令

  • 傳送指令
MOV DST,SRC

規則:
1、源和目的不能同時是段寄存器
2、代碼段寄存器不能作爲目的
3、指令指針IP不能作爲源也不能作爲目的

  • 交換指令
XCHG OPRD1, OPRD2

規則:
1、不能同時是存儲單元
2、不能有立即數
3、不能有段寄存器
  • 地址傳送指令
1、LEA (Load Effective Address)
LEA REG, OPRD

說明:將OPRD的有效地址存放到REG

2、 LDS (Load pointer into DS)
LDS REG, OPRD

說明: 將OPRD的段值存放到DS,將偏移存放到REG

3、 LES (Load pointer into ES)
LES REG, OPRD

說明:將OPRD的段值存放到ES,將偏移存放到REG

堆棧操作指令

1、進棧指令
PUSH SRC

2、出棧指令
POP DST

標誌操作指令

1、LAHF (Load AH with Flags)

說明: 將標誌寄存器的低8位存入AH

2、SAHF (Store AH into Flags)

說明: 將AH存入標誌寄存器的低8位

3、PUSHF

說明: 將標誌寄存器入棧

4、 POPF

說明: 將棧頂元素寫入標誌寄存器

5、CLC (CLear Carry flag)

說明: 清空進位標誌

6、STC (SeT Carry flag)

說明: 設置進位標誌

7、CMC (CoMplement Carry flag)

說明: 對進位標誌取反

8、CLD 

說明:清空方向標誌

9、STD 

說明: 設置方向標誌

10、CLI

說明:情況中斷標誌

11、STI
設置中斷標識

加減法運算指令

1、ADD
ADD OPRD1, OPRD2

說明:加法

2、ADC
ADC OPRD1, OPRD2

說明: 帶進位的加法

3、SUB
SUB OPRD1, OPRD2

說明: 減法

4、SBB
SBB OPRD1, OPRD2

說明: 帶借位的減法

5、DEC
DEC OPRD

說明:減一

6、NEG
NEG OPRD

說明:對OPRD取補

7、CMP
CMP OPRD1, OPRD2

說明:OPRD1-OPRD2 將影響標誌存入標誌寄存器

乘除法運算指令

1、MUL
MUL OPRD

2、IMUL
IMUL OPRD

3、DIV
DIV OPRD

4、IDIV
IDIV OPRD

5、CBW
CBW 

說明: 將AL寄存器的符號位擴展到AH

6、CWD
CWD

說明:將AX寄存器的符號位擴展到DX

邏輯運算和移位指令

1、NOT
NOT OPRD

說明:對OPRD取反並將結果存放到OPRD,不影響標誌寄存器

2、AND 
AND OPRD1, OPRD2

說明:對OPRD1,OPRD2進行邏輯與運算,並將結果存入OPRD1,並影響標誌寄存器

3、OR
OR OPRD1, OPRD2

說明:對OPRD1,OPRD2進行邏輯或運算,並將結果存入OPRD1,影響標誌寄存器

4、 XOR
XOR OPRD1,OPRD2

說明:對OPRD1,OPRD2進行邏輯異或運算,並將結果存入OPRD1, 影響標誌位

5、TEST
TEST OPRD1, OPRD2

說明:類似AND,隻影響標誌位

6、SAL
SAL OPRD, m

說明:對OPRD左移m位

7、SHL
SHL OPRD, m

說明:對OPRD左移m位

8、SAR
SAR OPRD, m

說明:對OPRD右移m位符號位保持bub

9、SHR
SHR OPRD, m

說明:對OPRD右移m位,左邊補0

10、ROL
ROL OPRD,m

說明:循環左移

11、ROR
ROR OPRD,m

說明:循環右移

12、RCL
RCL OPRD,m

說明:帶進位循環左移

13、RCR
RCR OPRD,m

說明:帶進位循環右移

轉移指令

1、JMP 
JMP 標號

2、LOOP
LOOP 標號

3、LOOPE
LOOPE 標號

4、LOOPNE
LOOPNE 標號

5、JCXZ
JCXZ 標號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章