微机原理

微型计算机基础

 微型计算机的组成及各部分的功能和作用

  硬件系统

   微处理器CPU

    主要由算术逻辑单元ALU,寄存器,控制器CU,它是微型计算机的主要组成部分

   微型计算机

    以CPU为核心,加上存储器,输入输出接口电路,通过外部总线相连接,组成微型计算机

   五个基本部分

    存储器

    运算器

    控制器

    输入设备

    输出设备

  软件系统

   可分为系统软件和应用软件

  微机基本电路

   触发器

    边沿敏感的存储单元,能在时钟的上升或下降沿同步数据锁存

   三态门

    三态门指逻辑门的输出除有高,低电平两种状态,还有高阻态

   寄存器

    寄存器是CPU的组成部分,可用来暂存指令,数据,地址

   锁存器

    当锁存信号到达时,将输出端的状态锁存起来,当数据信号滞后于控制信号,用锁存器

   缓冲器

    在两种不同速度的设备之间传输信息时平滑传输过程的常用手段

    输入缓冲器

     将外设送来的信息暂存,待CPU取走

    输出缓冲器

     将CPU送往外设的信息暂存,待外设取走

  总线分类

   片内总线

    CPU芯片内部各个部件之间的数据传输是通过总线通路实现

   系统总线

    数据总线

     为双向总线,用于在CPU,存储器,I/O接口之间的数据传送,数据总线的宽度等于计算机的字长

    地址总线

     为单向总线,用于传送CPU所要访问的存储单元或I/O接口的地址信息,地址总线的位数决定了系统能直接访问的存储器容量

    控制总线

     为双向总线,用于控制总线上的操作和数据传送的方向,实现微处理器与外部逻辑部件之间的同步操作

   外部总线

    为了实现微机系统与其他设备之间的连接而采用的总线称为外部总线

 微型机的基本工作过程

  1.将程序和数据通过输入设备送入存储器

  2.启动运行,计算机从存储器中取出程序指令送到控制器去识别

  3.控制器根据指令的含义发出相应的命令,将存储单元中存放的操作数取出送往运算器进行运算,再把运算结果送回存储器指定的单元中

  4.当运算任务完成后,就可以根据指令将结果通过输出设备输出

 计算机中的编码,数制及其转换

  数制及其转换

   数制

    二进制

     数码 0,1,逢二进一

    八进制

     数码 0,1,2,3,4,5,6,7,逢八进一

    十进制

     数码0,1,2,3,4,5,6,7,8,9,逢10进一

    十六进制

     数码0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,逢16进一

   n进制的基数作算术运算,逢n进一,借一当n

   以小数点为分界点,各位的位权 n^3,n^2,n^1 . n^-1,n^-2,n^-3.....

   数制转换

    非10进制->10进制

     按权展开相加即可

    10进制->其它进制

     整数,除n取余,逆序排列,直到商为0

     小数,乘n取整

    二级制与八进制,十六进制的转换

     3位二进制转换为1位八进制,1位八进制数转换为3位二进制数

     4位二进制数转换为1位十六进制数,1位十六进制数转换位4位二进制数

     八进制与十六进制的转换:先转换为二进制,再转换为对应的数制

  计算机的编码

   机器数:一个数及其符号位在机器中的一组二进制数的表示形式

   真值:最高位用0表示正数,用1表示负数

   原码:最高位表示符号位,其它n位表示数值的绝对值

   反码:正数的反码与原码相同,负数的反码是对其原码符号位不变,其它位取反

   补码:正数的补码与原码相同,负数的补码,对其原码,符号位不变,其他各位取反,末尾加1,对负数的补码求真值,符号位不变,按位取反,加1

   计算机存储有符号的整数时,是用该数的补码进行存储,0的原反补都是0

   原码与反码的区间 - 2^(n-1)-1≤ x ≤ 2^(n-1)-1,补码的区间 -2^(n-1)≤ x < 2^(n-1)-1

  BCD码

   压缩BCD码:是用4位二进制代码表示一位十进制数

   非压缩BCD码:用8位二进制代码表示一位十进制数

   BCD码与二进制不能直接转换,要先将BCD码转换为10进制,10进制再转换为2进制

  ASCII

   美国信息交换标准码,单字节字符编码

   0~9 : 48~57 (30H~39H)

   A~Z:65~90(41H~5AH)

   a~z:97~122(61H~7AH)

 二进制数的算术运算和逻辑运算

  有符号二进制数运算

   计算机存储有符号的整数时,是用该数的补码进行存储,0的原反补都是0

   补码运算的公式

     X 补+ Y 补 = [X+Y] 补

    X补 - Y补 = X补 + [-Y]补

    [-Y]补 = [[Y]补]补;将所有二进制位连同符号位一同取反加1

   补码的符号位可以参加运算

  无符号二进制数运算

   按位加减即可

  逻辑运算

   与 AND

    当A,B都为真,输出为真

   或 OR

    当A,B有一个为真,则输出为真

   非 NOT

    当A为真,则输出假,当A为假,则输出真

   异或 XOR

    当A,B值相同为假,不同为真

  运算中的溢出

   无符号数的溢出

    最高位有进位或借位为溢出

   有符号数的溢出

    CD7为最高位进位标志和CD6为次高位的进位标志,则 V = CD7⊕CD6 ,V为1表示有溢出,V=0表示无溢出,⊕异或xor符号

 基本逻辑门及常用逻辑部件

  与门:Y = A^B

   

  或门:Y= A || B

   

  非门:Y = ~A

   

  异或门 : Y = A ⊕ B

   

  与非门 Y = ~(A^B)

   

  或非门 Y = ~(A || B)

   

  三态门

   

