架构简介
8086是16位寄存器和16位外部数据总线,20位地址总线,寻址为1MB的地址空间。
架构为基于累加器的寄存器-内存架构,可以对内存数直接操作,不同于MIPS的寄存器-寄存器架构运算数和结果都在寄存器中。这意味着,和MIPS相比,一方面寄存器-内存的架构使得8086中有许多可以直接操作内存的指令,避免了进行取-计算-存这样的步骤;另一方面,基于累加器的特点使得8086指令集中INC和DEC的方便高效尤为突出,运算指令集也很自然地呈现了不一样的结构。
寄存器简介
通用寄存器
AX | 乘除法的第一个操作数;乘除法返回的部分(16位,8位全部)结果; 串操作中load和store操作的寄存器(AX,AL); 系统调用功能号(AH); 可作为通用寄存器或寄存器传参进行函数调用时返回值存放处 |
|
---|---|---|
BX | 间接寻址的基址寄存器; 通用寄存器 |
|
CX | LOOP计数器; 移位寄存器(移位次数) |
|
DX | 16位乘法中乘积高16位,32位/16位被除数高位及余数; 部分系统调用内容 DL |
|
SP | 堆栈指针 | |
BP | 相对堆栈段的相对寻址的基址寄存器,相对SS段寻址; 堆栈传参的基址寄存器 |
|
SI | 串操作的源变址寄存器; 基址加变址相对寻址的变址寄存器 相对于DS寻址 |
|
DI | 串操基址加变址相对寻址的变址寄存器作的目的变址寄存器; 基址加变址相对寻址的变址寄存器 相对于DS或ES(串操作)寻址 |
段寄存器
段寄存器包括CS(代码段)、DS(数据段)、SS(堆栈段)、ES(附加段)
指令指针
IP,当前代码在CS中的偏移。类似MIPS的PC。
标志寄存器
8086有9个一位标志寄存器(标志位),放在16位的寄存器PSW(program status word)中。
其中特别注意,ZF表示结果是否为0,结果为0则ZF=1; SF表示结果是否为负,结果小于0则SF=1。
内存组织
段式内存管理,相比之前OS中做的分页式内存管理更加灵活。
内存中(非堆栈段)存储内存由低到高增长,存储遵循低字在前、高字在后,低字节在前、高字节在后。
堆栈也遵循低字节在前、高字节在后,
PUSH | (1) SP -= 2 (2) ->[SP] |
POP | (1) [SP] -> (2) SP += 2 |
地址表示与寻址: