文章目录
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 标号