80X86微处理器

 8086/8088CPU的功能结构

  执行单元EU

   

   功能:译码分析指令,执行指令,暂存中间运算结果并保留结果特征

   EU控制部件

    对指令译码,发出控制信号控制EU的各个部件完成指令

   ALU算术逻辑运算单元

    进行数据的运算

   Flags标志寄存器

    记录运算结果的特征位

   通用寄存器组

    暂存运算结果

  总线接口单元BIU

   

   功能:负责CPU与内存或输入输出接口之间的信息传送,包括取指令,取操作数,保存运算结果

   指令队列

    存放待执行的指令

   地址加法器

    计算段地址与偏移地址,形成物理地址

   段寄存器

    存放段地址

   指令指针寄存器

    存放指令的地址

   总线控制逻辑

    与外界交换数据的通路

  EU和BIU按流水线方式工作

   当EU从指令队列中取走指令,指令队列出现两个及以上的字节空间BIU就顺序的预取后续指令的代码,填入指令队列

   在EU执行指令过程中,BIU负责从指定的内存单元或外设读取EU需要的数据,并将EU运算结果存储到存储器

   当EU执行跳转指令时,BIU就使指令队列复位,并立即从新地址取出指令传送给EU执行,然后再读取后续的指令序列填满指令队列

   EU从BIU的指令队列取指令执行指令,在EU执行期间,BIU可以取指令放在指令队列中,EU执行指令和BIU取指令同时进行,节省了CPU访问内存的时间

  寄存器结构

   通用寄存器

    数据寄存器

     累加器AX

      16位寄存器,可拆分为两个8位的寄存器AH,AL

     基址寄存器BX

      16位寄存器,可拆分为两个8位的寄存器BH,BL

     计数寄存器CX

      16位寄存器,可拆分为两个8位的寄存器CH,CL

     数据寄存器DX

      16位寄存器,可拆分为两个8位的寄存器DH,DL

    指针和变址寄存器

     堆栈指针SP,指向堆栈的栈顶

     基址指针BP

     源变址寄存器SI

     目的变址寄存器DI

   段寄存器

    代码段寄存器CS:用于存放当前代码段的段地址

    数据段寄存器DS:用于存放当前数据段的段地址

    附加段寄存器ES:用于存放当前附加段的段地址

    堆栈段寄存器SS:用于存放当前堆栈段的段地址

   专用寄存器

    标志寄存器flags

     16位寄存器,仅定义了9位,其中6位标志位,3位控制位

     进位标志CF

      无符号数进行加减运算时,有借位或有进位,CF=1,否则 CF=0

     辅助进位标志AF

      在字节操作时,低4位向高四位有借位或进位,在字操作时低字节向高字节有进位或有借位时,AF=1,否则 AF = 0

     奇偶效验标志PF

      当运算结果的低8位‘1’的个数为偶数时,PF=1,否则 PF = 0

     零标志ZF

      当运算结果为0时,ZF=1,否则ZF=0

     溢出标志OF

      在有符号数的算术运算时,当运算结果溢出,OF=1,否则OF=0

     符号标志SF

      在有符号数的算术运算时,当运算结果为负,SF=1,当运算借位为正时,SF=0

     方向标志DF

      当DF=0时,在串操作指令中,进行自增操作,DF=1,在串操作指令中,进行自减操作

     中断允许标志IF

      当IF=0,禁止CPU响应可屏蔽中断,当IF=1时,允许CPU响应可屏蔽中断

     单步调试标志TF

      当TF=1时,表示CPU进行单步工作方式,当TF=0时,表示CPU正常执行程序

    指令指针IP用来存放要取的下一条指令在当前代码段中的偏移地址

   指示偏移地址的寄存器

    BX,基址寄存器,隐含的数据段是DS

    BP,隐含的数据段是SS

    SI,隐含的数据段是DS,在字符串操作时,SI作为源变址,隐含的数据段是DS

    DI,隐含的数据段是DS,在字符串操作时,DS作为目的变址,隐含的数据段是ES

    SP:在堆栈操作中使用,隐含的数据段是SS

    IP:在取指令时使用,隐含的数据段是CS

 8086与8088的区别(都是16位的寄存器)

  内部结构

   8086的数据总线宽度为16位、8088的数据总线宽度为8位

   8086的指令队列长度为6字节,8088的指令队列长度为4字节

  引脚和存储器结构

   8086有高8位数据总线允许引脚BHE,用来访问存储器的高字节,而A0用来访问低字节

   8086把1MB的存储器分为两个512KB的存储体,分用BHE和A0信号用来作为奇地址存储体和偶地址存储体的选通线

   8088没有BHE引脚,存储器也不划分奇偶,A0向A1~A19一样参加地址选通

  地址/数据复用线

   8086的地址/数据复用线时16位AD0~AD15,而8088仅有AD0~AD7复用,A8~A15仅作为地址线使用

  8086位M/IO#,8088为M#/IO

 8086/8088CPU引脚

  

  AD0~AD15 为分时复用的地址数据线

   T1:AD0~AD15用作低16地址线

   T2~T4:用作16位数据线

  A16~A19/(S3~S6),分时复用的地址状态线

   A16~A19在T1时传送地址信息

   在T2,T3,T4,传送状态信息

   S6:指示8086/8088当前是否与总线相连,S6=0,表示当前与总线相连

   S5:表示中断允许标志当前的设置,S5=0,表示当前CPU中断是关闭的,禁止一切可屏蔽中断的中断请求,S5=1,表示CPU中断是关闭的,允许一切可屏蔽中断的中断请求

   S3,S4组合指出当前使用的段寄存器情况

  BHE#/S7

   T1:BHE = 0,表示高8位数据线上的数据有效

   T2~T4:输出状态信号S7,未定义

  控制总线

   MN/MX#

    接+5V时,最小模式,8086提供系统所需要的全部控制信号

    接地时,最大模式,系统总线的控制信号由总线控制器8288提供,8086当前操作的状态信号(S0,S1,S2)送给8288,8288产生相应的控制信号

   最大模式下的控制信号

    S0#,S1#,S2#

     三态,输出总线周期状态信号

    RQ/GT0#,RQ/GT1

     请求/允许 总线访问控制信号,双向

    QS0,QS1

     指令队列状态信号,用于指示8086内部BIU指令队列的状态

    LOCK#

     总线优先权锁定信号,当LOCK = 0时,外部控制器不能控制总线

   最小模式下的控制信号

    M/IO#存储器/IO控制信号(输出,三态)

     M/IO# = 1时:访问存储器,M/IO# = 0时:访问I/O端口

    DT/R# 数据发送/数据接收信号(输出,三态)

     DT/R# = 1时:写,DT/R# = 0时:读

    DEN# 数据允许信号(输出,三态)

     在CPU访问存储器或I/O的总线周期的后一段时间内,该信号有效,作为系统中总线收发器的允许信号

    ALE 地址锁存允许信号(输出)

     T1时发出正脉冲,在下降沿,把总线上的地址信息锁存入地址锁存器

    INTA# 中断响应信号

     响应来自INTR引脚的可屏蔽中断请求

    WR# 写控制信号

     WR# = 0,8086处于写操作

    HOLD 总线请求信号

     HOLD = 1时,表示系统中CPU之外的另一个主模块要求占用总线

    HLDA 总线响应信号

     HLDA = 1时,表示CPU对总线请求信号做出响应,所有与三总线相接的CPU的引脚呈现高阻态,从而让出总线

   公共总线(不受工作模式的影响)

    RD# 读控制信号 (输出,三态)

     RD# = 0,表示CPU在读

    INTR 中断请求信号

     INTR = 1,表示外设向CPU发出中断请求

    NMI 不可屏蔽中断请求信号

     上升沿触发,不可软件屏蔽,CPU执行完当前指令后响应中断

    READY 等待状态控制信号

     READY = 1时,表示CPU访问的存储器或I/O端口以准备好传送数据,若在总线周期T3,检测到READY=0,则插入等待状态Tw

    TEST# 等待测试控制信号

     等待测试控制信号,当CPU执行wait指令,CPU每隔5个T对TEST进行测试,当TEST=1,CPU重复执行wait指令,即CPU处于空闲等待状态,直到TEST = 0,等待状态结束,CPU执行后续指令

    RESET 复位信号(输入)

     该引脚保持4T状态以上时间高电平,则可复位,复位后CPU停止当前操作,对flags,IP,DS,SS,ES,及指令队列清零,CS置为FFFFH,CPU从FFFF0H开始执行程序

   其它信号

    CLK时钟信号 一般接5MHZ的时钟

    VCC电源

    GND 地线

 8086/8088 的存储器结构

  存储器的地址空间与数据格式的存储

   由于8086/8088CPU有20条地址线,能直接访问的存储空间为1MB,地址范围:00000H~FFFFFH

   数据的存储格式

    每个存储单元存储 1个字节的数据

    存取一个字节的数据需要一个总线周期

    两个相邻的字节定义为一个字

    字地址:每一个字的低字节存放在低地址中,高字节存放在高地址中,以低字节的地址作为字地址

    对准字存放:字地址为偶地址,称为对准字存放,存取一个字只需要一个总线周期、

    非对准字存放:字地址为奇地址,称为非对准字存放,存取一个字需要两个总线周期

  存储器的分段

   由于8086/8088的内部寄存器为16位,能寻址的内存空间只能是64kb,所以8086/8088系统采用了地址分段

   每个段的起始地址低4位必须为0,高16位存放在16位的段寄存器(称为段基址)

   段寄存器分别有CS,DS,SS,ES

   物理地址的形成

    由段地址与偏移地址组成,在地址加法器内部形成物理地址

    公式:物理地址 = 段地址*10H+偏移地址

  存储器的组成

   在8086系统中,1MB的存储空间分为两个存储体,分别为奇存储体和偶存储体

    偶存储体:其数据线与CPU的D7~D0相连,A0用于片选

    奇存储体:其数据线与CPU的D15~D8相连,BHE用于片选

   8088系统中不分奇偶存储体,A0~A19访问存储器

 8086/8088的总线操作及时序

  总线系统的时序

   8086/8088系统的时钟clk为5mhz,故一个一个时钟周期为200ns

   指令周期

    执行一条指令的时间称为指令周期,一个指令周期是由若干个总线周期组成

   总线周期

    一个总线周期是CPU通过总线与存储器或外部设备进行一次数据传输所需的时间

    一个最基本的总线周期包括4个时钟周期,即T1,T2,T3,T4

  系统的复位与启动

   8086CPU复位后,flags,,DS,ES,SS和其它寄存器被清零

   指令队列也被清零

   CS和IP被初始化为FFFF:0000,系统执行的第一条指令存储在FFFF0中

  最小模式下的读/写时序

   最小模式读时序

    T1

     当CPU准备开始一个总线读周期时,用M/IO#信号指出当前执行的读操作是从存储器读还是IO读

     A19/S6~A16/S3,AD15~AD0,发出20位地址信息

     同时BHE与ALE控制信号有效

     BHE信号用来配合地址信号对存储单元的寻址

     ALE信号下降沿将20位地址信号和BHE信号锁存,从而把地址信息和状态信息分开

    T2

     A19/S6~A6/S3上的地址信号消失,而出现S6~S3状态信号,状态信号指明CPU的状态信息

     AD15~AD0变成高阻状态,为读入数据做准备

     RD#信号有效,送至存储器或IO端口,开始从被选中的存储单元或IO端口中读取数据

     DEN#有效,做好接受数据的准备

    T3

     CPU采样READY,若READY = 1,则选中的存储单元或IO端口已准备好数据,T3结束后,CPU从AD15~AD0上读取数据,若READY = 0,则说明选中的存储单元没有准备好数据,则T3之后插入Tw

    Tw

     每个Tw状态开始,CPU都测试READY信号,只有发现READY = 1时,才在该Tw结束后进入T4状态。否则继续插入Tw状态

    T4

     在T4状态和前一个状态交界的下降沿处,CPU对数据总线进行采样,读取数据

   最小模式写时序

    T1

     当CPU准备开始一个总线写周期时,用M/IO# 控制信号指出写操作是对存储器写,还是IO端口写

     A19/S6~A16/S3,AD15~AD0,发出20位地址信息

     BHE#信号有效,作为存储体的体选信号,配合地址信号实现对奇地址存储单元的寻址

     发出ALE信号,在下降沿对地址信号进行锁存,同时也对M/IO#和BHE#信号锁存

     使控制数据收发器方向的信号DT/R# 信号为高电平,收发器8286发送数据,进行写操作

    T2

     AD15~AD0发出将要写到存储单元或IO端口的16位数据

     WR#引脚发出写信号,该信号送到存储器或IO接口

     写操作已准备就绪,只等待将数据写入存储单元或IO接口

    T3

     测试READY信号,若READY = 1,则在T3和T4状态交界处,将数据写入存储单元或IO接口

     测试READY信号,若READY = 0,则说明,将要访问的存储单元或IO接口未准备接收好数据,则在T3之后插入Tw等待状态,以等待存储器或IO接口做好准备工作

    Tw

     每个Tw状态开始,CPU都测试READY信号状态,只有发现READY = 1,才在该Tw结束后进入T4状态。否则继续插入Tw状态

    T4

     数据从数据总线擦除,各种信号进入无效状态,CPU完成了对存储单元或IO接口的写操作

