8086_微机原理与接口技术总结【基础】

8086_微机原理与接口技术总结【基础】
助记符  操作数   注释
LDA   R9   ; 把R9中的数据存入A
ADD   RA   ; 把RA中的数据与A的相加
ADD   RB   ; 把RB中的数据与A的相加
ADD   RC   ; 把RC中的数据与A的相加
SUB   RD   ; 把A中的数据与RD的相减

8086_微机原理与接口技术总结【基础】
上面由环形计数器、控制矩阵及指令译码器组成的部分称为控制器。

8086_微机原理与接口技术总结【基础】
8086和8088 CPU的内部基本相同,但它们的外部性能是有区别的。8086是16位数据总线,而8088是8位数据总线,在处理一个16位数据字时,8088需要两步操作而8086只需要一步。

8086 CPU从功能上可分为两部分,即总线接口部件(bus interface unit,缩写为BIU)和执行部件EU(execution unit)。
8086_微机原理与接口技术总结【基础】
执行部件(EU)的功能就是负责指令的执行。将指令译码并利用内部的寄存器和ALU对数据进行所需的处理。
从结构图4.1中,可见到执行部件由下列部分组成:
(1) 4个通用寄存器,即AX,BX,CX,DX;
(2) 4个专用寄存器,即基数指针寄存器BP,堆栈指针寄存器SP,源变址寄存器SI,目的变址寄存器DI;
(3) 标志寄存器(FR);
(4) 算术逻辑部件(ALU)。

标志寄存器FR共有16位,其中7位未用,所用的各位含义如下:

8086_微机原理与接口技术总结【基础】

总线接口部件的功能是负责与存储器、I/O端口传送数据,即BIU管理在存储器中存取程序和数据的实际处理过程。
总线接口部件由下列各部分组成:
(1) 4个段地址寄存器,即
CS——16位代码段寄存器;
DS——16位数据段寄存器;
ES——16位附加段寄存器;
SS——16位堆栈段寄存器。
(2) 16位指令指针寄存器IP。
(3) 20位的地址加法器。
(4) 6字节的指令队列。

8086的指令队列为6个字节,8088的指令队列为4个字节。

假设CS=0FE00H,IP=0400H,此时指令的物理地址为0FE400H。

物理地址=段基址×16+偏移地址

一般指令程序存放在代码段中,段地址来源于代码段寄存器,偏移地址来源于指令指针IP。
当涉及到一个堆栈操作时,段地址寄存器为SS,偏移地址来源于栈指针寄存器SP。
当涉及到一个操作数时,则由数据段寄存器DS或附加段寄存器ES作为段寄存器,而偏地址是由16位偏移量得到。

4.2.4 8086总线的工作周期
为了取得指令和传送数据的协调工作,就需要CPU的总线接口部件执行一个总线周期。在8086/8088中,一个最基本的总线周期由4个时钟周期组成,
常将4个时钟周期分别称为4个状态,即T1状态、T2状态、T3状态、(无尽的Tw状态)、T4状态。

8086_微机原理与接口技术总结【基础】
最小模式,就是在系统中只有8086/8088一个微处理器。在这种系统中,所有的总线控制信号都直接由8086/8088产生,因此,系统中的总线控制逻辑电路被减到最少。

8086_微机原理与接口技术总结【基础】

8086和8088的引脚信号图

一般常将AD0信号作为低8位数据的选通信号,因为,每当CPU和偶地址单元或偶地址端口交换数据时,在T1状态,AD0引脚传送的地址信号必定为低电平

A19/S6~A16/S3在总线周期的T1状态,用来输出地址的最高4位。在总线周期的T2,T3,TW和T4状态时,用来输出状态信息。其中,S6为0,用来指示8086/8088当前与总线相连,所以在T2,T3,TW和T4状态时,8086/8088总是使S6等于0,以表示8086/8088当前连在总线上。S5表明中断允许标志的当前设置,若为1,表示当前允许可屏蔽中断请求;若为0,则禁止一切可屏蔽中断。S4,S3合起来指出当前正在使用哪段寄存器。
8086在最小模式下的典型配置
8086_微机原理与接口技术总结【基础】
在总线周期的前一部分时间,CPU总是送出地址信号,为了告诉地址已经准备好,可以被锁存,CPU此时会送出高电平的ALE信号,所以,ALE就是允许锁存的信号。

