- 8085微处理器
- 微处理器 - 8085 架构
- 8085 引脚配置
- 寻址模式和中断
- 8085指令集
- 多处理器配置
- 配置概述
- 8087 数字数据处理器
- 输入/输出接口
- I/O 接口概述
- 8279 可编程键盘
- 8257 DMA 控制器
- 微处理器有用资源
- 微处理器 - 快速指南
- 微处理器 - 有用的资源
- 微处理器 - 讨论
微处理器 - 快速指南
微处理器 - 概述
微处理器是微型计算机的控制单元,制造在一块小芯片上,能够执行 ALU(算术逻辑单元)运算并与连接到它的其他设备进行通信。
微处理器由ALU、寄存器阵列和控制单元组成。ALU 对从存储器或输入设备接收的数据执行算术和逻辑运算。寄存器数组由B、C、D、E、H、L等字母标识的寄存器和累加器组成。控制单元控制计算机内的数据和指令流。
基本微型计算机的框图
微处理器如何工作?
微处理器遵循以下顺序:获取、解码,然后执行。
最初,指令按顺序存储在存储器中。微处理器从内存中取出这些指令,然后对其进行解码并执行这些指令,直到到达 STOP 指令。随后,它将二进制结果发送到输出端口。在这些过程之间,寄存器存储临时数据,ALU 执行计算功能。
微处理器中使用的术语列表
以下是微处理器中一些常用术语的列表 -
指令集- 这是微处理器可以理解的指令集。
带宽- 它是单个指令中处理的位数。
时钟速度- 它决定处理器每秒可以执行的操作数。它以兆赫 (MHz) 或千兆赫 (GHz) 表示。也称为时钟速率。
字长- 它取决于内部数据总线、寄存器、ALU 等的宽度。8 位微处理器一次可以处理 8 位数据。字长范围从 4 位到 64 位,具体取决于微型计算机的类型。
数据类型- 微处理器具有多种数据类型格式,如二进制、BCD、ASCII、有符号和无符号数字。
微处理器的特点
以下列出了任何微处理器的一些最突出的功能 -
成本效益- 微处理器芯片价格低廉,因此成本低廉。
尺寸- 微处理器采用小尺寸芯片,因此便于携带。
低功耗- 微处理器采用金属氧化物半导体技术制造,功耗低。
多功能性- 微处理器是多功能的,因为我们可以通过配置软件程序在多种应用中使用同一芯片。
可靠性- 微处理器中IC的故障率非常低,因此它是可靠的。
微处理器 - 分类
微处理器可以分为三类 -
精简指令集处理器
RISC 代表精简指令集计算机。它旨在通过简化计算机的指令集来减少执行时间。使用RISC处理器,每条指令仅需要一个时钟周期即可以统一的执行时间执行结果。这会降低效率,因为代码行数更多,因此需要更多 RAM 来存储指令。编译器还必须做更多工作才能将高级语言指令转换为机器代码。
一些 RISC 处理器是 -
- 电源电脑:601、604、615、620
- DEC 阿尔法:210642、211066、21068、21164
- MIPS:TS (R10000) RISC 处理器
- PA-RISC:HP 7100LC
RISC架构
RISC微处理器架构使用高度优化的指令集。由于其电源效率,它被用于 Apple iPod 等便携式设备。
RISC的特点
RISC 处理器的主要特点如下:
它由简单的说明组成。
它支持各种数据类型格式。
它利用简单的寻址模式和固定长度指令进行流水线操作。
它支持在任何上下文中使用注册。
一个周期的执行时间。
“LOAD”和“STORE”指令用于访问内存位置。
它由大量寄存器组成。
它由较少数量的晶体管组成。
CISC处理器
CISC 代表复杂指令集计算机。它旨在最大限度地减少每个程序的指令数量,忽略每条指令的周期数。重点是将复杂的指令直接构建到硬件中。
编译器只需做很少的工作即可将高级语言翻译成汇编级语言/机器代码,因为代码的长度相对较短,因此需要很少的 RAM 来存储指令。
一些 CISC 处理器是 -
- IBM 370/168
- VAX 11/780
- 英特尔80486
CISC架构
其架构旨在降低内存成本,因为较大的程序需要更多的存储空间,从而导致更高的内存成本。为了解决这个问题,可以通过在单个指令中嵌入操作数来减少每个程序的指令数。
CISC的特点
- 多种寻址方式。
- 指令数量较多。
- 指令格式长度可变。
- 执行一条指令可能需要几个周期。
- 指令解码逻辑很复杂。
- 需要一条指令支持多种寻址模式。
特殊处理器
这些是为某些特殊目的而设计的处理器。很少简要讨论特殊处理器 -
协处理器
协处理器是一种专门设计的微处理器,它处理其特定功能的速度比普通微处理器快很多倍。
例如- 数学协处理器。
一些英特尔数学协处理器是 -
- 8087-与8086配合使用
- 80287-与80286配合使用
- 80387-与80386配合使用
输入/输出处理器
它是一种专门设计的微处理器,具有自己的本地存储器,用于以最少的 CPU 参与来控制 I/O 设备。
例如-
- DMA(直接内存访问)控制器
- 键盘/鼠标控制器
- 图形显示控制器
- SCSI 端口控制器
晶片机(晶体管计算机)
晶片机是一种专门设计的微处理器,具有自己的本地存储器,并具有将一个晶片机连接到另一个晶片机以进行处理器间通信的链路。它最初由 Inmos 于 1980 年设计,旨在利用 VLSI 技术。
晶片机可以用作单处理器系统,也可以连接到外部链路,从而降低了建设成本并提高了性能。
例如- 16 位 T212、32 位 T425、浮点(T800、T805 和 T9000)处理器。
DSP(数字信号处理器)
该处理器专门设计用于将模拟信号处理为数字形式。这是通过定期采样电压电平并将该时刻的电压转换为数字形式来完成的。此过程由称为模数转换器、模数转换器或 ADC 的电路执行。
DSP 包含以下组件 -
程序存储器- 它存储 DSP 将用来处理数据的程序。
数据存储器- 它存储要处理的信息。
计算引擎- 它执行数学处理,从程序存储器访问程序并从数据存储器访问数据。
输入/输出- 它连接到外部世界。
它的应用是 -
- 声音和音乐合成
- 音视频压缩
- 视频信号处理
- 2D 和 3D 图形加速。
例如- Texas Instrument 的 TMS 320 系列,例如 TMS 320C40、TMS320C50。
微处理器 - 8085 架构
8085 发音为“八十八”微处理器。它是Intel于1977年采用NMOS技术设计的8位微处理器。
它具有以下配置 -
- 8位数据总线
- 16位地址总线,最大可寻址64KB
- 16位程序计数器
- 16位堆栈指针
- 6个8位寄存器成对排列:BC、DE、HL
- 需要 +5V 电源才能以 3.2 MHZ 单相时钟运行
用于洗衣机、微波炉、手机等。
8085 微处理器 – 功能单元
8085 由以下功能单元组成 -
累加器
它是一个 8 位寄存器,用于执行算术、逻辑、I/O 和加载/存储操作。它连接到内部数据总线和ALU。
算术逻辑单元
顾名思义,它对 8 位数据执行加法、减法、AND、OR 等算术和逻辑运算。
通用寄存器
8085处理器中有6个通用寄存器,即B、C、D、E、H和L。每个寄存器可以保存8位数据。
这些寄存器可以成对工作以保存 16 位数据,它们的配对组合如 BC、DE 和 HL。
程序计数器
它是一个16位寄存器,用于存储下一条要执行的指令的内存地址位置。每当执行一条指令时,微处理器就会递增程序,以便程序计数器指向下一条要执行的指令的内存地址。
堆栈指针
它也是一个 16 位寄存器,其工作方式类似于堆栈,在入栈和出栈操作期间总是递增/递减 2。
临时登记
它是一个8位寄存器,保存算术和逻辑运算的临时数据。
标志寄存器
它是一个 8 位寄存器,具有 5 个 1 位触发器,根据累加器中存储的结果保存 0 或 1。
这些是 5 个触发器的集合 -
- 标志(S)
- 零 (Z)
- 辅助携带 (AC)
- 奇偶校验(P)
- 携带 (C)
其位位置如下表所示 -
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
S | Z | 交流电 | 磷 | CY |
指令寄存器和译码器
它是一个8位寄存器。当从内存中取出一条指令时,它将存储在指令寄存器中。指令解码器对指令寄存器中存在的信息进行解码。
计时和控制单元
它向微处理器提供定时和控制信号以执行操作。以下是控制外部和内部电路的时序和控制信号 -
- 控制信号:READY、RD'、WR'、ALE
- 状态信号:S0、S1、IO/M'
- DMA 信号:HOLD、HLDA
- 复位信号:RESET IN、RESET OUT
中断控制
顾名思义,它控制进程期间的中断。当微处理器正在执行主程序时,每当发生中断时,微处理器就会将控制权从主程序转移到处理传入的请求。请求完成后,控制返回主程序。
8085微处理器中有5个中断信号:INTR、RST 7.5、RST 6.5、RST 5.5、TRAP。
串行输入/输出控制
它通过使用这两个指令来控制串行数据通信:SID(串行输入数据)和SOD(串行输出数据)。
地址缓冲区和地址数据缓冲区
堆栈指针和程序计数器中存储的内容被加载到地址缓冲区和地址数据缓冲区中以与CPU通信。存储器和I/O芯片连接到这些总线;CPU可以与存储器和I/O芯片交换所需的数据。
地址总线和数据总线
数据总线承载要存储的数据。它是双向的,而地址总线将位置传送到应存储的位置,并且它是单向的。它用于传输数据和地址 I/O 设备。
8085 建筑
我们尝试用下图来描述 8085 的架构 -
微处理器 - 8085 引脚配置
下图描绘了 8085 微处理器的引脚图 -
8085微处理器的引脚可分为七组 -
地址总线
A15-A8,它携带内存/IO 地址的最高有效 8 位。
数据总线
AD7-AD0,它携带最低有效的8位地址和数据总线。
控制和状态信号
这些信号用于识别操作的性质。有3个控制信号和3个状态信号。
三个控制信号是 RD、WR 和 ALE。
RD - 该信号指示要读取选定的 IO 或存储设备,并准备好接受数据总线上的可用数据。
WR - 该信号表示数据总线上的数据将写入选定的内存或 IO 位置。
ALE - 这是微处理器开始新操作时生成的正向脉冲。当脉冲变高时,表示地址。当脉冲下降时,表示有数据。
三个状态信号是 IO/M、S0 和 S1。
IO/M
该信号用于区分IO和内存操作,即当它为高时表示IO操作,当它为低时表示内存操作。
S1 & S0
这些信号用于识别当前操作的类型。
电源
有 2 个电源信号 - VCC 和 VSS。VCC表示+5V电源,VSS表示地信号。
时钟信号
有3个时钟信号,即X1、X2、CLK OUT。
X1、X2 - 晶体(RC、LC N/W)连接在这两个引脚上,用于设置内部时钟发生器的频率。该频率被内部除以 2。
CLK OUT - 该信号用作与微处理器连接的设备的系统时钟。
中断和外部启动信号
中断是外部设备产生的信号,用于请求微处理器执行任务。中断信号有5个,分别是TRAP、RST 7.5、RST 6.5、RST 5.5、INTR。我们将在中断部分详细讨论中断。
INTA - 这是一个中断确认信号。
RESET IN - 该信号用于通过将程序计数器设置为零来重置微处理器。
RESET OUT - 该信号用于在微处理器复位时复位所有连接的设备。
READY - 该信号表示设备已准备好发送或接收数据。如果 READY 为低电平,则 CPU 必须等待 READY 变高。
HOLD - 该信号表示另一个主机正在请求使用地址和数据总线。
HLDA(HOLD 确认) - 表示 CPU 已收到 HOLD 请求,并将在下一个时钟周期释放总线。HOLD 信号移除后,HLDA 设置为低电平。
串行I/O信号
有2个串行信号,即SID和SOD,这些信号用于串行通信。
SOD(串行输出数据线) - 输出 SOD 根据 SIM 指令的指定进行设置/重置。
SID(串行输入数据线)- 每当执行 RIM 指令时,该线上的数据都会加载到累加器中。
8085 寻址模式和中断
现在我们来讨论8085微处理器中的寻址方式。
8085 中的寻址模式
这些指令用于将数据从一个寄存器传输到另一个寄存器、从存储器传输到寄存器、从寄存器传输到存储器,而不改变内容。8085 中的寻址模式分为 5 组 -
立即寻址方式
在此模式下,8/16 位数据在指令本身中指定为其操作数之一。例如: MVI K,20F:表示将20F复制到寄存器K中。
寄存器寻址方式
在此模式下,数据从一个寄存器复制到另一个寄存器。例如: MOV K,B:表示将寄存器B中的数据复制到寄存器K中。
直接寻址方式
在此模式下,数据直接从给定地址复制到寄存器。例如: LDB 5000K:表示将地址5000K处的数据复制到寄存器B。
间接寻址方式
在这种模式下,数据通过寄存器指向的地址从一个寄存器传输到另一个寄存器。例如: MOV K、B:表示将数据从寄存器指向的内存地址传送到寄存器K。
隐含寻址模式
该模式不需要任何操作数;数据由操作码本身指定。例如: CMP。
8085 中的中断
中断是外部设备产生的信号,用于请求微处理器执行任务。中断信号有5个,分别是TRAP、RST 7.5、RST 6.5、RST 5.5、INTR。
中断根据其参数分为以下几组 -
向量中断- 在这种类型的中断中,处理器知道中断地址。例如: RST7.5、RST6.5、RST5.5、TRAP。
非向量中断- 在这种类型的中断中,处理器不知道中断地址,因此,中断地址需要由设备外部发送来执行中断。例如: INTR。
可屏蔽中断- 在这种类型的中断中,我们可以通过在程序中写入一些指令来禁用中断。例如: RST7.5、RST6.5、RST5.5。
不可屏蔽中断- 在这种类型的中断中,我们无法通过向程序中写入一些指令来禁用中断。例如:陷阱。
软件中断- 在这种类型的中断中,程序员必须将指令添加到程序中才能执行中断。8085中有8个软件中断,即RST0、RST1、RST2、RST3、RST4、RST5、RST6、RST7。
硬件中断- 8085中有5个中断引脚用作硬件中断,即TRAP、RST7.5、RST6.5、RST5.5、INTA。
注- NTA 不是中断,微处理器使用它来发送确认。TRAP 的优先级最高,然后是 RST7.5,依此类推。
中断服务程序 (ISR)
执行时为相应中断源提供服务的小程序或例程称为 ISR。
陷阱
它是不可屏蔽中断,在所有中断中具有最高优先级。默认情况下,它处于启用状态,直到得到确认为止。如果发生故障,它会作为 ISR 执行并将数据发送到备份内存。该中断将控制权转移到地址 0024H。
RST7.5
它是一个可屏蔽中断,在所有中断中具有第二高的优先级。当执行该中断时,处理器将PC寄存器的内容保存到堆栈中并分支到003CH地址。
RST 6.5
它是一个可屏蔽中断,在所有中断中具有第三高的优先级。当执行该中断时,处理器将PC寄存器的内容保存到堆栈中并跳转到0034H地址。
RST 5.5
它是一个可屏蔽中断。当执行该中断时,处理器将PC寄存器的内容保存到堆栈中并跳转到002CH地址。
INTR
它是一个可屏蔽中断,在所有中断中具有最低优先级。可以通过重置微处理器来禁用它。
当INTR 信号变高时,可能会发生以下事件 -
微处理器在执行每条指令期间检查INTR信号的状态。
当INTR信号为高电平时,微处理器完成其当前指令并发送低电平有效中断确认信号。
当接收到指令时,微处理器将下一条指令的地址保存在堆栈上并执行接收到的指令。
微处理器 - 8085 指令集
让我们看一下8085微处理器的编程。
指令集是执行某些任务的指令代码。它分为五类。
编号 | 说明和描述 |
---|---|
1 | 控制指令
下表显示了控制指令列表及其含义。 |
2 | 逻辑指令
下表显示了逻辑指令及其含义的列表。 |
3 | 分支指令
下表显示了分支指令及其含义的列表。 |
4 | 算术指令
下表显示了算术指令及其含义的列表。 |
5 | 数据传输说明
下表显示了数据传输指令及其含义的列表。 |
8085 – 演示程序
现在,让我们看一下使用上述说明的一些程序演示 -
两个 8 位数字相加
编写一个程序,将3005H和3006H内存位置的数据相加,并将结果存储到3007H内存位置。
问题演示-
(3005H) = 14H (3006H) = 89H
结果-
14H + 89H = 9DH
程序代码可以这样写 -
LXI H 3005H:“HL 点 3005H” MOV A, M :“获取第一个操作数” INX H:“HL点数3006H” ADD M :“添加第二个操作数” INX H:“HL点数3007H” MOV M, A :“将结果存储在 3007H” HLT :“退出程序”
交换内存位置
编写一个程序来交换5000M和6000M内存位置的数据。
LDA 5000M : "Getting the contents at5000M location into accumulator" MOV B, A : "Save the contents into B register" LDA 6000M : "Getting the contents at 6000M location into accumulator" STA 5000M : "Store the contents of accumulator at address 5000M" MOV A, B : "Get the saved contents back into A register" STA 6000M : "Store the contents of accumulator at address 6000M"
按升序排列数字
编写一个程序,将内存地址3000H中的前10个数字按升序排列。
MVI B, 09 :"Initialize counter" START :"LXI H, 3000H: Initialize memory pointer" MVI C, 09H :"Initialize counter 2" BACK: MOV A, M :"Get the number" INX H :"Increment memory pointer" CMP M :"Compare number with next number" JC SKIP :"If less, don’t interchange" JZ SKIP :"If equal, don’t interchange" MOV D, M MOV M, A DCX H MOV M, D INX H :"Interchange two numbers" SKIP:DCR C :"Decrement counter 2" JNZ BACK :"If not zero, repeat" DCR B :"Decrement counter 1" JNZ START HLT :"Terminate program execution"
微处理器 - 8086 概述
8086微处理器是Intel于1976年设计的8085微处理器的增强版本。它是一个16位微处理器,具有20条地址线和16条数据线,可提供高达1MB的存储空间。它由强大的指令集组成,可以轻松地提供乘法和除法等运算。
它支持两种操作模式,即最大模式和最小模式。最大模式适用于具有多个处理器的系统,最小模式适用于具有单处理器的系统。
8086的特点
8086 微处理器最突出的特点如下:
它有一个指令队列,能够存储内存中的六个指令字节,从而提高处理速度。
它是首款具有 16 位 ALU、16 位寄存器、内部数据总线和 16 位外部数据总线的 16 位处理器,从而实现更快的处理速度。
根据操作频率,它有 3 个版本 -
8086 → 5MHz
8086-2 → 8MHz
(c)8086-1 → 10 MHz
它使用两个阶段的流水线,即获取阶段和执行阶段,从而提高了性能。
Fetch阶段可以预取最多6字节的指令并将它们存储在队列中。
执行阶段执行这些指令。
它有 256 个向量中断。
它由 29,000 个晶体管组成。
8085 和 8086 微处理器之间的比较
大小- 8085 是 8 位微处理器,而 8086 是 16 位微处理器。
地址总线- 8085 有 16 位地址总线,而 8086 有 20 位地址总线。
内存- 8085 最多可以访问 64Kb,而 8086 最多可以访问 1 Mb 内存。
指令- 8085 没有指令队列,而 8086 有指令队列。
流水线- 8085 不支持流水线架构,而 8086 支持流水线架构。
I/O − 8085 可以寻址 2^8 = 256 个 I/O,而 8086 可以访问 2^16 = 65,536 个 I/O。
成本- 8085 的成本较低,而 8086 的成本较高。
8086的架构
下图描述了 8086 微处理器的架构 -
微处理器 - 8086 个功能单元
8086微处理器分为两个功能单元,即EU(执行单元)和BIU(总线接口单元)。
欧盟(执行单位)
执行单元向BIU发出指令,说明从哪里获取数据,然后解码并执行这些指令。其功能是使用指令译码器和ALU来控制对数据的操作。如上图所示,EU与系统总线没有直接联系,它通过BIU对数据进行操作。
现在让我们讨论8086微处理器的功能部分。
算术逻辑单元
它处理所有算术和逻辑运算,如 +、−、×、/、OR、AND、NOT 运算。
标志寄存器
它是一个 16 位寄存器,其Behave类似于触发器,即它根据累加器中存储的结果改变其状态。它有 9 个标志,分为 2 组 - 条件标志和控制标志。
条件标志
它表示最后执行的算术或逻辑指令的结果。以下是条件标志列表 -
进位标志- 该标志指示算术运算的溢出情况。
辅助标志- 当在 ALU 执行操作时,会产生从低半字节(即 D0 – D3)到高半字节(即 D4 – D7)的进位/转位,然后设置此标志,即由 D3 位给出的进位到D4是AF标志。处理器使用此标志执行二进制到 BCD 的转换。
奇偶校验标志- 该标志用于指示结果的奇偶校验,即当结果的低8 位包含偶数个1 时,则设置奇偶校验标志。对于奇数个 1,奇偶校验标志被重置。
零标志- 当算术或逻辑运算的结果为零时,该标志设置为 1,否则设置为 0。
符号标志- 该标志保存结果的符号,即当运算结果为负时,符号标志设置为 1,否则设置为 0。
溢出标志- 该标志表示超出系统容量时的结果。
控制标志
控制标志控制执行单元的操作。以下是控制标志列表 -
陷阱标志- 用于单步控制并允许用户一次执行一条指令进行调试。如果设置了,则程序可以单步运行。
中断标志- 这是一个中断启用/禁用标志,即用于允许/禁止程序中断。对于中断允许条件,它设置为 1;对于中断禁止条件,它设置为 0。
方向标志- 用于字符串操作。顾名思义,当它被设置时,字符串字节将从较高的内存地址访问到较低的内存地址,反之亦然。
通用寄存器
共有8 个通用寄存器,即AH、AL、BH、BL、CH、CL、DH 和DL。这些寄存器可以单独使用来存储8位数据,也可以成对使用来存储16位数据。有效寄存器对是 AH 和 AL、BH 和 BL、CH 和 CL、DH 和 DL。分别称为AX、BX、CX、DX。
AX 寄存器- 也称为累加器寄存器。它用于存储算术运算的操作数。
BX 寄存器- 用作基址寄存器。它用于存储数据段内内存区域的起始基地址。
CX 寄存器- 称为计数器。它在循环指令中用于存储循环计数器。
DX 寄存器- 该寄存器用于保存 I/O 指令的 I/O 端口地址。
堆栈指针寄存器
它是一个 16 位寄存器,保存从段开头到最近在堆栈上存储字的内存位置的地址。
BIU(总线接口单元)
BIU 负责 EU 总线上的所有数据和地址传输,例如发送地址、从内存中获取指令、从端口和内存读取数据以及将数据写入端口和内存。EU 与系统总线没有直接连接,因此可以通过 BIU 实现这一点。EU和BIU与内部总线连接。
它具有以下功能部分 -
指令队列- BIU 包含指令队列。BIU 获取最多 6 个字节的下一条指令并将它们存储在指令队列中。当 EU 执行指令并准备好执行下一条指令时,它只需从该指令队列中读取指令即可,从而提高执行速度。
在当前指令执行时获取下一条指令称为流水线操作。
段寄存器- BIU 有 4 个段总线,即 CS、DS、SS 和 ES。它保存内存中指令和数据的地址,处理器使用这些地址来访问内存位置。它还包含1个指针寄存器IP,它保存EU要执行的下一条指令的地址。
CS - 它代表代码段。它用于寻址存储器代码段中存储可执行程序的存储器位置。
DS - 它代表数据段。它由程序使用的数据组成,并通过偏移地址或保存该偏移地址的其他寄存器的内容在数据段中访问。
SS - 它代表堆栈段。它在执行期间处理内存来存储数据和地址。
ES - 它代表额外段。ES是附加数据段,字符串用它来保存额外的目标数据。
指令指针- 它是一个 16 位寄存器,用于保存下一条要执行的指令的地址。
微处理器 - 8086 引脚配置
8086 是第一款采用 40 引脚 DIP(双列直插式封装)芯片的 16 位微处理器。现在让我们详细讨论 8086 微处理器的引脚配置。
8086引脚图
这是 8086 微处理器的引脚图 -
现在让我们详细讨论这些信号 -
电源和频率信号
它在 V CC引脚 40 处使用 5V 直流电源,并在 V SS引脚 1 和 20 处使用接地来进行操作。
时钟信号
时钟信号通过 Pin-19 提供。它为处理器的操作提供定时。不同版本其频率也不同,分别为5MHz、8MHz、10MHz。
地址/数据总线
AD0-AD15。这些是 16 个地址/数据总线。AD0-AD7携带低位字节数据,AD8AD15携带高位字节数据。在第一个时钟周期内,它携带 16 位地址,之后它携带 16 位数据。
地址/状态总线
A16-A19/S3-S6。这些是 4 个地址/状态总线。在第一个时钟周期内,它携带 4 位地址,随后携带状态信号。
S7/BHE
BHE 代表总线高启用。它位于引脚 34 处,用于指示使用数据总线 D8-D15 的数据传输。该信号在第一个时钟周期内为低电平,此后有效。
读取( $\overline{RD}$ )
它位于引脚 32 处,用于读取读操作的信号。
准备好
它位于引脚 22 处。它是来自 I/O 设备的数据传输确认信号。它是一个高电平有效信号。当它为高电平时,表明设备已准备好传输数据。当它为低电平时,表示等待状态。
重置
它位于引脚 21 处,用于重新启动执行。它导致处理器立即终止其当前活动。该信号在前 4 个时钟周期内为高电平有效,以重置微处理器。
INTR
它位于引脚 18 处。它是一个中断请求信号,在每条指令的最后一个时钟周期内进行采样,以确定处理器是否将此视为中断。
国家管理研究所
它代表不可屏蔽中断,可在引脚 17 处使用。它是边沿触发输入,会向微处理器发出中断请求。
$\overline{测试}$
该信号类似于等待状态,可在引脚 23 处使用。当该信号为高电平时,处理器必须等待 IDLE 状态,否则继续执行。
MN/ $\overline{MX}$
它代表最小/最大,可在引脚 33 处使用。它指示处理器运行的模式;当它为高时,它以最小模式工作,反之亦然。
国际商标协会
它是一个中断确认信号,并且 id 在引脚 24 处可用。当微处理器接收到该信号时,它会确认该中断。
爱尔
它代表地址使能锁存器,可在引脚 25 上使用。每次处理器开始任何操作时都会生成一个正脉冲。该信号指示地址/数据线上有效地址的可用性。
丹尼
它代表数据启用,可在引脚 26 处使用。它用于启用收发器 8286。收发器是用于将数据与地址/数据总线分离的设备。
DT/R
它代表数据发送/接收信号,位于引脚 27 处。它决定通过收发器的数据流方向。当它为高电平时,数据被传输出去,反之亦然。
主机/输入输出
该信号用于区分内存和 I/O 操作。当它为高电平时,表示I/O操作,当它为低电平时,表示存储器操作。它位于引脚 28 处。
WR
它代表写信号,位于引脚29。用于根据M/IO信号的状态将数据写入存储器或输出设备。
HLDA
它代表保持确认信号,可在引脚 30 处使用。该信号确认 HOLD 信号。
抓住
该信号向处理器指示外部设备正在请求访问地址/数据总线。它位于引脚 31 处。
QS 1和 QS 0
这些是队列状态信号,可在引脚 24 和 25 处使用。这些信号提供指令队列的状态。他们的条件如下表所示 -
质量标准0 | 质量标准1 | 地位 |
---|---|---|
0 | 0 | 无操作 |
0 | 1 | 队列中操作码的第一个字节 |
1 | 0 | 清空队列 |
1 | 1 | 队列中的后续字节 |
S 0 , S 1 , S 2
这些是提供操作状态的状态信号,总线控制器 8288 使用这些状态信号来生成存储器和 I/O 控制信号。这些可在引脚 26、27 和 28 处使用。下表显示了它们的状态 -
S 2 | S 1 | 0 _ | 地位 |
---|---|---|---|
0 | 0 | 0 | 中断确认 |
0 | 0 | 1 | 输入/输出读取 |
0 | 1 | 0 | 输入/输出写入 |
0 | 1 | 1 | 停 |
1 | 0 | 0 | 操作码获取 |
1 | 0 | 1 | 内存读取 |
1 | 1 | 0 | 内存写入 |
1 | 1 | 1 | 被动的 |
锁
当该信号有效时,它指示其他处理器不要要求CPU离开系统总线。它可以在任何指令上使用 LOCK 前缀激活,并且可在引脚 29 处使用。
RQ/GT 1和 RQ/GT 0
这些是其他处理器用来请求 CPU 释放系统总线的请求/授予信号。当CPU接收到信号时,它发送确认信号。RQ/GT 0具有比RQ/GT 1更高的优先级。
微处理器 - 8086 指令集
8086微处理器支持8种类型的指令 -
- 数据传输说明
- 算术指令
- 位操作指令
- 字符串指令
- 程序执行传输指令(分支和循环指令)
- 处理器控制指令
- 迭代控制指令
- 中断指令
现在让我们详细讨论这些指令集。
数据传输说明
这些指令用于将数据从源操作数传输到目标操作数。以下是该组下的指令列表 -
转移单词的指令
MOV - 用于将字节或字从提供的源复制到提供的目的地。
PPUSH - 用于将单词放在堆栈顶部。
POP - 用于将单词从堆栈顶部获取到提供的位置。
PUSHA - 用于将所有寄存器放入堆栈中。
POPA - 用于将字从堆栈获取到所有寄存器。
XCHG - 用于交换两个位置的数据。
XLAT - 用于使用内存中的表转换 AL 中的字节。
输入输出口传输指令
IN - 用于从提供的端口读取字节或字到累加器。
OUT - 用于将一个字节或字从累加器发送到提供的端口。
地址转移说明
LEA - 用于将操作数的地址加载到提供的寄存器中。
LDS - 用于从内存加载 DS 寄存器和其他提供的寄存器
LES - 用于从内存加载 ES 寄存器和其他提供的寄存器。
传送标志寄存器的指令
LAHF - 用于将标志寄存器的低字节加载到 AH。
SAHF - 用于将 AH 寄存器存储到标志寄存器的低字节。
PUSHF - 用于复制堆栈顶部的标志寄存器。
POPF - 用于将堆栈顶部的字复制到标志寄存器。
算术指令
这些指令用于执行加、减、乘、除等算术运算。
以下是该组下的指令列表 -
执行添加的说明
ADD - 用于将提供的字节与字节/字与字相加。
ADC - 用于加进位。
INC - 用于将提供的字节/字加 1。
AAA - 用于在添加后调整 ASCII。
DAA - 用于调整加法/减法运算后的小数。
执行减法的说明
SUB - 用于从字节中减去字节/从字中减去字。
SBB - 用于执行带借位的减法。
DEC - 用于将提供的字节/字减 1。
NPG - 用于对所提供的字节/字的每一位取反并添加 1/2 的补码。
CMP - 用于比较 2 个提供的字节/字。
AAS - 用于调整减法后的 ASCII 代码。
DAS - 用于调整减法后的小数。
执行乘法的指令
MUL - 用于将无符号字节乘以字节/字乘以字。
IMUL - 用于将有符号字节乘以字节/字乘以字。
AAM - 用于在乘法后调整 ASCII 代码。
执行除法的说明
DIV - 用于按字节划分无符号字或按字划分无符号双字。
IDIV - 用于按字节划分有符号字或按字划分有符号双字。
AAD - 用于调整分割后的 ASCII 代码。
CBW - 用于用低字节符号位的副本填充字的高字节。
CWD - 用于用低位字的符号位填充双字的高位字。
位操作指令
这些指令用于执行涉及数据位的操作,即逻辑、移位等操作。
以下是该组下的指令列表 -
执行逻辑运算的指令
NOT - 用于反转字节或字的每一位。
AND - 用于将一个字节/字中的每个位与另一个字节/字中的相应位相加。
OR - 用于将一个字节/字中的每个位与另一个字节/字中的相应位相乘。
XOR - 用于对一个字节/字中的每个位与另一个字节/字中的相应位执行异或运算。
TEST - 用于添加操作数来更新标志,而不影响操作数。
执行移位操作的指令
SHL/SAL - 用于向左移动字节/字的位并将零(S)放入LSB中。
SHR - 用于将字节/字的位向右移动并在 MSB 中放入零(S)。
SAR - 用于向右移动字节/字的位并将旧的 MSB 复制到新的 MSB。
执行旋转操作的指令
ROL - 用于向左旋转字节/字的位,即 MSB 到 LSB 并进位标志 [CF]。
ROR - 用于向右旋转字节/字的位,即LSB 到MSB 并进位标志[CF]。
RCR - 用于向右旋转字节/字的位,即LSB到CF和CF到MSB。
RCL - 用于向左旋转字节/字的位,即 MSB 到 CF 和 CF 到 LSB。
字符串指令
字符串是一组字节/字,它们的内存始终按顺序分配。
以下是该组下的指令列表 -
REP - 用于重复给定的指令,直到 CX ≠ 0。
REPE/REPZ - 用于重复给定指令,直到 CX = 0 或零标志 ZF = 1。
REPNE/REPNZ - 用于重复给定指令,直到 CX = 0 或零标志 ZF = 1。
MOVS/MOVSB/MOVSW - 用于将字节/字从一个字符串移动到另一个字符串。
COMS/COMPSB/COMPSW - 用于比较两个字符串字节/字。
INS/INSB/INSW - 用作从 I/O 端口到提供的内存位置的输入字符串/字节/字。
OUTS/OUTSB/OUTSW - 用作从提供的内存位置到 I/O 端口的输出字符串/字节/字。
SCAS/SCASB/SCASW - 用于扫描字符串并将其字节与 AL 中的字节或字符串字与 AX 中的字进行比较。
LODS/LODSB/LODSW - 用于将字符串字节存储到 AL 中或将字符串字存储到 AX 中。
程序执行转移指令(分支和循环指令)
这些指令用于在执行期间转移/分支指令。它包括以下说明 -
在执行期间无条件传输指令的指令 -
CALL - 用于调用过程并将其返回地址保存到堆栈中。
RET - 用于从过程返回到主程序。
JMP - 用于跳转到提供的地址以继续执行下一条指令。
在某些条件下执行期间传输指令的指令 -
JA/JNBE - 如果高于/不低于/等于指令满足则用于跳转。
JAE/JNB - 如果满足以上/不低于指令则用于跳转。
JBE/JNA - 用于在低于/等于/不高于指令满足时跳转。
JC - 如果进位标志 CF = 1,则用于跳转
JE/JZ - 用于在等于/零标志 ZF = 1 时跳转
JG/JNLE - 用于在大于/不小于/等于指令满足时跳转。
JGE/JNL - 用于在大于/等于/不小于指令满足时跳转。
JL/JNGE - 用于在小于/不大于/等于指令满足时跳转。
JLE/JNG - 用于在小于/等于/不大于指令满足时跳转。
JNC - 用于在没有进位标志时跳转(CF = 0)
JNE/JNZ - 用于在不等于/零标志 ZF = 0 时跳转
JNO - 如果没有溢出标志 OF = 0,则用于跳转
JNP/JPO - 如果没有奇偶校验/奇偶校验 PF = 0,则用于跳转
JNS - 如果没有符号 SF = 0,则用于跳转
JO - 如果溢出标志 OF = 1,则用于跳转
JP/JPE - 用于在奇偶校验/偶校验 PF = 1 时跳转
JS - 如果符号标志 SF = 1,则用于跳转
处理器控制指令
这些指令用于通过设置/重置标志值来控制处理器操作。
以下是该组下的说明 -
STC - 用于将进位标志 CF 设置为 1
CLC - 用于清除/重置进位标志 CF 为 0
CMC - 用于将补码置于进位标志 CF 的状态。
STD - 用于将方向标志 DF 设置为 1
CLD - 用于清除/重置方向标志 DF 为 0
STI - 用于将中断使能标志设置为1,即使能INTR 输入。
CLI - 用于将中断使能标志清除为0,即禁用INTR输入。
迭代控制指令
这些指令用于执行给定指令一定次数。以下是该组下的指令列表 -
LOOP - 用于循环一组指令,直到满足条件,即 CX = 0
LOOPE/LOOPZ - 用于循环一组指令,直到满足 ZF = 1 & CX = 0
LOOPNE/LOOPNZ - 用于循环一组指令,直到满足 ZF = 0 & CX = 0
JCXZ - 如果 CX = 0,则用于跳转到提供的地址
中断指令
这些指令用于在程序执行期间调用中断。
INT - 用于在执行和调用指定服务期间中断程序。
INTO - 如果 OF = 1,则用于在执行期间中断程序
IRET - 用于从中断服务返回主程序
微处理器 - 8086 中断
中断是在程序执行期间创建暂时停止的方法,并允许外围设备访问微处理器。微处理器通过ISR (中断服务例程)响应该中断,ISR 是一个简短的程序,用于指示微处理器如何处理中断。
下图显示了 8086 微处理器中的中断类型 -
硬件中断
硬件中断是由任何外围设备通过指定引脚向微处理器发送信号而引起的。
8086有两个硬件中断引脚,即NMI和INTR。NMI是不可屏蔽中断,INTR是具有较低优先级的可屏蔽中断。另外一个相关的中断引脚是 INTA,称为中断应答。
国家管理研究所
它是一个单一的不可屏蔽中断引脚 (NMI),其优先级高于可屏蔽中断请求引脚 (INTR),并且属于 2 类中断。
当该中断被激活时,将发生以下操作 -
完成当前正在进行的指令。
将标志寄存器值推入堆栈。
将返回地址的 CS(代码段)值和 IP(指令指针)值压入堆栈。
IP从字位置00008H的内容加载。
CS 从下一个字位置 0000AH 的内容加载。
中断标志和陷阱标志复位为 0。
INTR
INTR 是可屏蔽中断,因为只有使用设置中断标志指令启用中断时,微处理器才会被中断。不应使用清除中断标志指令来启用它。
INTR 中断由 I/O 端口激活。如果中断被使能并且NMI被禁止,则微处理器首先完成当前执行并在INTA引脚上发送“0”两次。第一个“0”表示 INTA 通知外部设备做好准备,在第二个“0”期间,微处理器从可编程中断控制器接收 8 位(例如 X)。
这些动作由微处理器执行 -
首先完成当前指令。
激活 INTA 输出并接收中断类型,例如 X。
标志寄存器值、返回地址的CS值和返回地址的IP值被压入堆栈。
IP 值从字位置 X × 4 的内容中加载
CS 从下一个字位置的内容加载。
中断标志和陷阱标志重置为0
软件中断
一些指令被插入到程序中的所需位置以创建中断。这些中断指令可用于测试各种中断处理程序的工作情况。它包括 -
INT-带类型号的中断指令
它是2字节指令。第一个字节提供操作码,第二个字节提供中断类型号。该组下有256种中断类型。
其执行包括以下步骤 -
标志寄存器值被压入堆栈。
返回地址的CS值和返回地址的IP值被压入堆栈。
IP从字位置'类型号'×4的内容中加载
CS 从下一个字位置的内容加载。
中断标志和陷阱标志重置为 0
type0 中断的起始地址是 000000H,type1 中断的起始地址是 00004H,类似地,type2 是 00008H ……以此类推。前五个指针是专用中断指针。即 -
TYPE 0中断代表被零除的情况。
TYPE 1中断代表程序调试期间的单步执行。
TYPE 2中断代表不可屏蔽的 NMI 中断。
TYPE 3中断代表断点中断。
TYPE 4中断代表溢出中断。
从类型 5 到类型 31 的中断为其他高级微处理器保留,从 32 到类型 255 的中断可供硬件和软件中断使用。
INT 3断点中断指令
它是一条 1 字节指令,操作码为 CCH。这些指令被插入到程序中,以便当处理器到达那里时,它会停止程序的正常执行并遵循断点程序。
其执行包括以下步骤 -
标志寄存器值被压入堆栈。
返回地址的CS值和返回地址的IP值被压入堆栈。
IP从字位置3×4 = 0000CH的内容加载
CS 从下一个字位置的内容加载。
中断标志和陷阱标志重置为 0
INTO - 溢出指令中断
它是一个 1 字节指令及其助记符INTO。该指令的操作码是CEH。顾名思义,它是一条条件中断指令,即只有当溢出标志设置为1时才有效,并跳转到中断类型号为4的中断处理程序。如果此时溢出标志被重置,则继续执行到下一条指令。
其执行包括以下步骤 -
标志寄存器值被压入堆栈。
返回地址的CS值和返回地址的IP值被压入堆栈。
IP从字位置4×4 = 00010H的内容加载
CS 从下一个字位置的内容加载。
中断标志和陷阱标志重置为0
微处理器 - 8086 寻址模式
在指令中表示源操作数的不同方式称为寻址模式。8086 编程中有 8 种不同的寻址模式 -
立即寻址方式
数据操作数是指令本身的一部分的寻址模式称为立即寻址模式。
例子
MOV CX, 4929 H, ADD AX, 2387 H, MOV AL, FFH
寄存器寻址方式
这意味着寄存器是指令操作数的来源。
例子
MOV CX, AX ; copies the contents of the 16-bit AX register into ; the 16-bit CX register), ADD BX, AX
直接寻址方式
将内存位置的有效地址直接写入指令中的寻址模式。
例子
MOV AX, [1592H], MOV AL, [0300H]
寄存器间接寻址方式
这种寻址模式允许通过以下任意寄存器中保存的偏移地址在任何内存位置对数据进行寻址:BP、BX、DI 和 SI。
例子
MOV AX, [BX] ; Suppose the register BX contains 4895H, then the contents ; 4895H are moved to AX ADD CX, {BX}
基于寻址方式
在此寻址模式下,操作数的偏移地址由 BX/BP 寄存器的内容与 8 位/16 位位移之和给出。
例子
MOV DX, [BX+04], ADD CL, [BX+08]
变址寻址方式
在此寻址模式下,操作数偏移地址是通过将 SI 或 DI 寄存器的内容与 8 位/16 位位移量相加得出的。
例子
MOV BX, [SI+16], ADD AL, [DI+16]
基于索引的寻址模式
在此寻址模式下,操作数的偏移地址是通过将基址寄存器与 Ind 的内容相加来计算的。