8086/8088指令系统

 指令的寻址方式

  指令的一般格式

   指令是计算机执行某种操作命令,指令系统是CPU所有可执行的指令的集合

   助记符 目的操作数,源操作数

   操作数有三种类型:立即数,寄存器操作数和存储器操作数

  寻址方式,即获得操作数地址的方法

  立即寻址

   立即数作为操作数,立即数只能是指令的源操作数

  寄存器寻址

   操作数存放在CPU寄存器中

   寄存器操作数可以是源操作数,也可以是目的操作数

  存储器寻址

   操作数存放在存储器的内存单元中,指令中给出操作数所在的存储单元的偏移地址(有效地址EA),有效地址写在方括号内[]

   段地址在默认的段寄存器DS中,也可使用段超越前缀指定段寄存器 :格式 段寄存器:[EA]

   直接寻址

    存储器操作数的16位偏移地址,直接包含在指令的方括号中,即有效地址EA=指令所给出的数值

   寄存器间接寻址

    操作数在内存中,内存单元的偏移地址存放在寄存器中,如 : mov ax,[bx],操作数的偏移地址就是bx中的值

    寄存器间接寻址方式,使用的寄存器只有4个:BX,BP,SI,DI

    BX,SI,DI默认的段基址为DS,BP默认的段基址为SS

   寄存器相对寻址

    内存单元的偏移地址一部分由间接寻址寄存器提供,一部分是指令给定的8位或16位地址位移量,二者相加形成操作数的有效地址

    如 :mov ax,[bx+data],偏移地址由bx的值加上data的值

   基址加变址寻址

    偏移地址是一个基址寄存器(BX,BP)与变址寄存器(SI,DI)的和

    有效地址EA = BX/BP + SI/DI

    段寄存器由基址寄存器决定,BX的段寄存器为DS,BP的段寄存器为SS

    注:基址寄存器BX,BP,变址寄存器DI,SI不能同时出现

   基址变址相对寻址

    偏移地址由基址寄存器加变址寄存器再加上地址位移量

    例 mov ax,[bx+si+data]

  I/O端口寻址

   直接寻址

    直接端口寻址的I/O端口地址用8位立即数表示,端口地址范围 0~FFF,可寻址256个端口

    如 IN AL,30H 将30h端口的内容送入AL中

   间接寻址

    若端口地址超过8位,则必须用间接端口寻址。端口的16位地址必须存放在DX中,即DX值表示I/O端口地址

    如 MOV DX, 230h IN AL,DX 将地址为230h的端口中的内容送入AL

 数据传送指令

  mov指令

   指令格式:mov 目的操作数,源操作数

   MOV指令的注意事项

    两个操作数不能同时为存储操作数

    两个操作数不能同时为段寄存器

    两个操作数类型必须相同

    mov指令不影响flags寄存器的任何标志

    不能用立即数给段寄存器幅值

    不允许给CS赋值

    MOV 指令中的两个操作数的类型必须至少有一个是确定的

     传送数据的时候,必须指明数据的单位,如是字节还是字类型

     PTR 修改操作数类型的属性运算符

     BYET PTR 字节

      如 MOV BYET PTR [1000H],10

      BYET PTR 指明了[1000h]是字节类型

     WORD PTR 字

      如 MOV WORD PTR [1000H],10

      WORD PTR 指明了[1000h]是字类型

   立即数到通用寄存器的数据传送 mov 寄存器,立即数

   立即数到存储单元的数据传送 mov [EA],立即数

   CPU内部寄存器之间的数据传送

   寄存器与存储单元之间的数据传送

  xchg指令

   格式:XCHG 目的操作数,源操作数

   功能:将源操作数和目的操作数的值交换

  LEA指令

   格式:LEA 目的操作数,源操作数

   功能:把源操作数的偏移地址送入目的操作数,源操作数必须是一个内存操作数,目的操作数必须是一个16位通用寄存器

  push与pop指令

   push

    将操作数指定的一个字的内容传送至SP所指的栈顶

    操作数必须是字类型(16位)

    立即数不能做操作数

    不影响标志位

    压入堆栈:sp = sp - 2,再存入一个字

   pop

    将SP所指的栈顶内容传送至操作数指定的一个字

    操作数必须是字类型(16位)

    立即数不能做操作数

    不影响标志位

    出栈过程:将sp所指的字传送至操作数,SP = SP+2

  pushf和popf指令

   pushf 将标志寄存器flags压入堆栈

   popf 将当前栈顶的内容弹出到标志寄存器flags

  IN和OUT指令

   I/O设备与CPU只能通过累加器AX,AL进行数据交换

   IN指令

    将I/O设备的数据传送给AL,AX

    当端口地址为8位可直接使用,如 IN AL/AX,8位端口地址

    当端口地址为16位,先将端口地址送入DX中,再使用。 如 MOV DX,端口地址 IN AL/AX,DX

   OUT指令

    将AX,AL中的数据是送入I/O设备

    当端口地址为8位可直接使用,如 OUT 8位端口地址,AL/AX

    当端口地址为16位,先将端口地址送入DX中,再使用。 如 MOV DX,端口地址 OUT DX,AL/AX

 算术运算指令

  ADD 加法指令

   格式:ADD 目的操作数,源操作数

   功能:目的操作数 = 目的操作数+源操作数

   影响 Flags 寄存器的值

  ADC 带进位的加法指令

   格式:ADC 目的操作数,源操作数

   功能:目的操作数 = 目的操作数+源操作数+CF

   影响flags寄存器的值

  INC 加1指令

   格式:INC 操作数

   功能:操作数 = 操作数+1

   INC指令不影响CF标志

  SUB 减法指令

   格式:SUB 目的操作数,源操作数

   功能:目的操作数=目的操作数-源操作数

   影响flags标志寄存器

  SBB 带进位的减法指令

   格式:SBB 目的操作数,源操作数

   功能:目的操作数=目的操作数-源操作数-CF

   影响flags标志寄存器

  DEC 减1指令

   格式:DEC 操作数

   功能:操作数 = 操作数-1

   不影响CF标志位

  NEG 求补指令

   格式 NEG 操作数

   功能:将操作数按位取反(包括符号位)加1

  CMP 比较指令

   格式: CMP 目的操作数,源操作数

   功能:目的操作数减源操作数,不保留运算结果,只根据结果设置标志位

   影响flags寄存器

  MUL 无符号数乘法

   格式:MUL 操作数

   功能:当操作数为字节时,AX = AL * 操作数; 当操作数为字类型时, DX:AX = AX*操作数

   注意:两个操作数的类型必须相同,指令影响标志位CF,OF位

   字节乘法的乘积在AX中,如果标志位 CF=OF=0,表明AH为0,CF=OF=1,表明AH不为0,字相乘的乘积在DX:AX中,如果标志位CF=OF=1,表示乘积的高位DX不为0,CF=OF=0,表示乘积的高位DX为0

  IMUL 带符号数乘法

   格式:IMUL 操作数

   功能:与MUL指令一样,处理有符号的乘法

  DIV无符号数除法

   格式:DIV 操作数

   功能:当操作数为字节时,AL = AX / 操作数的商,AH = AX / 操作数的余数;当操作数为字时,AX = DX:AX / 操作数的商,DX=DX:AX / 操作数的余数

   注意:被除数长度应为除数长度的两倍,余数放在目的操作数的低位,商放在目的操作数的高位;除数不能为0,除数不能太小,否则将产生溢出

  IDIV 带符号数除法

   格式:IDIV 操作数

   功能:与DIV指令功能一样,处理有符号的数

   注意:当长度不一致时,应使用符号扩展指令

  符号扩展指令CBW,CWD

   使用符号扩展指令对数据类型进行调整,指令不影响标志位

   指令格式:CBW

    功能,字节转换为字。将AL中的数的符号位扩展至16位,扩展的符号部分存入AH中,既由AL扩展为AX,值保持不变

   指令格式:CDW

    功能,字转换为双字。将AX中的数的符号位扩展至32位,扩展的符号部分存入DX中。即由DX:AX代替,值保持不变

 逻辑运算指令

  与指令AND

   指令格式:AND 目的操作数,源操作数

   功能:目的操作数 = 目的操作数按位与源操作数

   对flags的影响:CF=OF=0,AF值不定

   常用于对某些位置0

  或指令OR

   格式:OR 目的操作数,源操作数

   功能:目的操作数 = 目的操作数按位或源操作数

   对flags的影响:CF=OF=0,AF值不定,对SF,PF,ZF产生影响

   常用对某些位置1

  非指令NOT

   格式: NOT 操作数

   功能: 操作数 = 操作数按位取反

   不影响标志位

  异或指令XOR

   格式: XOR 目的操作数,源操作数

   功能:目的操作数 = 目的操作数按位异或源操作数

   对flags的影响:CF=OF=0,AF值不定,SF,ZF,PF值影响

   常用于对某些位取反

  TSET指令

   格式:TEST 目的操作数,源操作数

   功能:目的操作数与源操作数按位进行与操作,不保留结果,仅使flags寄存器的标志位做改变

   对flags的值影响:CF=OF=0,AF值不定,SF,ZF,PF值影响

   在条件转移之前,判断

  非循环移位指令

   逻辑左移指令SHL

    格式:SHL 操作数,count (count大于1,应使用cl)

    说明:操作数可以是寄存器或存储器操作数,count可以是立即数或CL

    功能:将操作数的内容向左移位,移位的次数由count给出,每左移一位,操作数最高位的状态移入CF标志位,低位补0

   逻辑右移指令SHR

    格式:SHR 操作数,count(count大于1,使用cl)

    操作:将操作数的内容向右移位,移位次数由count给定,每右移一位,操作数的最低位的状态移入CF标志位,高位补0

   算术左移指令SAL

    格式:SAL 操作数,count(count大于1,使用cl)

    说明:算术移位指令将操作数看作带符号数

    功能:与SHL指令的功能完全相同

   算术右移指令SAR

    格式: SAR 操作数,count

    功能:将操作数的内容向右移位,每右移一位,操作数最末位移入CF标志位,最高位移入次高位的同时其值不变

  循环移位指令

   循环右移指令ROL

    格式:ROL 操作数,count

    功能:每左移一位,操作数最高位移出,送入CF标志位,还循环到左移一位空出的操作数最末位

   循环左移指令ROR

    格式:ROR 操作数,count

    功能:每右移一位数,操作数最低位送入CF标志位,同时循环移位到空出的最高位上

   带CF的循环右移RCL

    格式:RCL 操作数,count

    操作:每左移一位,操作数最高位移入CF中,CF原来的值移入最低位

   带CF的循环左移RCR

    格式:RCR 操作数,count

    操作:每右移一位,操作数最低位移入CF中,CF原来的值移入最高位

 串操作指令

  串操作指令对内存中连续存放数据串进行操作

  DF标志:串操作方向标志,DF = 0,SI和DI增量;DF = 1,SI和DI减量,CLD设置DF为0,STD,设置DF为1

  串操作指令的共同特点

   格式: 串操作指令 目的串,源串

   1.源串默认为数据段DS,允许段超越为SS,ES,偏移地址在SI中

   2.目的串默认在ES段中,偏移地址在DI中

   3.使用重复前缀时,串长度放在CX寄存器中

   4.地址指针和计数器自动修改

   使用串操作指令之前,应预先设置源串指令DS:SI,目的串指令ES:DI,重复次数CX,方向标志位DF;

  串传送指令movs

   格式:MOVS 目的串,源串(段超越形式)

   MOVSB,以字节为单位传送

   MOVSW,以字为单位传送

   功能:将DS:SI指明的内存单元数据传送到ES:DI指明的内存单元中

   常用的重复前缀 REP

  源串取数指令LODS

   指令格式:LODS 源串

   LODSB 以字节为单位

   LODSW 以字为单位

   功能:从串中取数据。将DS:SI指明的串中元素传送到AL或AX中,同时修改SI指向下一个字节或字

   指令不加重复操作前缀,常常用在循环中

  目的串存数指令STOS

   指令格式:STOS 目的串

   STOSB 以字节为单位

   STOSW 以字为单位

   功能:把数据存入串中。把AL或AX中的数据传送到ES:DI指明的串中

   一般带有重复操作前缀REP,用AL或AX初始化某数据区

  串比较指令CMPS

   格式:CMPS 目的串,源串

   CMPSB,以字节为单位

   CMPSW,以字为单位

   功能:数据串比较。将DS:SI指明的源串 - ES:DI指明的目的串,不保留结果,比较结果反映在标志位上,源串与目的串的内容不变

   常用的重复前缀为:REPE或REPNE

  串扫描指令SCAS

   指令格式:SCASB 以字节为单位;SCASW 以字为单位

   功能:ES:DI指明的串中搜素特定数据,特定数据存在AL(或AX)中

   常用的重复前缀:REPE,REPNE

  重复操作前缀

   REP

    无条件执行,直到 CX = 0 结束

   REPE

    相等时重复,即 ZF=1,且 CX ≠ 0 时重复

   REPNE

    不相等时重复,即ZF = 0,且 CX ≠ 0 时重复

 控制转移类指令

  控制转移类指令通过改变IP和CS的值,实现程序执行顺序的改变

  转移指令

   无条件转移指令JMP

    格式:JMP 目标标号

    根据目标标号的类型,可以进行短转移short和近转移near,远转移far

    JMP 段基址:偏移地址 ;把段基址的值送入CS中,偏移地址送入IP

    JMP指令不影响标志位

   条件转移指令

    条件转移指令根据标志位来判断是否进行转移,条件转移指令常跟在CMP指令与TEST指令后

    注意:条件成立执行转移操作,若不成立则不转移并顺序执行下一条指令,所有的条件转移指令属于段内短转移,均不影响标志位

    指令格式:JCC 目标标号

    无符号数转移指令,a大于,b小于

     JA/JNBE

     JAE/JNB

     JB/JNAE

     JBE/JNA

    带符号数转移指令 g大于,l小于

     JG/JNLE

     JGE/JNL

     JL/JNGE

     JLE/JNG

    单个条件标志转移指令

     JCXZ CX=0转移

     JO OF=1

     JNO OF=0

     JS

     JNS

     JC

     JNC

     JZ

     JNZ

     JP

     JNP

  循环控制指令

   利用CX作为计数控制循环,都不影响标志位

   LOOP 目标标号 当CX≠0

   LOOPZ(LOOPE) 目标标号 当CX=CX-1,CX≠0,ZF=1

   LOOPNZ(LOOPNE) 目标标号 当CX=CX-1,CX≠0,ZF=0

  中断指令

   INT指令

    指令格式:INT n

    说明:n为中断类型码,取值范围0~255。

   INT3指令

    指令格式:INT3

    说明:INT3是 中断类型码为3的中断服务程序

   INTO指令

    指令格式:INTO

    说明:INTO为溢出中断,相当于INT 4指令。INTO 指令执行时检查OF位,若 OF = 1,则进入中断类型码为4的中断服务程序,若OF=0,则指令执行结束

   IRET指令

    指令格式:IRET

    功能:中断返回

    说明:所有中断服务程序中最后一条指令都是IRET,它的具体操作:1.弹出IP 2.弹出CS 3.弹出flags

  过程调用指令

   过程是可重复使用在存储器中的一段程序。

   过程的定义:过程名 PROC [属性].....过程名 ENDP

   过程调用指令CALL

    格式:CALL 过程名

    执行过程:第一步保存返回地址,第二步取出过程入口地址赋给CS:IP,转去执行过程

   过程返回指令 RET

    格式:RET

    功能:返回调用程序

    返回指令放在过程的末尾,功能是弹出返回地址,送给IP和CS

 处理器控制指令

  CLC 使CF=0

  STC 使CF=1

  CLD 使DF=0

  STD 使DF=1

  CLI 使IF=0

  STI 使IF=1

  CMC 对CF标志位取反

  WAIT 等待

  HIT 暂停

  NOP 空操作

