1、8086/8088微处理器及其系统,3.1 8086/8088微处理器简介 3.2 8086/8088管脚说明和工作方式 3.3 8086/8088的存储器 3.4 8086/8088的指令系统,3.1 8086/8088微处理器简介,8086中央处理单元(CPU)是第三代微处理器,是Intel x86系列微处理器中的第一代产品。它是典型的16位微处理器,采用HMOS工艺,芯片内部包含有29000多个晶体管。它具有16位数据线和20位地址线,寻址空间为1M bytes。8086由单一+5V电源供电,时钟频率510MHz。,Intel 8086,AMD 8086,使用8088处理器的IBM PC
2、,3.1 8086/8088微处理器简介,3.1.1 8086/8088微处理器的结构: BIU和EU 3.1.2 BIU的组成和各功能单元的作用 3.1.3 EU的组成和各功能单元的作用 3.1.4 BIU和EU协同工作过程 3.1.5 总线周期,3.1.1 8086/8088微处理器的结构:BIU和EU,BIU和EU两部分组成:,BIU负责与存储器或I/O接口交互数据。 EU负责执行指令。CPU通过BIU从存储器读取指令或操作数,送往EU执行。再通过BIU将EU执行指令的结果传送到存贮器或者和I/O端口交换数据。EU和BIU协同工作,形成指令级流水线。,8086微处理器的结构框图,EU,B
3、IU,3.1 8086/8088微处理器简介,3.1.1 8086/8088微处理器的结构: BIU和EU 3.1.2 BIU的组成和各功能单元的作用 3.1.3 EU的组成和各功能单元的作用 3.1.4 BIU和EU协同工作过程 3.1.5 总线周期,3.1.2 BIU的组成及各功能单元的作用,功能:BIU为EU完成全部的总线操作,根据EU的命令控制数据在CPU和存储器或I/O接口之间传送。 操作过程(存储器访问为例): BIU首先将要访问存储器的逻辑地址转换成物理地址. 再从(往)物理地址对应的存储器单元读取(写入)数据; 如果是读取指令,BIU从物理地址取到指令后将指令送入指令队列。,3
4、.1.2 BIU的组成及各功能单元的作用,BIU的组成,3.1.2 BIU的组成及各功能单元的作用,20位物理地址的计算过程: 地址加法器计算物理地址,地址加法器,3.1.2 BIU的组成及各功能单元的作用,20位物理地址的计算过程: 地址加法器计算物理地址:,物理地址段基址16偏移地址,3.1.2 BIU的组成及各功能单元的作用,小结; 段寄存器CS、DS、ES、SS 指令指针寄存器IP 地址加法器 指令队列 总线控制电路,3.1 8086/8088微处理器简介,3.1.1 8086/8088微处理器的结构: BIU和EU 3.1.2 BIU的组成和各功能单元的作用 3.1.3 EU的组成和
5、各功能单元的作用 3.1.4 BIU和EU协同工作过程 3.1.5 总线周期,3.1.3 EU的组成及各功能单元的作用,功能:负责指令的译码、执行并回写结果。此外还具有管理寄存器等功能。 工作过程:EU从BIU的指令队列里得到指令后,完成指令的译码、执行,当执行指令的结果或执行指令所需操作数需要从存储器或者外设存取时,便申请BIU访问存储器或者外设,并向BIU提供段偏移地址。,3.1.3 BIU和EU的组成及各功能单元的作用,EU由以下单元组成: (1)通用寄存器(16 bit) AX:用作累加器; BX:多用作基址寄存器; CX:多作为计数器; DX:多用作辅助累加器 (AX、BX、CX和D
6、X都是16位寄存器,可是它们都可以分别作为2个8位寄存器使用。),3.1.3 EU的组成及各功能单元的作用,(2)专用寄存器(16 bit) SP:堆栈指针寄存器BP:基址指针寄存器 SI:源变址寄存器 DI:目的变址寄存 (基地址指针寄存器BP和堆栈指针寄存器SP分别存放地址偏移量。源变址寄存器SI和目的变址寄存器DI也分别作为形成偏移地址的变址寄存器。 ) (3)算术逻辑单元ALU (4)执行单元的控制电路 (5)标志寄存器Flag(16 bit),其中9位为8086的标志位,其他7位未用。 标志位分为状态标志和控制标志。 状态标志为指令执行后算逻部件的状态,共六位:CF,PF,AF,ZF
7、,SF,OF。 CF:进位标志(标志寄存器的D0位)。CF置1,表示执行一次加法运算时产生了进位,或执行一次减法运算时产生了借位。此外,循环指令也会影响这一标志。 PF:奇/偶标志(D2位)。如果运算结果的低8位中所含的1的个数为偶数,则PF置1,1的个数为奇数时PF为0。 AF:辅助标志(D4位)或半进位标志。当加法运算时D3位向D4位有进位,或者减法运算时从D3D第四位有借位,AF标志置1。DAA和DAS指令测试该标志位,作为在BCD码运算时是否进行十进制调整的依据。此外,微处理器或任何其它指令都不使用AF标志位。,ZF:零标志(D6位)。表示一个算术或逻辑运算的结果是否为零。若当前的运算
8、结果为零,则ZF为1;当前运算结果不为零,则ZF为0。 SF:符号标志(D7位)。表示算术或逻辑运算结果的算术符号,它和运算结果的最高位相同。当数据用补码表示时,负数的最高位为1,所以符号标志指出了所执行运算结果的正负。 OF:溢出标志(D11位)。在有符号数进行加法或减法运算过程中产生溢出时,OF被置为1。指示运算结果超出了机器能够表示的范围。对于无符号操作,不考虑该标志。,控制标志指示CPU控制某种特定的功能,通常通过指令来设定与清除。3位控制标志分别为DF,IF,TF。 TF:跟踪标志或称单步标志(D8位)。如果TF设定为1,指示CPU按照单步方式执行指令。 IF:中断标志(D9位)。对
9、可屏蔽中断的控制标志。如果IF为1,表示 CPU对可屏蔽中断的中断允许;为0,表示CPU不能接受可屏蔽中断请求。IF标志由STI(置IF为1)和CLI(清除IF标志)指令来控制。 DF:方向标志(D10位)。控制串操作指令执行过程中地址的增量或减量。如果DF为0,在串操作过程中,地址会不断增值;如果DF为1,则串操作过程中地址将不断减值。DF标志由STD(置位方向)和CLD(清除方向)指令控制。,3.1.3 EU的组成及各功能单元的作用,小结: 通用寄存器AX、BX、CX、DX 专用寄存器SP、BP、SI、DI 算术逻辑单元ALU EU控制逻辑 标志寄存器Flag(16 bit),3.1 80
10、86/8088微处理器简介,3.1.1 8086/8088微处理器的结构: BIU和EU 3.1.2 BIU的组成和各功能单元的作用 3.1.3 EU的组成和各功能单元的作用 3.1.4 BIU和EU协同工作过程 3.1.5 总线周期,3.1.4 BIU和EU协同工作过程,BIU和EU的工作原则(8086) BIU中的指令队列有2个或2个以上字节为空时,BIU自动启动总线周期,从存储单元取出指令,填充指令队列。直至将指令队列填满,BIU才进入空闲状态。 EU每执行完一条指令,从BIU指令队列的队首取指令。系统初始化后,指令队列为空,EU需要等待BIU从内存取指填充指令队列。 EU从指令队列取得
11、指令后,译码并执行指令。若该指令需要访问存储器或者I/O以取操作数或存操作结果时,EU向BIU发出访问总线的请求。 当BIU接到EU申请总线的请求,若BIU正忙(正在执行取指令的总线周期),则必须等待BIU执行完当前的总线周期,方能响应EU请求;若BIU空闲,则立即执行EU申请总线的请求。 EU执行转移、调用和返回指令时,若下一条指令不在指令队列中,则队列中的指令被自动清除,BIU根据转移、调用和返回指令指示的目标地址重新取出指令并填充指令队列。,3.1.4 BIU和EU协同工作过程,指令流水 (1) 8位机的串行工作过程为:从内存取指 对指令译码 读取内存中操作数(指令需要操作数时) 执行指
12、令 回写执行结果(必要时再次访问存储器)。 (2) 在8086中,指令的提取和执行是分别由BIU和EU完成的,它们之间形成指令级的流水线,使得8086CPU可以在执行指令的同时进行读取指令的操作。 (3) 一般情况下,EU可以不断地从指令队列中取得指令并执行指令,与BIU从对存储器的访问并行执行。只有在遇到系统复位或执行转移指令等特殊情况,指令队列被刷新时,EU才需要等待BIU进行取指操作。或者在EU需要操作数而BIU正忙时,EU需要等待BIU执行完当前的操作,再去取操作数,等到EU得到操作数以后,才能进行这条指令的执行操作。,3.1 8086/8088微处理器简介,3.1.1 8086/80
13、88微处理器的结构: BIU和EU 3.1.2 BIU的组成和各功能单元的作用 3.1.3 EU的组成和各功能单元的作用 3.1.4 BIU和EU协同工作过程 3.1.5 总线周期,3.1.5 总线周期,时钟周期或状态周期:8086CPU内部的逻辑操作以及与外部存储器和I/O交换数据进行的总线操作全部由CPU的时钟来定时的。CPU的基本定时单位称为时钟周期或者状态周期。假设8086的主频为10MHz,则一个时钟周期为100ns。 总线周期:CPU为了读取指令或传送数据,需要通过总线接口部件BIU与存储器或I/O接口进行信息交互,执行对总线的操作。进行一次数据传送的总线操作定义为一个总线周期。典
14、型的总线周期通常由4个时钟(状态)周期T1、T2、T3和T4组成。,3.1.5 总线周期,T1为地址周期。CPU通过地址/数据(或地址/状态)复用总线发出地址信息,指示要寻址的存储器单元或者I/O的地址。 T2为缓冲周期。例如,在总线读周期,CPU在T2撤销低16位地址信号,使该组信号线置为高阻态,准备接收存储器或I/O的数据。 T3为数据周期。数据出现在复用总线的低16位上。如果外设或存储器没有准备好,CPU会在T3周期后插入等待周期TW。 T4 总线周期结束。,典型总线周期示意图,3.1.5 总线周期,当存储器或者I/O接口的访问速度低于CPU的读写速度时,需要在T3之后插入一个或者多个附
15、加时钟周期Tw,在Tw周期,总线上的信号状态和T3状态保持一致,这样就延长了该总线周期的访问时间,使得CPU能够和速度较慢的存储器或I/O接口相匹配。 8086采用了地址/数据总线复用方式,就是说在同一组总线上,某一时刻出现的是地址信息,而在另一时刻出现的却是数据信息,这就是总线的分时复用。为了不至于混淆两种不同类型的信息,8086规定,地址信息在总线周期的T1状态出现,而数据信息在T3状态出现。,注意:,3.1 8086/8088微处理器简介: BIU和EU,掌握BIU和EU的结构组成和各寄存器的作用 理解BIU和EU协同工作过程 理解总线周期 掌握物理地址的计算过程,小结:,第三章 808
16、6/8088微处理器及其系统,3.1 8086/8088微处理器简介: BIU和EU 3.2 8086/8088管脚说明和工作方式 3.3 8086/8088的存储器 3.4 8086/8088的指令系统,3.2 8086/8088管脚说明和工作方式,3.2.1 8086/8088信号引脚及功能 3.2.2 最小工作方式 3.2.3 最大工作方式,3.2.1 8086/8088信号引脚及功能,8086/8088的引脚信号可以分为:地址/数据信号,地址/状态信号,控制信号和电源信号。,管脚图:,3.2.1 8086/8088信号引脚及功能,地址/数据信号AD15AD0 (Address Data
17、 Bus) : 地址/数据时分复用信号(标号216、39),双向,三态。在总线周期的T1状态(地址周期)AD15AD0上出现的是低16位的地址信号A15A0;在T3状态(数据周期)AD15AD0 上出现的是数据信号D15D0。 地址/状态信号A19/S6A16/S3 (Address/Status): 地址/状态复用信号(标号3538),输出。在总线周期的T1状态(地址周期)A19/S6A16/S3上出现的是地址的高4位。在T2T4状态,A19/S6A16/S3上输出状态信息。 S6:指示8086当前是否与总线相连。S60表示8086连在总线上。 S5:表示中断允许标志状态。S5=1表示中断允
18、许标志IF=1(对可屏蔽中断请求起作用)。S5=0表示IF=0,禁止可屏蔽中断。 S4 和S3用来指出当前使用的段寄存器。S4、S3代码组合对应的含义如表所示:,3.2.1 8086/8088信号引脚及功能,控制总线信号BHE*/S7 (Bus High Enable/Status):数据总线高8位使能和状态复用信号(标号34),在总线周期T1状态,如果BHE*有效,表示数据线上高8位数据是有效的。在T2T4状态,BHE*/S7 输出状态信息S7。S7在8086中未做实际定义。RD*(Read):读信号(标号32),输出,三态,低电平有效。RD*信号有效,表示CPU执行一个对存储器或I/O端口
19、的读操作,在一个读操作的总线周期中,RD*在T2T3状态中有效,为低电平。READY(Ready):准备好信号(标号22),输入,高电平有效。CPU在每个总线周期的T3状态对READY进行采样。当READY信号有效时表示存储器或I/O准备好发送或接收数据。CPU在T3采样到READY为低电平以后,便在T3之后插入Tw,延长读写周期,使CPU能和较慢速度的存储器或I/O接口相匹配。TEST*(Test):测试信号(标号23),输入,低电平有效。TEST*信号和WAIT指令结合起来使用,在CPU执行WAIT指令时,CPU便一直处于空转状态,进行等待。只有当8086检测到TEST*信号有效时,才结束
20、等待状态,继续执行WAIT之后的指令。,3.2.1 8086/8088信号引脚及功能,控制总线信号(续)NMI(Non-Maskable Interrupt):非屏蔽中断请求(标号17),输入,上升沿有效。NMI不受中断允许标志的影响。当CPU检测到NMI有一个上升沿触发的信号以后,CPU执行完当前指令便响应中断类型号为2的非屏蔽中断请求。INTR(Interrupt Request):可屏蔽中断请求(标号18),输入,高电平有效。如果INTR信号有效,当CPU的中断允许标志IF=1时,CPU结束当前指令后,响应INTR中断。RESET(Reset):复位信号(标号21),输入,高电平有效。复
21、位信号有效时,CPU结束当前操作并对标志寄存器FLAG 、IP、DS、SS、ES及指令队列清零,并将CS设置为FFFFH。当复位信号撤除时,(即电平由高变低时)CPU从FFFF0H开始执行程序。CLK(Clock):时钟信号(标号19),输入。为CPU和总线控制逻辑提供定时。要求时钟信号的占空比为33。 电源线Vcc(标号40)和地线GND(标号1和20) MN/MX*: 最小/最大工作方式选择信号(标号33),3.2 8086/8088管脚说明和工作方式,3.2.1 8086/8088信号引脚及功能 3.2.2 最小工作方式 3.2.3 最大工作方式,3.2.2 最小工作方式,最小工作方式特
22、征:系统中只有一个微处理器,所有的总线控制信号都直接由8086/8088产生。,3.2.2 最小工作方式,2431引脚及其功能: (1)INTA*(Interrupt Acknowledge):中断响应信号(标号24),输出,低电平有效。用于外设对中断请求作出响应。在8086/8088系统中,该信号为两个连续的负脉冲,第一个脉冲表示CPU接收了外设的中断请求信号,第二个脉冲表示CPU要求外设通过数据总线提供该中断的类型号。 (2)ALE(Address Latch Enable):地址锁存使能信号(标号25),输出,高电平有效。用来作为地址锁存器的锁存控制信号。8086的AD15AD0是地址/
23、数据复用信号,地址信息仅在T1状态有效,为了使地址信号在整个读写周期都有效,通常要用ALE把地址信号锁存在地址锁存器当中。 (3)DEN*(Data Enable):数据使能信号(标号26),输出,三态,低电平有效。用于数据总线驱动器的控制信号。 (4)DT/R*(Data Transmit/Receive): 数据驱动器数据流向控制信号(标号27),输出,三态。在8086系统中,通常采用8286或8287作为数据总线的驱动器,用DT/R*信号来控制数据驱动器的数据传送方向。当DT/R*1时,CPU通过数据驱动器进行数据发送;DT/R*0时,通过数据驱动器进行数据接收。,3.2.2 最小工作方
24、式,2431引脚及其功能(续): (5)M/IO* (Memory/Input and Output):存储器或I/O控制信号(标号28),输出,三态。M/IO*输出为高电平,指示CPU正在执行存储器访问指令,进行和存储器之间数据交互;如果为低电平,表示CPU正在执行I/O 指令,进行和I/O接口之间数据传输。 (6)WR*(Write):写信号(标号29),输出,三态。WR*信号有效,表示CPU执行一个对存储器或I/O端口写操作,在写操作总线周期中,WR*在T2T3状态中有效,为低电平。 (7) HOLD(Hold Request):总线保持请求(标号31),输入,高电平有效。当系统当中除C
25、PU之外的另一个总线主模块(如DMA)要求使用总线时,该总线主模块通过HOLD信号向CPU发出总线请求。如果CPU允许让出总线,就在完成当前总线周期后,在T4状态通过HLDA管脚发出应答信号,响应总线的请求。 (8) HLDA:总线保持响应信号,输出,高电平有效。HLDA有效时表示CPU响应了其他总线主模块的总线请求,一旦HLDA有效,CPU的数据/地址控制信号变为高阻状态,而请求总线的总线主模块(DMA)获得了总线权。,3.2 8086/8088管脚说明和工作方式,3.2.1 8086/8088信号引脚及功能 3.2.2 最小工作方式 3.2.3 最大工作方式,3.2.3 最大工作方式,最大
26、工作模式特征:最大模式系统总线控制信号由CPU和总线控制器(如8288)联合产生,多用于包含了两个或者两个以上处理器的系统,如包含了协处理器8087。,8288 总线控制器,最大工作方式的典型系统结构,3.2.3 最大工作方式,2431引脚及其功能: (1)QS1、QS0(Instruction Queue Status):指令队列状态信号(标号25、24),输出。QS1,QS0组合起来表示前一个时钟周期中指令队列的状态,这组信号的设置使得可以从外部对8086指令队列的动作进行跟踪。用于对芯片的测试。 QS10 QS00:无操作; QS11 QS00:队列为空; QS10 QS01:从指令队列
27、的第一个字节中取走代码; QS11 QS01:除第一个字节外,取后面字节的代码。 (2)S2*、S1*、S0*(Bus Cycle Status):总线周期状态信号(标号28、27、26),输出。这三个信号的组合表示当前执行的总线周期的类型。在最大模式下,用这三个信号作为总线控制器8288的输入,产生存储器、I/O的读、写等控制信号。S2*、S1*、S0*的组合意义:,3.2.3 最大工作方式,2431引脚及其功能(续): (3)LOCK*( Lock):总线封锁信号(标号29),输出。用来封锁其它总线主部件的总线请求,当LOCK*为低电平时,系统中其他总线主部件就不能占用总线。LOCK*信号
28、是由指令前缀LOCK产生的。在LOCK前缀后的指令执行完之后,硬件上便撤销了LOCK*信号。 (4)RQ*/GT1*、RQ*/GT0*( Request/Grant):总线请求信号/总线请求允许信号(标号31、30),双向。CPU以外的两个处理器可以分别用其中之一来请求总线并接受CPU对总线请求的允许。其中RQ*/GT0*优先级高于RQ*/GT1*。,3.2.3 最大工作方式,8288芯片输出的主要控制信号: ALE:地址锁存使能,用于地址锁存器。和最小模式下的ALE意义相同。 DEN:数据允许信号,用于控制数据收发器的选通。 DT/R*:数据发送/接收信号,用于控制数据收发器的数据传输方向。
29、 MRDC*(Memory Read Command):存储器读命令,用来通知内存将被寻址的存储单元内容送上数据总线。 MWTC*(Memory Write Command):存储器写命令,用来通知内存接受数据总线上来的数据,并将数据写入所寻址的内存单元。 IORC*(I/O Read Command)和IOWC*(I/O Write Command): I/O端口的读、写命令,意义上与存储器命令信号类似,分别用于通知I/O接口将所寻址端口的数据送到数据总线或将数据写进所寻址的端口中。 INTA*: 作为CPU的中断响应信号,与最小模式中的中断响应信号相同。,3.2 8086/8088管脚说明
30、和工作方式,小结:,管脚信号的定义 最大最小工作方式的设置和特点,第三章 8086/8088微处理器及其系统,3.1 8086/8088微处理器简介: BIU和EU 3.2 8086/8088管脚说明和工作方式 3.3 8086/8088的存储器 3.4 8086/8088的指令系统,3.3 8086/8088的存储器,3.3.1 8086/8088存储单元的地址和内容 3.3.2 8086/8088存储器的组织方式 3.3.3 堆栈,3.3.1 8086/8088存储单元的地址和内容,1存储单元的地址和内容 计算机存储信息的基本单位是一个二进制位(bit)。一位可存储一个二进制数:0或1,每
31、8位组成一个字节。 微机中常用的数据类型有:字节:8位为一个字节。是存储器中存取信息的基本单位,存储容量也用字节表示。字:一个字16位,占用两个字节,8086的字长就是16位的。双字:一个双字32位,由4个字节组成。四字:一个四字64位,由8个字节组成。,3.3.1 8086/8088存储单元的地址和内容,低地址中存放低位字节数据,高地址中存放高位字节数据。在读写数据时只需给出最低单元的地址号即可,然后依次存取后续字节。,3.3.1 8086/8088存储单元的地址和内容,在8086微处理器中,在描述存储器地址时有三个相关的术语:物理地址、偏移地址和逻辑地址。 物理地址是由8086的地址引线送
32、出的20位地址码。这20位地址码送到存储器经过译码,最终选定一个存储单元进行读/写。物理地址可写成5位的十六进制数。 偏移地址是相对于某段首地址的段内偏移量,用16位二进制代码表示,写成4位十六进制数,例如:004AH。 逻辑地址是在程序中对存储器地址的一种表示方法,由某段的段地址和段内偏移地址组成。写成:段地址 : 偏移地址 例如:2000H : 0080H,3.3 8086/8088的存储器,3.3.1 8086/8088存储单元的地址和内容 3.3.2 8086/8088存储器的组织方式 3.3.3 堆栈,3.3.2 8086/8088存储器的组织方式,寻址空间 2201Mbytes的存
33、储器寻址空间 分段的概念对存储器寻址起作用的是物理地址,8086对外有20位地址线,因此,存储器的可寻址范围为220=1MB。但是8086微处理器的内部结构是16位的,用户可用的寄存器也都是16位的。显然用16位的地址码无法寻址1MB的存储空间,为了解决这一矛盾,8086采用了分段的方法对存储器进行管理。 存储器地址分段的具体做法是:把1MB的存储器空间分成若干段,每段的容量最大64KB,这样段内地址就可以用16位来表示。实际上,可以根据编程的需要来确定段的大小,它可以是64K字节范围内的任意多个字节。,3.3.2 8086/8088存储器的组织方式,存储器采用分段管理后,每个段的首地址(称为
34、段基地址或段地址)保存在8086内部的CS、DS、SS和ES四个16位的寄存器中,我们可以对段寄存器设置不同的值以指向不同的段。 16位的段地址和16位的偏移地址组合形成20位的物理地址: 段地址 16d + 偏移地址 = 物理地址(20bit),2. 分段组织 1MB存储空间被分成若干逻辑段逻辑地址到实际地址的转换:段寄存器的16位值(段地址)左移4位,得到的20位值加上16位的偏移量得到存储单元的实际地址。 改变段寄存器的值,各段间可以连续、分开或者重叠。 重定位。,3.3.2 8086/8088存储器的组织方式,8086分段存储寻址摸式,3.3.2 8086/8088存储器的组织方式,在
35、8086中,段寄存器和与其对应存放偏移地址的寄存器之间有一种默认的组合关系,如下所示: 段寄存器 偏移地址寄存器 CS IP SS SP或BP DS BX、DI、SI ES DI(用于串指令),3.3.2 8086/8088存储器的组织方式,8086存储器组织,3. 字与字节访问 通过AD0信号和BHE*信号组合,选择奇偶字节或字,实现对存储器的访问。,3.3.1 8086/8088存储器的组织方式,对字节的访问:A19A1:0001 0000 0000 0000 000,需要一个总线周期,3.3.1 8086/8088存储器的组织方式,对低地址为偶地址的字的访问: A19A1:0001 00
36、00 0000 0000 000 BHE*和A0同时为低,共需要一个总线周期,3.3.1 8086/8088存储器的组织方式,对低地址为奇地址字的访问:因为A1位不同,不能同时访问两片存储器,所以需要两个总线周期。 A19A1 :0001 0000 0000 0000 000, BHE*为低,A0为高时实现低字节的访问, A19A1 :0001 0000 0000 0000 001, BHE*为高,A0为低时实现高字节的访问。,3.3.1 8086/8088存储器的组织方式,3. 字与字节访问(小结),3.3 8086/8088的存储器,3.3.1 8086/8088存储单元的地址和内容 3.
37、3.2 8086/8088存储器的组织方式 3.3.3 堆栈,3.3.3 堆栈,堆栈的特点: (1)堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是存储器的一部分。 (2)采用先进后出,后进先出的存放和取用数据的方式,栈顶是堆栈操作的唯一出口。 (3)堆栈有专门的数据传输指令,即入栈指令PUSH和出栈指令POP 。堆栈指 针SP 每当执一次 PUSH指令时,8086的SP就(在原来值的基础上)自动减2,每当执行一次POP指令,SP就(在原 来值基础上)自动加2。,PUSH AX POP BX POP AX,第三章 8086/8088微处理器及其系统,3.1 8086/808
38、8微处理器简介: BIU和EU 3.2 8086/8088管脚说明和工作方式 3.3 8086/8088的存储器 3.4 8086/8088的指令系统,3.4 8086/8088的指令系统,【学习目标】 熟练掌握8086/8088各种寻址方式;熟悉常用指令的功能。 【学习指南】 学习寻址方式时,要注意各种寻址方式所指定的操作数或操作数地址是什么;各种寻址方式形成操作数地址时,段寄存器和基址、变址寄存器的组合;各种寻址方式限定使用的寄存器。 学习指令系统时,要注意每条指令的功能,所支持的寻址方式、对标志位的影响、需要预置的参数以及隐含使用的或限定使用的寄存器等。 【难重点】 重点理解8086常用
39、指令的功能,熟悉8086的各种寻址方式,这是进行汇编语言程序设计的基础。,3.4 8086/8088的指令系统,3.4.1 8086/8088的指令格式 3.4.2 8086/8088的寻址方式 3.4.3 指令分类,计算机中的指令由操作码字段和操作数字段两部分组成。操作码字段:指示计算机所要执行的操作,如加、减运算;操作数字段:指示指令执行过程中所需要的操作数,它既可以是操作数本身,也可以是操作数地址或地址的一部分,还可以是指向操作数地址的指针或其他有关操作数的信息。,3.4.1 8086/8088的指令格式,8086/8088采用可变长指令,指令长度为16字节 1.无操作数指令这类指令一般
40、属于控制类指令,指令中只包含1个字节的操作码OP,故又称为单字节指令。 例: HLT 1111 0100; F4H,3.4.1 8086/8088的指令格式,2.单操作数指令 这类指令只有1个操作数(字节或字) 。该操作数可以是一个立即数,也可以是操作数存放的寄存器或存储器(以地址形式表示)。,3.4.1 8086/8088的指令格式,(1)单操作数在寄存器中一类是单字节指令,分为两种基本格式:,格式REG字段(寄存器编码)有8种编码,对应8个16位通用寄存器:例:DEC BX 格式指令的SEG字段(段寄存器编码)对应4个段寄存器:00ES,01CS,10SS,11DS 例: PUSH CS,
41、3.4.1 8086/8088的指令格式,格式W:0 操作数为字节 1 操作数为字MOD字段(寻址方式编码):11,表示操作数在寄存器中;RM字段(寄存器/存储器选择编码):对应8位或16 位的寄存器000ALAX,001CLCX,010DLDX,011BLBX,100AHSP,101CHBP,110DHSI,111BHDI。格式:两个字节均为操作码,单操作数被约定固定存放在AX或AL中,为是一种隐含寻址的单操作数指令。,另一类是双字节指令,3.4.1 8086/8088的指令格式,3种格式中,MOD11,表示单操作数是在存储器中,由RM字段和MOD字段的不同取值可确定单操作数在存储器中的有效
42、地址。DISP为8位或16位的地址位移量。,(2)单操作数在存储器中(24字节),3种编码格式:,3.4.1 8086/8088的指令格式,3. 双操作数指令通常: 操作数1: 寄存器操作数2: 寄存器存储器立即数 例外: 操作数1 存储器 操作数2 立即数 寄存器寄存器寄存器存储器,3.4.1 8086/8088的指令格式,3. 双操作数指令 寄存器立即数,1 1,3.4.1 8086/8088的指令格式,3. 双操作数指令 存储器立即数,reg域与w位组合表示寄存器,mod与r/m组合代码所对应的寻址方式,注: 表中的各种存储器寻址方式均使用缺省的段寄存器 D8、D16分别表示8位位移量和
43、16位位移量,3.4 8086/8088的指令系统,3.4.1 8086/8088的指令格式 3.4.2 8086/8088的寻址方式 3.4.3 指令分类,3.4.2 8086/8088的寻址方式,固定寻址 AAA 立即数寻址 MOV AL, 3069H 寄存器寻址 MOV AL, BH 存储器寻址 直接寻址 MOV AX, 2000H 间接寻址 基址寻址 MOV AX, BX 变址寻址 MOV AX, DI 基址加变址寻址 MOV AX,BPDI 5.其他寻址方式:串操作指令寻址;I/O端口寻址;转移类指令寻址,3.4.2 8086/8088的寻址方式,固定寻址:某些单字节指令中使用,该指
44、令是CPU针对某个固定的寄存器操作的, 操作数位于规定的寄存器中AAA,3.4.2 8086/8088的寻址方式,立即数寻址 : 操作数包含在指令中,是一个16/8位的常数,称为立即数。 MOV AL, 5 MOV AX,3064H MOV AL,A (MOV DST, SRC)注意:1 立即数只能用于源操作数SRC字段2 SRC和DST的字长一致 MOV AH, 3064H ,3.4.2 8086/8088的寻址方式,寄存器寻址:操作数包含在寄存器中,由指令指定寄存器名。 MOV AL, BH MOV AX,BX MOV AL,64H注意:1 字节寄存器只有 AH AL BH BL CH C
45、L DH DL2 SRC和DST的字长一致 MOV AH, BX ,3.4.2 8086/8088的寻址方式,存储器寻址:操作数在存储器中,偏移地址在指令中常用方括号 或符号地址表示。 直接寻址: 操作数的有效地址(偏移量)EA在指令中直接给出MOV AX, 2000HEA=2000H, 假设(DS)=3000H,可得PA=32000H 注意:1 隐含的段为数据段2 如不在数据段中,可以用段跨越前缀 MOV AX, ES:2000H3 操作数地址可以由变量(符号地址)表示COUNT DW 1000H MOV AX, COUNT,3.4.2 8086/8088的寻址方式,间接寻址:操作数的有效地
46、址与寄存器(基址和变址)有关 基址寻址: 操作数的有效地址由基址寄存器(BX/BP)和指令中的偏移量给出偏移地址(BX)/(BP)+8位/16位偏移量MOV AX, BX PA=16d(DS)+(BX)MOV AX, ES: BX PA=16d(ES)+(BX)MOV AX, BP PA=16d(SS)+(BP)MOV AL,BX+1000H PA=16d(DS)+(BX+1000H)注意:1 不允许使用AX、CX、DX,只能是BX或者BPMOV AX,CX,3.4.2 8086/8088的寻址方式,间接寻址 变址寻址: 操作数的有效地址EA由变址寄存器(SI/DI)和指令中的偏移量给出偏移地
47、址(SI)/(DI)+8位/16位偏移量MOV AX, DI PA=16d(DS)+(DI)MOV AX, ES: SI PA=16d(ES)+(SI)注意:1 不允许使用AX、CX、DX,只能是SI或者DIMOV AX,AX,3.4.2 8086/8088的寻址方式,间接寻址 基址加变址寻址: MOV AX, COUNTBXSI 或 MOV AX, COUNTBX+SI 或 MOV AX, COUNT+BX+SIPA= 16d(DS)+(1000H+BX+SI),3.4.2 8086/8088的寻址方式,其他寻址方式 串操作指令寻址:用于数据串指令。源串操作数第一个字节或字的有效地址存放在源
48、变址寄存器SI中,目标串操作数第一个字节或字的有效地址存放在目标变址寄存器DI中。(针对数据串指令,如CMPS) I/O端口寻址:IN/OUT 直接端口寻址:端口号在指令中以8位立即数方式直接给出,其范围是00-FFH 间接端口寻址:端口号在DX寄存器中给出,其范围是0000-FFFFH。 转移类指令寻址 : 段内/段间 + 直接/间接 转移JMP指令,3.4 8086/8088的指令系统,3.4.1 8086/8088的指令格式 3.4.2 8086/8088的寻址方式 3.4.3 指令分类,3.4.3 8086/8088的指令系统,数据传送指令 算术运算指令 逻辑运算和移位循环指令 串操作指令 程序控制指令 CPU控制指令,3.4.3 8086/8088的指令系统,重点: 指令的基本功能 指令支持的寻址方式 指令的执行对标志位的影响 指令的特殊要求,3.4.3 8086/8088的指令系统,数据传送指令 通用数据传送指令 目标地址传送指令 MOV 传送 LEA 有效地址送寄存器 PUSH 进栈 LDS 指针送寄存器和DS POP 出栈 LES 指针送寄存器和ES XCHG 交换 XLAT 换码 标志寄存器传送指令 I/O数据传送 LAHF 标志送AH IN 输入 SAHF AH送标志寄存器 OUT 输出 PUSHF 标志进栈 POPF 标志出栈,