文章目錄
2.1 8086/8088寄存器組
cpu寄存器
- 通用寄存器
- 數據寄存器
- AX
- AH
- AL
- BX
- BH
- BL
- CX
- CH
- CL
- DX
- DH
- DL
- AX
- 指針寄存器
- 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 標號