汇编语言程序设计

 汇编语言语句的分类

  指令性语句

   能产生目标代码,由CPU执行的特定功能的语句

  指示性语句

   不产生目标代码,仅在汇编过程中告诉汇编程序如何完成数据的定义,符号定义,段定义,过程定义等

  宏指令语句

   可以把多次使用的程序段定义为一条宏指令,调用时用宏指令代替

 汇编语句的格式

  格式:[名字项] 助记符 操作数 [;注释]

  名字项

   标号

    主要用于表示一条指令的位置

    标号具有三个属性,段地址,偏移地址,类型

    类型有 NEAR(-1近程)表示标号供段内使用,FAR(-2远程)表示标号可供段间使用

   变量名

    用于保存程序中要用到的可变的量

    具有5个属性:段地址,偏移地址,类型,长度,大小

   属性操作符

    sge 取段地址

    offset 取偏移地址

    type 类型

    length 长度 dup的系数

    size 所占的字节数

   PTR操作符

    可以暂时改变变量或标号的类型

    格式:类型 PTR 表达式

  助记符

   包括指令助记符和伪指令助记符

  操作数

   操作数可以是寄存器,变量,常量,也可以是表达式

  注释

   对指令加以说明,便于理解、

 汇编语言伪指令

  符号定义伪指令

   符号定义伪指令是给一个符号重新命名

   赋值语句 EQU

    格式:符号名 EQU 表达式

    将表达式的值赋给符号名,经EQU定义的符号名只能定义一次,不占用内存单元

   等号语句 =

    格式:符号名 = 表达式

    与EQU具有相同的功能,但可以被重新定义,不占用内存单元

  数据定义伪指令

   格式:变量名 伪操作助记符 操作数

   DB

    定义变量为字节类型,其后的每个操作数都占一个字节

   DW

    定义变量为字类型,其后的每个操作数都占两个字节

   DD

    定义变量为双字类型,其后的每个操作数都占两个字,即四个字节

   DQ

    定义变量为四字类型,其后的每个操作数都占四个字,即八个字节

   DT

    定义变量为十个字节,其后的每个操作数都占十个字节

   重复数据操作符DUP

    格式: 变量名 伪操作助记符 个数 DUP(内容)

    定义重复数据,内容可以为 ' ? '

  段定义伪指令

   segment/ends段定义伪指令

    格式:段名 sgement ......(内容)..... 段名 ends

    (定位类型方式)规定在定位时每个段的起始地址总是16的整倍数,最后四位二进制数一定是0 。这种定位方式最简单,但段间往往有空隙(最多为15个字节)。缺省定位方式是按PARA定位 例:DATA SEGMENT PARA

   assume伪指令

    格式: assume 段寄存器:段名,段寄存器:段名

    assume伪指令说明段名和段基址寄存器之间的关系,但不能给段寄存器赋值,段寄存器的值需要在代码段中由指令性语句赋值

  子程序定义伪指令

   格式:子程序名 PROC [属性] ......(过程体)..... RET 子程序名 ENDP

   其中过程名是子程序的入口地址,属性可以是NEAR(段内调用)或FAR(段间调用),默认为FAR

  地址定位伪指令ORG

   格式:ORG 表达式

   功能:指定后面的指令或数据从表达式指出的地址(偏移地址)开始存放

  汇编指针计数器 $

   它表示当前伪指令的偏移地址

  开始与结束伪指令name,end

   name

    格式:name 程序名字

   end

    格式:end 表达式

    表达式是该程序第一条可执行语句的标号,end语句表示源程序的结束

 21h DOS功能调用

  DOS系统功能调用的方法

   1.根据所需的功能设置入口参数

   2.把功能调用号送AH寄存器

   3.发送中断指令 INT 21h

   4.根据功能调用的说明取得出口参数

  常用的DOS功能调用

   输入单个字符

    1,7,8号功能。1号功能接收键盘输入的字符并保存在AL中,同时显示在屏幕上,7,8号功能接受键盘输入的字符保存在AL中但不显示

    入口参数:无

    格式: mov ah,1 int 21h

    功能:从键盘输入字符的ascll码送入寄存器AL中,并送显示器显示

   输入字符串

    0Ah号功能调用,从键盘输入字符串到指定的内存区域

    入口参数:DS:DX 为输入字符存放的区域,区域的第一个字节为允许输入最大字符个数(包括回车符),第二个字节存放实际输入的字符个数,从第三个字节开始存放输入的字符串

    格式: BUFF db (允许输入最大个数),(实际存放个数),(存储字符) mov dx,offset BUFF mov ah,0ah int 21h

   显示单个字符

    2号功能:显示单个字符

    入口参数:DL,将待显示字符的ASCII码送入DL寄存器

    格式: mov DL, 带显示字符的ASCII码 mov AH, 02h INT 21H

   显示字符串

    9号功能:将字符串显示在屏幕上

    入口参数: DS:DX,字符串必须以‘$’结尾

    格式:LEA DX,待显示字符串的首偏移地址 mov ah,09h int 21h

   返回操作系统

    4cH号功能:使程序正常结束并返回操作系统

    格式: MOV AH,4CH INT 21H

 运算符

  算术运算符

   +,-,*,/,MOD(取余),SHL(左移),SHR(右移)

  逻辑运算符

   AND,OR,NOT,XOR

  关系运算符

   EQ(等于),NE (不等) ,LT (小于),GT (大于),LE (小于等于),GE (大于等于)

  分析运算符

   SEG 运算符

    取段地址运算符,该运算符返回变量或标号所在段地址

    格式 : SEG 变量名或标号名

   OFFSET 运算符

    取段内偏移量符,该运算返回变量或标号所在段的段内偏移量

    格式:OFFSET 变量名或标号

   TYPE 运算符

    取类型属性运算符,该运算返回变量或标号的类型属性

    格式:TYPE 变量名或标号名

    若运算类型是标号,则返回标号的距离属性,标号NEAR和FAR的类型值TYPE分别为-1和-2,若运算对象是变量,则返回变量类型所占字节数

   LENGTH 运算符

    LENGTH运算符是用来回送分配给该变量的单元数。当变量是用重复 数据操作符 DUP定义的,则返回 DUP前面的数值,如果没有DUP说明,则返回值总是 1

    格式:LENGTH 变量

   SIZE 运算符

    该运算符返回变量所占的总字节数

    格式:SIZE 变量

  合成运算符

   : 运算符

    格式:段超越前缀:变量或地址表达式

    用来给变量,标号或地址表达式临时指定一个段属性

   PTR 运算符

    格式:类型 PTR 表达式

    PTR 运算符赋予变量或地址表达式一个指定的‘类型’属性

   THIS 运算符

    格式:THIS 类型

    EQU与THIS连用,给指定变量,标号定义新的类型或距离属性,与它下一个数据定义语句的段地址和偏移地址相同

 程序的结构

  顺序结构程序

   是一种最简单的程序结构,按照指令的书写顺序一个语句紧跟一个语句执行

  分支结构程序

   条件的判断是先由执行指令CMP,TEST后产生状态标志位,再由条件转移指令Jcc根据标志位的各种情况进行转移,以确定不同的处理过程。

   单分支结构

    只有一个分支有语句执行,另一个分支没有语句执行

   双分支结构

    两个分支都有语句执行,条件成立执行第2个分支语句,否则执行第一个分支语句体

   多分支结构

    有多种条件的情况采用多分支结构,每一个条件对应各自的分支语句体,即从多个分支选择一个分支执行

  循环程序结构

   凡是重复执行的操作均可用循环程序来实现

   初始化部分

    为循环体做准备工作,即进行初始状态的设置

   循环体

    每次都要重复执行的程序段,用于完成各种操作。

   修改部分

    为循环的正确执行,对参数进行修改

   控制部分

    需要选择一个恰当的循环条件保证程序按预定的循环次数或某种条件正常循环或结束

  子程序结构

   一个完整的独立的程序段,它可以多次被其他程序调用,并在这个程序执行完毕后返回到原调用的程序处

   主程序调用子程序需要用CALL指令,子程序返回子程序需要用RET指令

 汇编语言程序设计基本步骤

  建立数学模型

  确定算法

  画出流程图

  编写汇编源程序

  上机调试

 进行汇编语言程序设计的步骤

  编辑源文件,形成 .asm源文件

  用汇编程序把 .asm源文件汇编成目标文件 .obj

  用连接程序 把 .obj文件转换成 .exe文件

  运行 .exe 文件

  若有错,用debug调试

