汇编与接口 Chapter2
2.1 8086CPU的编程结构
-
16根地址线、20根数据线、时钟频率5MHz
-
8086分为总线接口单元(BIU)和执行单元(EU)
执行单元包括:
-
通用寄存器
8个16位寄存器
-
4个通用寄存器:AX、BX、CX、DX
可以拆分为2个单独的8位寄存器
-
AX 累加器
I/O指令必用
-
BX 基址寄存器
存放基地址
-
CX 计数寄存器
循环指令和串处理隐含的指定计数器
-
DX 数据寄存器
可与AX拼接成32位,DX中存放高16位
I/O指令中存放外设端口号
-
-
4个通用寄存器:SP、BP、SI、DI,更多被用于变址寻址:SI/DI与段寄存器DS/ES联用实现数据的寻址;SP、BP用于堆栈操作,与SS联用实现寻址
-
SI 源变址寄存器
间接寻址时用作地址寄存器和变址寄存器
串操作时用作源变址寄存器
-
DI 目的变址寄存器
间接寻址时用作地址寄存器和变址寄存器
串操作时用作目的变址寄存器
-
SP 堆栈指针寄存器
-
BP 基址指针寄存器
-
-
-
标志寄存器 (记)
16位(9位有效,7位空闲)
CF、DF、IF、TF可由指令设置,其余5个由EU设置
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 -
状态位
(1) CF (Carry Flag)
进位标志,反应算术运算后最高位(字节操作 D 7 D_7 D7,字操作 D 15 D_{15} D15)是否出现进位/借位,有进位则为1。
主要用于加减法,移位和环移指令也会改变CF
(2) PF (Parity Flag)
奇偶标志,1表示结果中有偶数个1,0表示结果中有奇数个1
(3) AF (Auxiliary Carry Flag)
辅助进位标志,1表示 D 3 D_3 D3向 D 4 D_4 D4进位/借位,0表示没有
用于BCD码算术运算指令
(4) ZF (Zero Flag)
零标志,1标志运算结果为0
(5) SF (Sign Flag)
符号标志,与带符号运算的结果符号位( D 7 / D 15 D_7/D_{15} D7/D15)一致,1表示结果为负数
(6) OF (Overflow Flag)
溢出标志,带符号数(补码)运算结果是否超过机器能表示的范围(-128~127 / -32768~32767),1表示溢出
-
控制位
(1) DF (Direction Flag)
方向标志,字符串操作时用到,字节操作加减1,字操作加减2
1表示递减,即高地址向低地址
0表示递增,即低地址向高地址
(2) IF (Interrupt Enable Flag)
中断允许标志,1表示允许响应
IF对不可屏蔽中断请求及内部中断无效
(3) TF (Trap Flag)
陷阱标志,为1时每执行完一条指令都自动产生一个内部中断,常用于调试
-
-
算术逻辑单元(ALU)
-
EU控制系统
总线接口单元包括:
-
段寄存器
-
机器字长=存储字长=16位
-
小端存储,即高字节存放在高地址,低字节存放在低地址,以低字节的地址作为整个字(双字)的地址
-
8086的分段管理:物理地址=(段寄存器)*16+(地址寄存器)
段与段之间可以是连续的、断开的、部分重叠或全部重叠的
分段管理的意义:减少指令长度,缩短指令执行时间;便于程序浮动装配
一些默认行为:
-
取指令时:CS:IP
-
堆栈操作时:SS:SP
-
涉及存储器操作数时(除了以BP为地址寄存器外):DS作为默认段基址(可替换为CS/DS/ES,添加段跨越前缀)
偏移地址为某16位偏移量(可以是指令中直接提供的16位地址、某个16位寄存器(BX/DI/SI)中的值、指令中的位移量加上某16位地址寄存器(BX/BP/DI/SI)中的值)
-
ES用于串操作指令中的数据块传送指令:
源地址:默认DS段基址(可替换为CS/DS/ES,添加段跨越前缀),偏移地址SI
目的地址:ES:DI
-
BP作地址寄存器:
SS默认段基址(可替换为CS/DS/ES,添加段跨越前缀),SS:EA
-
-
4个段寄存器
- 代码段寄存器CS
- 数据段寄存器DS
- 附加段寄存器ES
- 堆栈段寄存器SS(后进先出)
-
-
指令指针寄存器IP(就是计组里说的PC)
提供下一条指令的地址,具体来说是下一条指令的(代码)段内偏移地址,代码段的段地址由CS提供
-
地址形成逻辑(20位地址加法器形成地址)
-
总线控制逻辑
-
指令队列(6字节指令队列,先进先出,存放待执行指令,出去的进入IP)
-
2.2 8086CPU的工作模式与引脚功能
-
工作模式(略)
-
引脚功能
注: /分时复用 (最大模式/最小模式)
最小模式:
-
A D 0 ∼ A D 15 AD_0 \sim AD_{15} AD0∼AD15:地址/数据分时复用(双向、三态)
T 1 T_1 T1时用作地址总线的低16位,其余时间用作数据总线进行数据传输
-
A D 16 / S 3 ∼ A D 19 / S 6 AD_{16}/S_3 \sim AD_{19}/S_6 AD16/S3∼
-