最大工作模式
8086/8088CPU为实现多处理器控制系统(多主控系统)就要增设总线控制器8288和总线仲裁器8289。
8086_微机原理与接口技术总结【基础】

总线控制器8288

复位:
(1)代码段寄存器CS和指令指针寄存器IP分别初始化为FFFFH和0000H,其他寄存器为0000H,指令队列清空。
(2) 标志寄存器被清零,即所有标志位都被清除了。
(3)复位信号RESET从高电平到低电平的跳变会触发复位逻辑电路,经过7个时钟周期之后,CPU就被启动而恢复正常工作,即从FFFF0H处开始执行程序。

最小工作模式下的总线读/写操作

8086_微机原理与接口技术总结【基础】
8086系统中1M字节的存储器地址空间实际上分成两个512K字节的存储体—— “偶存储体”和“奇存储体”,偶存储体同8086的低8位数据总线D0~D7相连,奇存储体同 8086的高8位数据线D8~D15相连,地址总线的A1~A19同两抄个存储体中的地址线A0~A18 相连,最低位地址线A0和“总线高允许”BHE*用来分别选择偶存储体和奇存储体。这种连 接方法称为“奇偶分体”。

中断向量
中断向量是中断处理子程序的入口地址,每个中断类型对应一个中断向量。
内存中,把0段的0000~03FFH区域设置为一个中断向量表。每一个中断向量占4个存储单元。中断子程序入口地址的偏移量(IP),低位在前,高位在后;再存放中断子程序入口地址的段地址(CS),也是低位在前,高位在后。从0单位开始,顺序排列。

8086_微机原理与接口技术总结【基础】
前5个是专用中断。类型0的中断称“除数为0中断”。类型1的中断称“单步中断”;类型2的中断称“非屏蔽中断”;类型3的中断称“断点中断”,类型4的中断称“溢出中断”。这5个专用中断中,非屏蔽中断是硬件中断,其余4个是软件中断。

类型5到类型31(1FH)共27个中断是保留的中断。
8086_微机原理与接口技术总结【基础】
8086_微机原理与接口技术总结【基础】

当一个可屏蔽中断被响应时,CPU实际执行的总线时序如下:
(1) 执行两个中断响应总线周期,之间用2~3个空闲状态隔开。被响应的外设端口在第二个中断响应总线周期中通过低8位数据线送回一个单字节的中断类型码。CPU接收中断类型码,将它左移两位后,成为中断向量的起始地址,存入暂存器。
(2) 执行一个总线写周期,在这个周期中,把标志寄存器的值推入堆栈。
(3) 将标志寄存器的中断允许标志IF和单步标志TF置成0。
(4) 执行一个总线写周期,在这个周期内,将CS的内容推入堆栈。
(5) 执行一个总线写周期,在这个周期内,将IP的内容推入堆栈。
(6) 执行一个总线读周期,在这个周期中,从中断向量所在的前两个字节中读得中断处理子程序入口地址的偏移量送到IP寄存器中。
(7) 执行一个总线读周期,在这个周期中,从中断向量所在的后两个字节中读得中断处理子程序入口地址的段值送到CS寄存器中。

86系列 CPU的寻址方式
8086 CPU指令系统中,有一部分指令所用的8位或16位操作数就在指令中提供,这种方式叫立即数寻址方式. 主要对寄存器赋值。操作数从指令中直接取得,不需要运行总线周期
如果操作数就在CPU的内部寄存器中,那么寄存器名可在指令中指出。这种寻址方式就叫寄存器寻址方式。 对16位操作数来说,寄存器可以为AX,BX,CX,DX,SI,DI,SP或者BP,而对8位操作数来说,寄存器可为AH,AL,BH,BL,CH,CL,DH,DL。不需要运行总线周期
使用直接寻址方式时,数据总是在存储器中,存储单元的有效地址由指令直接指出,是对存储器进行访问时可采用的最简单的方式。MOVAX,[1070H];将DS段的1070H和1071H两单元的内容取到AX中 默认为段寄存器是DS 。 CS:MOVBX,[3000H];将CS段的3000H和3001H两单元的内容送BX
采用寄存器间接寻址方式时,操作数一定在存储器中,存储单元的有效地址由寄存器指出,这些寄存器可以为BX,BP,SI和DI之一:
      [BX]
      [BP]+ 8位位移量
   EA= [SI] 16位位移量
      [DI]