存储器系统

 存储器概述

  存储器的分类

   内存储器(主存)

    随机存储器RAM

     静态RAM(SRAM),不需要刷新

     动态RAM(DRAM),需要定时刷新

    只读存储器ROM

     用于存放固定的程序,一般不能修改

     掩膜式ROM(MROM)

     可编程ROM(PROM)

     紫外线擦除可编程ROM(EPROM)

     电擦除可编程ROM(EEPROM)

   外存储器

    磁盘

    光盘

    磁带

  存储器的层次结构

   寄存器

    CPU内部

   高速缓冲存储器Cache

    高速存取指令和数据,存取速度快,容量小

   主存储器

    存放计算机运行期间的大量程序和数据,存取速度较快,存储容量不大

   外存储器

    存放系统程序和大型数据文件及数据库,存储容量大,成本低

  存储器的性能指标

   存储容量

   存取速度

    指存储数据的写操作或读取数据的读操作所需要的时间,以ns为单位

   可靠性

   功耗

   性价比

  存储器件的结构

   

   地址线

    接受CPU发过来的地址信息

    3FF(1K),7FF(2K),FFF(4K),FFFF(64K),FFFFF(1M)

   数据线

    数据输入与输出

    数据线的根数说明芯片内一个存储单元所能存放的二进制数的位数,数据线的根数常称为芯片的位宽

   读允许

   写允许

   片选信号CS

    用来选中芯片

 静态随机存储器SRAM

  

  SRAM以双稳态触发器为基本存储电路,存取速度快,保存的数据不需要刷新,集成度低,功耗大

  存储体

   存储体由许多个存储单元组成,存储单元通常以矩阵的形式排列,采用 行,列地址单独译码的双译码方式

  I/O缓冲器

   从系统数据总线接收数据或者 把存储单元存储的数据输出到数据总线上

  CPU总线与SRAM的连接方法

   1.低位地址线,数据线,电源线直接相连

   2.高位地址线经译码后连接SRAM的片选信号CS

   3.控制总线组合形成读/写控制信号

 动态随机存储器DRAM

  基本存储电路靠电容存储电荷,集成度高,功耗比SRAM的功耗低,价格比SRAM便宜,需要定时刷新

 只读存储器

  特点:非易失性,即掉电后再上电时存储信息不会改变,它主要用来保存固定的程序和数据

  掩膜式ROM

   固定的程序代码及信息直接注入芯片内,用户不能修改其内容

  可编程PROM

   可允许一次编程,此后不能再对写入的内容修改

  紫外线擦除可编程EPROM

   用紫外线擦除,允许多次擦除和编程

  电擦除可编程EEPROM

   采用加电方法在线进行擦除和编程,可多次擦写

 高速缓冲存储器Cache

  为了缓解CPU和主存存取速度的矛盾,在CPU和主存之间插入一小块SRAM,称为Cache

 存储芯片与CPU的连接

  74ls138译码器

   

   S0高电平有效,S1,S2低电平有效

   对A0,A1,A2,译码,使Y0~Y7输出译码信息

  连接

   存储器芯片与cpu总线的连接决定着存储器芯片所分配的地址范围

   片选:使相关芯片的片选端CS低电平有效

   字选:选中存储器内部的某一存储单元

   片选信号和字选信号均由CPU发出的地址信号经译码器产生

  全译码

   将【全部】高位地址作为译码器的输入,用译码器的输出作为片选信号,低位地址线用作字选,与芯片的地址输入端直接相连,高位地址线全部连接进入译码电路,生成片选信号

   全地址译码的优点可以使每片芯片的地址范围唯一确定

  部分译码

   将高位地址线中的一部分进行译码,产生片选信号,低位地址信号与芯片直接相连

   采用部分译码时,由于未参加译码的高位地址与存储地址无关,所以存在地址重叠问题

  线选法

   用CPU地址总线的某一高位作为存储体芯片的片选信号,每根高位地址线接一块芯片,用低位地址线实现片内寻址

   结构简单,地址空间浪费大,整个存储器地址空间不连续,由于部分地址线未参加译码,会出现地址重叠

  数据线与控制线

   数据线直接与系统数据线连接,若数据线少于系统数据线,则进行位扩展

   OE与系统读命令线相连,当芯片被选中,且读命令有效,存储芯片将开放并驱动数据到总线。WE与系统的写命令线相连,当芯片被选中,且写命令有效时,允许总线数据写入存储芯片

输入输出与中断技术

 I/O接口的概述

  I/O接口电路介于主机与外部设备之间,是微处理器与外部设备信息交换的桥梁,实现计算机与外部设备之间交换信息的重要工作

  并行接口:一次传送一个字节或多个字节的所有位

  串行接口:一次传送一位,数据的所有位逐位传送

  接口的功能:1.提供时序的控制,协调快速的CPU与慢速的外设的时序差异;2.进行信息格式的转换;3.实现信号电平转换;4.地址的译码;5.数据的传送

  I/O接口的结构

   通常包括数据寄存器,控制寄存器,状态寄存器,数据缓冲器和读/写控制单元

   数据寄存器是可读可写的寄存器,用来存放CPU与I/O设备交换的数据信息

   控制寄存器只能写不能读,用来存放CPU向外部设备发送的控制命令和工作方式命令字

   状态寄存器能读不能写,CPU用来查询外部设备的当前的工作状态信息

   数据缓冲器是CPU与I/O设备数据信息交换的通道,与CPU的数据总线DB连接

   读/写控制逻辑单元与CPU的地址总线AB,控制总线CB连接,接收CPU发送到 I/O接口的读/写控制信号和端口选择信号,选择接口内部的寄存器进行读/写操作

 I/O端口

  I/O接口电路需要设置若干专用寄存器,缓冲输入输出数据,设定控制方式,保存状态信息,这些寄存器可被CPU直接访问,常被称为端口

  端口的编址方式

   统一编址

    定义:统一编址方式是指把 I/O端口和存储单元统一编址,即把I/O端口看出存储器的一部分,一个I/O端口的地址就是一个存储单元的地址

    优点:CPU访问存储单元的所有指令都可用于访问 I/O端口,CPU访问存储单元的所有寻址方式就是CPU访问 I/O端口的寻址方式

    缺点:占有了内存的空间,是访问存储器还是访问 I/O端口在程序中不能一目了然

   独立编址

    定义:把 I/O端口和存储单元各自编址,即地址编号相同也无妨

    优点:端口地址不占用内存空间,访问 I/O端口指令仅需要两个字节,执行速度快;

    缺点:要求CPU有独立的I/O指令,CPU访问 I/O端口的寻址方式少

 数据传送控制方式

  无条件传送方式

   在数据传送时,CPU直接与外设传送数据,而不必预先查询外设的状态

   适用场合:外部控制过程的各种动作时间是固定的且是已知的场合

   优点:无条件传送是最简便的传送方式,所需的硬件和软件都很少,且硬件接口电路简单

   缺点:这种传送方式必须在已知且确信外设已准备就绪的情况下才能使用,否则出错

  程序查询传送方式

   在进行 数据传送前,程序首先检测外设状态端口的状态,只有在状态信息满足条件时,才能通过数据端口进行数据传送,否则程序只能循环等待

   适用场合:适合外部设备数量不多,设备相对简单,对实时性要求不高的情况

   缺点:CPU要不断地查询外设,当外设没有准备好,CPU要等待,而许多外设的速度比CPU要慢的多,CPU的利用率不高

  中断传送方式

   当外设完成数据传送的准备后,向CPU发出中断请求信号,CPU收到请求后响应中断转去执行中断服务程序,当完成CPU与外设之间的数据传送,传送完成后立即返回,继续执行原来的程序

   特点:中断控制方式是该CPU的主动查询为CPU的被动响应

   优点:中断传送方式实时性好,节省CPU时间,外设具有申请服务的主动权,并且在一定程度上实现设备与CPU的并行工作

   缺点:中断方式仍需要通过CPU执行程序来实现外设与CPU之间的信息传送;CPU每次中断都需要花费时间保护断点和现场,无法满足高速I/O的速度要求

  DMA方式

   直接存储器传输方式,即DMA方式,在DMA方式下,外部设备利用专用的接口电路直接和存储器进行高速数据传送,而不经过CPU,整个传送过程由硬件来完成而不需要软件介入

   在DMA方式中,对数据传送过程进行控制的硬件称为DAM控制器(DMAC)

   DMAC的功能:接收外设的DMA请求信号,向CPU发出使用总线的总线请求信号

   DMA过程:向地址总线发送内存地址信号,并且能够生成读写控制信号,控制数据传送的字节数

   DMA过程结束,DMAC能向CPU发出DMA结束信号,并将总线的控制权交还给CPU

 中断

  中断的基本概念

   指CPU在正常运行程序时,由于内部或外部事件引起CPU暂时中止执行现行程序,转去执行请求CPU为其服务的中断服务程序,待中断服务程序完毕后返回到被中止的程序

  中断源:引起中断的原因,或者说发出中断申请的来源,中断源的分类:外部中断源(硬件中断)和内部中断源(软件中断)

  外部中断(硬件中断)

   由外部硬件触发,外部中断包括可屏蔽中断(INTR)和不可屏蔽中断(NMI)

   可屏蔽中断(INTR):是指可以延时处理的事件,如CPU有更紧急的任务,可以先暂时屏蔽可屏蔽中断,处理完事件后,再响应中断

   不可屏蔽中断(NMI):是指事件异常紧急,必须马上处理,不受IF的影响

   CPU对外部中断的响应时机是在一条指令执行完之后,中断处理后返回到被中断程序的下一条指令继续执行

  内部中断(软件中断)

   内部中断来自CPU内部,是在程序中使用INT指令引起的中断,其特点不需要外部硬件支持,不受中断标志位IF的影响,不执行中断响应周期

   常见的内部中断的中断类型号:1.分母0中断(INT 0);2.单步中断(INT 1);3.溢出中断(INTO,INT 4);4.断点中断(INT 3); 5.指令中断(INT N)

   内部中断的特点

    由一条指令INT N产生中断类型码,或由指令规定,或是预定的,软件中断无随机性

    不执行中断响应总线周期,CPU也不发出响应信号 INTA

    不受中断允许标志IF的影响

    除单步中断外,软件中断无法用软件禁止

    除单步中断外,软件中断比硬件中断具有更高的优先级别

  8086中断系统

   中断类型号

    由于中断源有多个,需要给每一个中断源编一个号,INT N,N就是中断号

    中断类型号的获取

     对于系统专用中断,系统将自动提供0~4中断类型号:0号除数0中断,1号单步中断,2号NMI中断,3号断点中断,4号溢出中断

     对于可屏蔽中断INTR,需要外接接口电路,利用8259A中断控制器来产生外设的中断类型号

   中断向量和中断向量表

    中断向量:存储了中断处理子程序的入口地址,每个中断向量占连续的4个字节,两个高字节单元存放入口地址的段地址CS,两个低字节单元存放入口地址的段内偏移量IP

    中断向量表:所有的中断向量的集中起来,按中断类型号从小到大顺序存放存储器的0000H~03FFH中

   中断响应的步骤

    取中断类型号;计算中断向量地址;取中断向量:偏移地址送IP,段地址送CS;转入中断处理程序;中断返回到INT指令的下一条指令

   CPU响应外部中断的条件

    设置中断请求触发器

    设置中断屏蔽触发器

    CPU开中断

    CPU执行完当前指令,满足上述条件,CPU响应中断

   中断优先权的顺序

    内部中断-->NMI中断-->INTR中断-->单步中断

  中断处理过程

   执行步骤:中断请求,中断判优,中断响应,中断处理和中断返回

   中断请求

    注:内部中断,不需要中断请求,CPU内部的中断控制逻辑直接接收处理

    外部中断请求由中断源提出。外部中断源利用CPU的中断输入引脚输入中断请求信号,CPU设有两个中断请求输入引脚:可屏蔽中断请求输入引脚和不可屏蔽中断请求输入引脚

   中断判优

    按规定的优先级次序对各中断源进行优先级判定,通常由硬件完成

   中断响应

    取中断类型号N

    保护现场

     标志寄存器入栈,将flags的内容入栈

    关中断

     清除IF和TF标志

    保护断点

     CS和IP入栈

    获得中断服务程序的入口地址

     获取中断向量;在中断向量表中的N*4开始的单元取两个字分别送IP和CS,获取中断处理程序的入口地址。CPU从CS:IP值的开始执行中断服务程序

   中断处理

    执行中断处理程序,程序一开始可以根据需要开中断,以允许中断嵌套

    入栈指令将用到的寄存器,以保护现场,待中断处理完毕,再把寄存器的内容从堆栈中弹出,恢复现场

   中断返回

    返回程序的断点处,恢复硬件现场,继续执行原程序。

 8259A可编程中断控制器

  8259A的内部结构

   

   数据总线缓冲器

    是CPU与8259A交换数据信息的接口

    通过数据总线D7~D0把CPU传送给8259A的初始化控制字和操作命令字接收下来,通过8259A的内部总线传送到相应的寄存器中,也用来把8259A的状态通过数据总线D7~D0传送至CPU

   读/写控制逻辑

    是CPU与8259A进行控制信息交换的接口

    CS:片选信号线

    A0:奇/偶地址选择信号线,与WR或RD信号配合,作为访问的控制寄存器的端口地址

    WR/RD:读写信号线

   级联控制/比较器

    级联缓冲/比较器用于多块8259A的连接

    主8259A:与CPU相连的8259A

    从8259A:与主8259A相连的8259A

    CAS0~CAS2:级联信号线,对于主8259A输出选择从8259A,对于从8259A输入

    SP/EN:此信号线为双向,当为输入时,用于选择本片是主片还是从片,SP/EN=1,该片为主片,SP/EN=0,该片为从片,当为输出时,SP/EN可作为启动数据总线驱动器的启动信号。

   中断请求寄存器IRR

    为8位寄存器,是8259A与外设中断源相接的接口,IR7~IR0与8个中断源相接,当有中断源申请中断时,使相应位置1

   中断屏蔽寄存器IMR

    为8位寄存器,当中断源的中断申请被屏蔽,中断屏蔽寄存器的相应位置1,禁止该位对应的中断源申请中断

   中断服务寄存器ISR

    为8位寄存器,用8位的某位置1,记录CPU当前正为那个中断源服务,该信号一直保持CPU处理完该中断服务程序为止。如果有多位置1,表示发生了中断嵌套

   优先级判别器PR

    用来识别中断请求信号的优先级别

   控制逻辑

    ICW1~ICW4用来存放初始化程序设定的工作方式字,管理8259A的工作方式,OCW1~OCW3用来存放操作命令字,对中断处理过程进行动态的控制

  8259A的引脚

   

   D0~D7:双向数据输入/输出引脚

   IR0~IR7:中断请求输入引脚

   INT:中断请求输出引脚,高电平有效

   INTA:中断响应信号输入引脚,低电平有效

   RD:读控制信号输入引脚,低电平有效

   WR:写控制信号输入引脚,低电平有效

   CS:片选信号输入引脚,低电平有效

   A0:当A0=0 ICW1,OCW2,OCW3; A0=1 ICW2,ICW3,ICW4,OCW1

   CAS0~CAS2:级联信号引脚,用来选择从片,当8259A为主片时输出,当8259A为从片时,输入

   SP/EN:从片编程/允许缓冲器,双功能引脚

  8259A的中断工作过程

   1.当中断请求输入线IR0~IR7中有一条或多条变高时,则中断请求寄存器IRR的相应位置 1

   2.若对中断源的中断申请不屏蔽的情况下,向中断控制器发中断申请信号,中断控制器把该信号转发给优先级判别器

   3.优先级判别器根据中断申请寄存器的内容决定处理哪个中断源申请的中断,在根据中断服务寄存器的内容决定CPU正响应哪一级中断源,经过优先级判别器决定该中断源是否高于CPU正在服务的中断源,若高于,通过控制逻辑的INT线向CPU申请中断

   4.如果CPU处于开中断状态,则在当前指令执行完后,用INTA信号作为响应

   5.8259A接收到INTA信号后,使中断服务寄存器ISR相应位置1,使中断请求寄存器IRR的相应位置0,以避免该中断源再次发生中断申请

   6.CPU输出第二个INTA信号启动第二个中断响应周期。8259A向CPU发送中断向量码,CPU转入中断服务程序

   7.8259A工作在AEOI模式,则在第二个INTA脉冲信号结束时,将使被响应的中断源在ISR中的对应位清0;否则,直到中断服务程序结束,发出EOI命令,才使ISR中的对应位清0

  8259A的工作方式

   中断请求方式

    边沿触发方式

     是中断源IR7~IR0出现由低电平向高电平的跳变时请求中断信号

     优点:申请中断IRi端可以一直保持高电平

    电平触发方式

     是中断源IR7~IR0的中断申请端置为高电平,作为请求中断信号

     优点:可靠,不会因IRi端引入干扰信号而引起误操作

    中断查询方式

     CPU的IF=0,CPU处于关中断状态,CPU对IR7~IR0端上的中断请求采用查询方式,使CPU了解哪一个中断源有中断申请并为它服务

   中断屏蔽方式

    普通屏蔽方式

     CPU执行某一级中断服务程序时,只允许比该优先级高的中断源申请中断

    特殊屏蔽方式

     CPU执行某一级中断服务程序时,只对本级中断屏蔽,允许级别比它高或低的中断源提出中断申请

   中断嵌套方式

    全嵌套方式

     中断优先级IR0最高,IR7最低,高级中断源可以中断低级中断源

    特殊全嵌套方式

     可以响应同级别的中断请求,从而实现对同级中断请求的特殊嵌套

   中断优先级设置方式

    自动循环优先级方式

     一个中断源被服务后,其优先级自动排到最低

    特殊循环优先级方式

     初始优先级是由编程设定的

   中断结束方式

    自动中断结束

     只能用于不要求中断嵌套的场合

     中断服务寄存器的相应位清零是由硬件自动完成的

    非自动中断结束

     一般中断结束方式

      通过软件方法发出一中断结束命令,使当前中断服务寄存器中级别最高的置1位清零

      只能应用于全嵌套方式下

     特殊的中断结束方式

      通过软件方法发出一中断结束命令,同时给出结束中断的中断源是哪一级,使该中断源的中断服务寄存器的相应位置0

   连接系统总线的方式

    缓冲方式。8259A通过总线驱动器和数据总线相连,适用于多片8259A级联的大系统中

    非缓冲方式。8259A直接和数据总线相连。用于单片8259A或片数不多的系统中

  8259A的编程

   初始化命令字编程

    

    ICW1为偶地址A0 = 0 ;ICW2,ICW3,ICW4为奇地址 A0 = 1

    ICW1

     D0位:是否设置ICW4,对于8086/8088必须设置; D0=1

     D1位:表示有一片,还是级联方式;D1 = 0 表示级联,D1 = 1表示单片

     D2位:对8086/8088系统不起作用,默认为 0

     D3位:中断请求触发方式,D3 = 0 表示上升沿触发;D3 = 1 表示电平触发

     D4位:特征位;表示当前设置的是初始化控制字ICW1, 为 1

     D7~D5位:在8086/8088系统中不用,设为0

     ICW1可能的值

      单片上升沿 = 13H

      单片电平触发 = 1BH

      级联上升沿 = 11H

      级联电平触发 = 19H

    ICW2

     ICW2为设置中断类型号的初始化控制字

     D7~D3:由用户决定

     D2~D0:按中断请求引脚IR0~IR7的编码自动填充

    ICW3

     ICW3用于级联方式,ICW1的D1位为0,才需要对ICW3设置

     D7~D0: 为1表示对应的IRi的引脚有从片,为0表示对应的IRi的引脚没有从片

    ICW4

     D0:系统选择位,8086/8088系统 D0 = 1

     D1:中断结束方式位。D1 = 0 非自动EOI方式;D1=1 自动EOI方式

     D3D2:D3D2 = 00 非缓冲方式工作;D3D2 = 10 缓冲方式从片; D3D2= 11 缓冲方式主片

     D4:嵌套方式选择位;D4 = 0 正常全嵌套方式;D4 = 1 特殊全嵌套方式

     D7~D5:特征位,为000,表示现在送出的控制字为ICW4

   操作命令字编程

    OCW2,OCW3为偶地址 A0 = 0 ;OCW1为奇地址 A0 = 1 ;

    OCW1

     中断屏蔽操作控制字,写入中断屏蔽寄存器IMR中,对外部中断请求信号进行屏蔽

     D7~D0:当某位为0时,对应IRi中断请求被允许,当为1时,对应的IRi中断请求被屏蔽

    OCW2

     

     OCW2用来设置优先级循环方式和中断结束方式

     当中断结束方式为非自动EOI时才需要设置

    OCW3

     

     OCW3设置屏蔽方式和读状态控制字

     D1D0:当D1D0 = 10 读中断请求寄存器的内容;D1D0 = 11 读中断服务寄存器的内容

     D2:查询工作设置位;D2=0 设置正常中断方式,D2=1 设置查询工作方式

     D4D3:特征位,为01

     D5:设置或取消特殊屏蔽位,D5=0取消特殊屏蔽方式,D5=1设置特殊屏蔽方式

     D6:特殊的屏蔽模式允许位,D6=1,允许D5设置或取消特殊屏蔽位,D6=0,禁止D5设置

     D7:为0