默认的段寄存器通常为DS。否则应指出。如寄存器为BP时,则对应的段寄存器为SS。
细分起来,寄存器间接寻址可分为以下4种:
(1) 以BX寄存器进行间接寻址——数据段基址寻址MOVAX,[BX]
(2) 以BP寄存器进行间接寻址——堆栈段基址寻址MOVBX,[BP]
(3) 以SI和DI寄存器进行间接寻址——变址寻址
(4) 将BX,BP和SI,DI寄存器组合起来进行间接寻址——基址加变址的寻址。MOVAX,[BX+SI+0050]

传送类指令
通用传送指令中包括最基本的传送指令MOV,堆栈指令PUSH和POP,数据交换指令XCHG。
提供了专用的堆栈操作指令,其中PUSH是把字压入堆栈,POP是把字弹出堆栈。指令前应预置SS、SP的值,SP为当前堆栈段的栈顶。
Push
8086_微机原理与接口技术总结【基础】
pop
8086_微机原理与接口技术总结【基础】
堆栈中的内容是按后进先出的次序进行传送的
交换指令XCHG可以实现字节交换,也可以实现字交换。可以在CPU的内部寄存器之间进行,也可以在内部寄存器和存储单元之间进行,但不能在两个存储单元之间执行数据交换过程。

执行XLAT指令可将任意一个十进制数翻译成7段显示码,步骤如下:
(1) 将译码表定位到某个逻辑段的一片连续地址中,并将其表首址的偏移地址置入BX寄存器中。
(2) 将待翻译的十进制数字送入AL寄存器中。
(3) 执行XLAT指令。 相当于查表操作

目标地址传送指令

  1. 取有效地址指令
    LEA AX,[2728] ;将2728单元的偏移量送AX,指令执行后,AX中为2728
  2. 将地址指针装到DS和另一个寄存器的指令
     LDS DI,[2130H]; 使2130H和2131H中的偏移量送到DI,2132H和2133H中的段值送到DS。
  3. 将地址指针装到ES和另一个寄存器的指令 LES

标志位传送指令

  1. 读取标志指令LAHF
    8086_微机原理与接口技术总结【基础】
  2. 设置标志指令SAHF
    将AH寄存器的相应位传送到标志寄存器的低8位。
  3. 对标志寄存器的压入堆栈指令和弹出堆栈指令
    PUSHF/ POPF

输入/输出数据传送指令
用来完成累加器(AX/AL)与I/O端口之间的数据传送
IN AX,70H ;将70H端口的内容读入AL,71H端口的内容读入AH
IN AX,DX ;从DX和DX+1所指出的两个端口中读取一个字,较低地址端口

算术运算类指令
1.加法指令 不带进位: ADD/带进位: ADC, 进位标志CF
增量指令: INC
2. 减法指令 不带借位: SUB/带借位: SBB, 借位标志CF
减量指令: DEC , 取补指令: NEG, 比较指令: CMP

逻辑运算指令
8086的逻辑运算指令包括AND(与),OR(或),NOT(非),XOR(异或)指令和TEST(测试)指令。 TEST指令和AND指令执行同样的操作,但TEST指令不送回操作结果,而仅仅影响标志位ZF。

移位指令
非循环移位指令:算术左移指令SAL(shift arithmetic left)、逻辑左移指令SHL(shift logic left)、算术右移指令SAR(shift arithmetic right)和逻辑右移指令SHR(shift logic right)。 移位指令在执行时,都会影响标志位CF,OF,PF,SF和ZF。
循环移位指令: 8086指令系统中有4条循环移位指令,即不带进位位的循环左移指令ROL(rotate left),不带进位位的循环右移指令ROR(rotate right),带进位位的循环左移指令RCL(rotate through CF left)和带进位位的循环右移指令RCR(rotate through CF right)。
如果要移动若干位,则必须在CL中指定移动位数。