常用接口技术

 8253可编程计数器

  8253的结构与引脚

   

   数据总线缓冲器

    数据总线缓冲器是三态,双向,8位的缓冲器,作为系统总线和8253的接口,缓冲器根据CPU的输入和输出指令实现数据传送

    CPU向8253写入的控制字经过数据总线缓冲器和8253的内部数据总线传送给控制字寄存器进行寄存

    CPU向某计数器写入计数初值送入指定的计数器

    CPU读取某个计数器的现行值时,该现行值经过内部总线和缓冲器传送到系统的数据总线上,被CPU读取

   读/写逻辑

    CS片选信号,低电平有效

    RD读信号,低电平有效

    WR写信号,低电平有效

    A1A0地址信号

     00 计数器0

     01 计数器1

     10 计数器2

     11 控制寄存器

   控制寄存器

    寄存数据总线缓冲器送来的控制字,控制寄存器有3个,都是8位寄存器,分别对应3个计数器,控制字的最高2位决定送入哪个计数器的控制寄存器寄存,各自的控制字决定各自的工作方式和所执行的操作

   计数器

    计数器0与计数器1和计数器2是三个独立的计数器,它们的内部结构相同,都具有计数器的初始值,减一计数器,输出寄存器

    计数初值寄存器:接收CPU写入的计数器的初始值

    减一计数器:在ClK脉冲(GATE允许)作用下进行递减计数,直至计数值为0,输出OUT信号

    输出寄存器:输出寄存器的值随着减一计数器变化,仅当写入锁存控制字时,它锁存减一计数器的当前计数值,CPU读取后,解除锁存状态。

    CLK:时钟脉冲

    GATE:允许标志

    OUT:计数器输出信号

  8253的控制字

   D7D6

    计数器选择

    00 :选计数器0

    01 :选计数器1

    10 : 选计数器2

    11 :无效

   D5D4

    计数初值长度选择

    00 :计数器的数据锁存于缓冲器

    01 : 只读 /写低8位,高8位默认为0

    10 :只读/写高8位,低8位默认为0

    11 :先读/写低8位,再读/写高8位

   D3D2D1

    工作方式选择

    000 :方式0

    001 :方式1

    X10 :方式2

    X11 :方式3

    100 :方式4

    101 :方式5

   D0

    数制选择

    0 :二进制

    1 :BCD码

   读出计数值

    在计数过程中,当8253收到控制字D5D4=00时,计数器的当前值被锁存到16位的输出锁存器中。CPU读取计数值的方法:先读写低8位,在读写高8位

   计数范围

    二进制的计数范围0~65536,0为最大计数初值,代表65536

    十进制的计数范围0~10000,0为最大计数初值,代表10000,十进制的计数初值以BCD码的形式写入计数器

  8253的工作方式

   方式0 (计数结束中断)___----

    软件启动:GATE为高电平

    不自动重复计数

    OUT初始状态为低电平,计数结束后OUT端输出高电平

   方式1(硬件触发单稳负脉冲)out端输出 N*clk 个负脉冲

    硬件启动: GATE端由低到高触发,在下一个CLK脉冲开始计数

    不自动重复工作方式,可重复触发(计数结束后,GATE端由低到高跳变,开始新一轮计数)

    OUT初始状态为高电平,计数开始,OUT端由高变低,计数结束OUT端输出高电平,OUT端的负脉冲宽度 = 计数初值N * Tclk

   方式2(分频器)

    可以软件启动,也可以硬件启动

    软件启动:在写入控制字和计数初值期间GATE一直为高电平,则在下一个CLK开始计数

    硬件启动:若写入计数初值时GATE为低电平,则要等到GATE由低到高时才启动

    计数器自动重复工作

    OUT端初始状态为高电平,计数结束,OUT端由高变低,输出一个宽度为Tclk的负脉冲信号,其脉冲周期为 To = N * Tclk,脉冲频率: fo = Fc/N

   方式3(方波发生器)

    可以软件启动,也可以硬件启动

    软件启动:写入控制字后,如果GATE为高,写入初值后开始减一计数

    硬件启动:写入控制字后,等待GATE由低到高的跳变,计数器开始工作

    计数器自动重复工作

    OUT端初始状态为高电平,当计数值减到N/2时,OUT端输出变为低电平,直到计数值为0,自动重新装入初值,OUT变为高电平,计数器自动重复工作,OUT端输出对称方波

   方式4(软件触发选通) out端输出一个负脉冲

    软件启动:GATE为高电平,写入控制字,计数器装入初值,启动计数,在计数过程中若GATE为低,则停止计数

    不自动重复计数方式

    OUT端初始状态为高电平,计数结束后,OUT端输出宽度为Tclk的负脉冲

   方式5(硬件触发选通)out端输出一个负脉冲

    硬件启动:写入控制字,计数初值,GATE由低到高跳变,计数器开始计数(在计数过程中,GATE产生由低到高跳变,则重新装入计数初值,开始计数)

    不自动重复的工作方式

    OUT端初始状态为高电平,计数结束后,OUT端输出一个脉冲宽度为Tclk的负脉冲信号

  8253的初始化编程

   进行控制字的写入,和写入计数初值

   控制字写入8253的控制寄存器,3个控制字可以连续写入控制寄存器

   计数初值应写入相应的计数器中,计数初值的写法要符合控制字的要求

 8255A可编程并行通信接口芯片

  8255A的内部结构

   

   数据总线缓冲器

    是一个三态双向8位缓冲器,它是8255与系统数据总线的接口。输入输出的数据以及CPU发出的命令控制字和外设的状态信息,都通过数据总线缓冲器传送

   读/写控制逻辑:负责控制8255A与CPU之间的数据传送过程

   A组控制

    控制A端口与C端口的上半部分(PC7~PC4)

    根据CPU的命令字控制8255工作方式的电路

   B组控制

    控制B端口与C端口的下半部分(PC3~PC0)

    根据CPU的命令字控制8255工作方式的电路

   端口A,B,C

    端口A,B,C都是8位端口,可以选择作为输入或输出,可以将端口C的高四位和低四位分开使用,分别作为输入或输出

    当端口A和端口B作为选通输入或输出的数据端口时,端口C的指定位与端口A和端口配合使用,用作控制信号或状态信号

   A0,A1

    芯片内部寄存器地址选择信号

    A1A0 = 00 A口地址,A1A0 = 01 B口地址,A1A0 = 10 C口地址 A1A0 = 11 控制端口地址

   RD,WR

    读,写信号,低电平有效

   CS

    芯片选择信号,输入,低电平有效

   RESET

    复位信号,高电平有效,当RESET有效时,将所有内部寄存器,包括控制寄存器清零,把A,B,C三个端口都设置为输入方式,对应的引脚为高阻态

  8255A的工作方式

   8255A在使用之前要先写入一个工作方式控制字,指定A,B,C三个端口各自的工作方式

   方式0(基本输入输出方式)

    方式0最适用于无条件传送方式,也可以用于查询工作方式,不能工作在中断方式

    三个端口的均可工作在方式0

    A口,B口,C口的高四位,C口的低四位,可分别定义为输入和输出

    C口可按位进行置位和复位

   方式1(选通输入输出方式)

    方式1适用于程序查询和中断控制方式,不能工作在无条件传送方式

    A口,B口可以工作在方式1

    选通输入输出方式:A口,B口作为数据的输入口或输出口,C口的某些位来提供控制信号

    方式1选通输出

     A口,B口都可以选通输出数据,C口的6条线作为选通控制信号,PC3,PC6,PC7配合A口,PC0,PC1,PC2配合B口

     ACK:外设收到数据的应答信号

     OBF:输出缓冲器满信号

     INTR:中断请求信号

     INTE:中断允许状态

     

      查询方式工作过程:CPU先查询PC7,查看输出缓冲器是否满,如果未满,则发送数据,如果已满,则继续查询等待

      中断方式工作过程:置位PC6,使INTE为1允许中断请求,如果外设收到数据,发出应答信号,OBF将被置为1,8255A将发出中断请求,CPU响应中断,向8255A发送数据,缓冲器满OBF将会为低电平,外设再次接收数据,并发出应答信号,OBF被置1,8255A再次发出中断请求

     

      查询方式工作过程:CPU先查询PC1,查看输出缓冲器是否满,如果未满,则发送数据,如果已满,则继续查询等待

      中断方式工作过程:置位PC2,使INTE为1允许中断请求,如果外设收到数据,发出应答信号,OBF将被置为1,8255A将发出中断请求,CPU响应中断,向8255A发送数据,缓冲器满OBF将会为低电平,外设再次接收数据,并发出应答信号,OBF被置1,8255A再次发出中断请求

    方式1选通输入

     A口,B口都可以选通输入数据,C口的6条线作为选通控制信号,PC3,PC4,PC5配合A口,PC0,PC1,PC2配合B口

     STB:输入选通信号

     IBF:数据输入缓冲器满信号

     INTR:中断请求信号

     INTE:中断允许状态位

     

      查询工作过程:CPU查询PC5,如果数据输入缓冲器满,则取走数据,否则将继续等待查询

      中断工作过程:CPU置位PC4,允许中断,外部设备输入数据,发出输入选通信号,当数据输入缓冲器满,则向CPU发出中断请求,CPU响应中断,取走数据,数据输入缓冲器满信号消失,外设继续发送数据,当数据输入缓冲器满,再次请求中断

     

      查询工作过程:CPU查询PC1,如果数据输入缓冲器满,则取走数据,否则将继续等待查询

      中断工作过程:CPU置位PC2,允许中断,外部设备输入数据,发出输入选通信号,当数据输入缓冲器满,则向CPU发出中断请求,CPU响应中断,取走数据,数据输入缓冲器满信号消失,外设继续发送数据,当数据输入缓冲器满,再次请求中断

   方式2(双向输入输出方式)

    方式2适用于程序查询和中断控制方式,不能工作在无条件传送方式

    只有A口可以工作在方式2

    A口的输入输出均具有数据锁存能力,数据的输入输出均可以引起中断,在此方式下,C端口的PC3~PC6作为应答控制信号和中断请求线配合A口

  8255A的编程

   8255A的内部有两种控制字工作方式控制字和C端口按位置位/复位控制字

   工作方式控制字:用于设置各个端口的工作方式,规定接口功能

   C端口按位置位/复位控制字:专门用于对C端口的任何一位实现置"1"或置"0"的控制字

   工作方式控制字

    8255A的方式控制字通过8255A的控制口写入到8255A的控制寄存器中

    D7位:方式控制字的特征位,D7=1,表示向作方式控制字写入数据,D7=0,表示向C端控制字写入数据

    D6D5:选择A口工作方式

     0 0 :方式0

     0 1 :方式1

     1 0 :方式2

    D4 : 选择A口输入/输出

     0 :输出

     1 :输入

    D3:PC7~PC4输入/输出

     0:输出

     1:输入

    D2:B口工作方式

     0:方式0

     1:方式1

    D1:B口输入/输出

     0:输出

     1:输入

    D0:PC3~PC0输入/输出

     0:输出

     1:输入

   C端口按位置位/复位控制字

    C口的按位置位/复位控制字必须跟在方式选择控制字之后写入控制字寄存器,即使仅使用该功能,也应先选送一个方式控制字,方式控制字只需要写入一次,之后就可以多次使用C口按位置位/复位控制字对C口的某些位进行置1或清0

    D7:特征位,D7 = 0

    D6D5D4:未定义,为 000

    D3D2D1:C口的位选择

    D0: D0=0,即对C的某一位进行清0,D0=1,即对C的某一位进行置1