串操作指令
8086_微机原理与接口技术总结【基础】
所有的串操作指令都用寄存器SI对源操作数进行间接寻址,并且假定是在DS段中;此外,所有的串操作指令都用寄存器DI为目的操作数进行间接寻址,并且假定是在ES段中。
当DF=1时,SI和D I作自动减量修改,当DF=0时,SI和DI作自动增量修改。

字符串的存和取
STOS指令是把累加器AL/AX中的内容存到内存中去
例如, 使0404H开始的256个单元清0。程序如下: 
CLD  ; 清除方向标志DF
LEA DI,[0404] ; 将目的地址0404H送DI  
MOV CX,0080H ; 共有128个字
XOR AX,AX ; AX清0
REP STOSW ; 将256个字节清0

字符串的扫描和比较
SCAS指令是用来从目标串中查找某个关键字,要求查找的关键字应事先置入AX或AL寄存器中。 操作一直进行到ZF=1或(CX)=0为止。 通常在SCAS指令之前加重复前缀REPNE/REPNZ

CMPS 只根据结果特征置标志,并修改SI和DI内容指向下一元素。通常在CMPS指令前加重复前缀REPE/REPZ,用来寻找两个串中的第一个不相同数据。

重复前缀有3种:
REP, 无条件重复
REPE/REPZ CMPS/SCAS相同时重复 (找不同)
REPNE/REPNZ CMPS/SCAS不同时重复 (找相同)

凡属能改变指令执行顺序的指令,统称为程序转移指令。

循环控制指令LOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZ
LOOP指令用CX寄存器作为计数器,它首先使CX减1,若减1后不为0,则转移到目标地址;否则就执行LOOP指令之后的指令。

子程序调用与返回由CALL和RET指令实现

跳转指令三类:
1.无条件跳转: JMP;
2.JCXZ(CX 为 0 则跳转)
3.根据标志位跳转:
JE ;等于则跳转
JNE ;不等于则跳转
JZ ;为 0 则跳转
JNZ ;不为 0 则跳转
JS ;为负则跳转
JNS ;不为负则跳转
JC ;进位则跳转
JNC ;不进位则跳转
JO ;溢出则跳转
JNO ;不溢出则跳转

典型的并行接口和外部设备连接

8086_微机原理与接口技术总结【基础】

可编程并行通信接口芯片8255A
8086_微机原理与接口技术总结【基础】
8086_微机原理与接口技术总结【基础】
8255A中各端口可有3种基本工作方式: 方式0——基本输入/输出方式;方式1——选通输入/输出方式;方式2——双向传送方式

控制字
8086_微机原理与接口技术总结【基础】
置位/复位控制字
8086_微机原理与接口技术总结【基础】
工作方式0
8086_微机原理与接口技术总结【基础】
工作方式1 (A、B都是输入模式的情况)
8086_微机原理与接口技术总结【基础】
8086_微机原理与接口技术总结【基础】
输出
8086_微机原理与接口技术总结【基础】
输入输出
8086_微机原理与接口技术总结【基础】
工作方式2: 被称作带选通的双向传送方式
当端口A工作于方式2时,允许端口B工作方式0或方式1完成输入/输出功能
8086_微机原理与接口技术总结【基础】
8086_微机原理与接口技术总结【基础】
一个由8086CPU和8255A为主体构成的闭环调节系统
8086_微机原理与接口技术总结【基础】

可编程中断控制器8259A
8086_微机原理与接口技术总结【基础】
级联缓冲/比较器
SP/EN是一个双功能信号,当8259A处于缓冲状态时,EN有效,表示允许8259A通过缓冲存储器输出;EN无效,表示CPU写8259A

8086_微机原理与接口技术总结【基础】
8259A有两种中断触发方式:电平触发方式和边沿触发方式,可由软件来定义。
8086_微机原理与接口技术总结【基础】
例如,定义D7~D3=10001时,则该8级中断的类型码将顺序为88H~8FH。

8259A中对中断优先权的管理,可概括为完全嵌套方式、自动循环方式和中断屏蔽方式。

1.完全嵌套方式 可采用以下3种中断结束方式:
普通EOI方式/ 特殊EOI方式(最靠谱)/ 自动EOI方式
2. 自动循环方式 普通/自动/特殊EOI循环方式
3. 中断屏蔽方式 普通屏蔽方式/ 特殊屏蔽方式

两级级联
8*8=64中断
8086_微机原理与接口技术总结【基础】

可编程计数/定时控制器8253
8253可编程计数/定时控制器具有3个独立的通道,最高计数速率为2.6MHz
8086_微机原理与接口技术总结【基础】
8253中各通道可有6种可供选择的工作方式,以完成定时、计数或脉冲发生器等多种功能。

2.指令的注意事项 MOV—判断题一定出
a) 不能在两个内存单元之间传送数据
b) 不能从一个段地址寄存器向另一个段地址寄存器发送数据
c) CS、IP、EIP寄存器不能作为目的操作数

8086对段寄存器使用的约定
8086_微机原理与接口技术总结【基础】

MOV指令对操作数的要求

8086_微机原理与接口技术总结【基础】
IN&OUT指令:

  1. 只有AL/AX可以与I/O端口进行数据传输
  2. 端口地址直接给出(8位),或由DX寄存器指出(16位)
    IN AL,DX; IN AX,80H;
    IN与OUT操作相反: IN AL,80H; OUT 80H,AL;

取偏移地址/有效地址指令LEA:
LEA BX,BUFFER; LEA BX,[SI+5H];

DX用来指IO端口,BX和SIDI用来作地址指针。

关于算术运算后的标志位
8086_微机原理与接口技术总结【基础】
8086_微机原理与接口技术总结【基础】
无符号看CF,有符号看OF/SF,为零看ZF;

ADD和SUB指令都影响六个标志位
INC 指令影响除了CF之外的五个标志位
INC、DEC操作数可以是存储器操作数

CMP指令:CMP OPRD1,OPRD2; 前数减去后数,不返回结果
若ZF=1,则两数相等; 若CF=0,结果为正;CF=1,结果为负。
五个逻辑运算指令都会使CF=OF=0,对其他值也有影响

关于SHR,SHL,SAR,SAL
8086_微机原理与接口技术总结【基础】8086_微机原理与接口技术总结【基础】8086_微机原理与接口技术总结【基础】
都会影响标志位CF
若移动位数大于1位,则在CL中指定移动位数。

循环移位
8086_微机原理与接口技术总结【基础】

标志位操作指令
8086_微机原理与接口技术总结【基础】

串操作
提前设定好SI,DS DI,ES CX CLD复位方向标志
重复操作前缀
8086_微机原理与接口技术总结【基础】
串传送指令
8086_微机原理与接口技术总结【基础】
例: REP MOVSB
串比较指令
8086_微机原理与接口技术总结【基础】
串扫描指令
8086_微机原理与接口技术总结【基础】
扫描内容为AX/AL与ES:DI

串装入指令
8086_微机原理与接口技术总结【基础】
从DS:SI装入内容到AL/AX 不带重复REP

串存储指令
8086_微机原理与接口技术总结【基础】
把AL/AX中的内容到ES:DI

伪指令
定义变量是用数据定义伪指令DB,DW,DD等。例如:
VAR-DATA   SEGMENT
DATA1     DB      12H
DATA2     DB      34H
DATA3     DW      5678H
VAR-DATA   ENDS

① 数值表达式。例如:
  DA_BYTE   DB  50H,50
  DA_WORD   DW  0A3F1H,4981H

DA_B DB ?,?
   DA_W DW ?,? 变量中不预置内容

DUP 重复操作符
D_B1 DB 20H DUP(?) 分配20个字节,不预置

(1) SEG求段基址
格式:SEG〈符号名〉
(2) OFFSET求偏移地址
格式:OFFSET〈符号名〉
(1) LOW取低字节
格式:LOW〈表达式〉 MOV AL,LOW 3080H ;AL=80H 
(2) HIGH取高字节
格式:HIGH〈表达式〉