第02章微处理器体系与结构

Download Report

Transcript 第02章微处理器体系与结构

8086
 初始芯片时钟频率为4.77MHz
 内部数据总线和外部数据总线都是16位
 地址总线为20位,可最大寻址1MB的存储空间
80386




80x86家族的第一个32位处理器
内部和外部数据总线都是32位
地址总线也是32位,可寻址高达4GB内存
具有实模式和保护模式外,还增加了一种叫虚拟86的
工作方式,可以通过同时模拟多个8086处理器来提供
多任务能力
第二节 INTEL 8086/8088微处理器的结构
8086/8088微处理器的结构相似,都由算术逻
辑运算单元ALU、专用和通用寄存器、指令寄存器、
指令译码器、定时器控制电路等组成。按功能可把
CPU分成两大部:执行单元(Execution Unit)和总
线接口单元(Bus Interface Unit)如图2-1所示,
图中左半部分为执行单元,简称EU。右半部分为总
线接口单元,简称BIU。BIU与外部总线相连,完成
与外设(或存储器)的数据传送,包括取指令操作、
存储器读/写数据操作、I/O接口的读/写操作。EU通
过BIU得到信息,其功能就是负责指令的执行。BIU
和EU两个单元可以并行工作。这样提高CPU的工作速
度。
1.执行单元EU
执行单元EU由8个通用寄存器、1个标志寄存器、算术
逻辑运算单元ALU及EU控制电路组成;EU从BIU指令队列寄
存器中获得指令和待处理数据进行操作。将指令代码译码
后,发出相应的控制信息,将数据在ALU中进行运算,运
算结果的特征保留在标志寄存的FLAGS中。
2.总线接口单元BIU
总线接口单元BIU包括4个段寄存器、1个指令指针寄
存器、1个与EU通读寄存器。一个先入先出的6个字节
(8088是4个字节)指令队列。总线控制逻辑电路及20位
实际物理地址计算的加法器。
功能:负责与 Memory、I/O 端口传送数据。
 取指令时,从存储器指定地址取出指令送入指令
队列排队。
 执行指令时,根据EU命令对指定存储器单元或
I/O端口存取数据。
组成
 4 个段地址寄存器(CS、DS、ES、SS)
 16位指令指针寄存器IP
 20位的地址加法器(16d段地址+偏移地址=物
理地址)
 6字节(8086)或4字节(8088)的指令队列
 总线控制电路:
• 处理器与外界总线联系的转接电路。包括三组总线
:20 位地址总线, 16 位双向数据总线,一组控制
总线。
指令队列
 8086 的指令队列为6个字节,
 8088 的指令队列为4个字节。
不论是8086还是8088都会在执行指令的同
时从内存中取下一条或几条指令,取来的
指令放在指令队列中,使 BIU 具有预取指
令的功能,是一种先进先出(FIFO)的数
据结构。
指令执行顺序
 顺序指令执行:指令队列存放紧接在执行指令
后面的那一条指令。
 执行转移指令:BIU 清除指令队列中的内容,
从新的地址取入指令,立即送往执行单元,然
后再从新单元开始重新填满队列。
 功能
 执行指令,进行全部算术逻辑运算、完全偏移地址的计算
 向总线接口单元BIU提供指令执行结果的数据和偏移地址,并对通
用寄存器和标志寄存器进行管理。
 组成:
 4个通用寄存器:AX、BX、CX、DX
 4个专用寄存器:BP、SP、SI、DI
 标志寄存器(PSW):
• 9个标志位,其中6个条件标志位用于存放结果状态,
 算术逻辑单元:
• 16 位加法器,用于对寄存器和指令操作数进行算术或逻辑运
算,
 EU 控制系统:
• 接受从总线接口单元的指令队列中取来的指令代码,对其译码
和向 EU 内各有关部分发出时序命令信号,协调执行指令规定
的操作。
 8086/8088取指部分与执行部分是分开的。
 在一条指令的执行过程中可以取出下一条(或多条)指
令,指令 在指令队列中排队;
 在一条指令执行完成后,就可以立即执行下一条指令,减
少CPU为取指令而等待的时间,提高CPU的利用率和整
个运行速度。
 8086/8088微处理器:
 BIU和EU分开,取指和执行可以重迭,
 大大减少了等待取指所需的时间,提高CPU的利用率。
对于8080与8085及较早的8位微处理器:
 程序执行由取指令和执行指令的循环来完成的。
 每条指令执行完后CPU必须等待到下条指令取出来
后才能执行。
8086内部寄存器按其功能可分为:通用寄存器(8
个),段寄存器(4个),控制寄存器(2个)。
8086CPU中有14个16位的寄存器。
8个16位通用寄存器;
2个16位指针寄存器;
2个16位的变址寄存器;
4个16位的段寄存器;
1个16位指令指针;
1个16位标志寄存器。
8086/8088 CPU的内部寄存器如图2
-2所示。
1.通用寄存器
通用寄存器的包括数据寄存器、地址指针寄存器和
变址寄存器。
⑴数据寄存器数据寄存器有AX、BX、CX、DX都是16
位寄存器,这四个16位寄存器可分为高8位和低8位两部
分使用,也就是说也可作8位寄存器使用。高8位表示成:
AH、BH、CH、DH,低8位表示成:AL、BL、CL、DL。参与
运算的数是16位数时,可用AX、BX、CX、DX中的任意一
个描述,如果参与运算的数据是8位数时可用AH、AL、BH、
BL、CH、CL、DH、DL中的任意一个描述。一般情况下,
这四个数据寄存器就是用于存放参与运算的数据或运算
结果的。但这四个寄存器又有自己特殊的用法。
AX(Accumulator)累加器,是指令系统中应用最
多的寄存器,输入/输出只能用AX寄存器传递数据,它
经常存放运算的中间结果,并参与下次运算,所以叫累
加器。
BX(base Register)基址寄存器,它通常用来存
放内存的基地址,用于寄存器寻扯。
CX(count Register)计数寄存器,在循环和串操
作指令中,用于计数重复次数。
DX(Data Register)数据寄存器,通常用来存放
运算结果。如乘法运算后DX与AX合起来存放32位数的运
算结果,其中DX存放高16位。在输入/输出操作中,可
用DX作为端口地址的寄存器间接寻址。
⑵地址指针寄存器
地址指针寄存器有SP和BP两个。
SP(stack pointer)叫堆栈指示器,用于指示当
前堆段中栈顶所在的存储单元地址。(堆栈在后面介
绍)。
BP(base pointer)叫基址指示器,用于指示当前
堆栈段中一个数据区基址的偏移地址,通过它间接寻址
可对堆栈段中的某个数据进行存取。
SP和BP只能用于堆栈段,不能指示其它段。(存储
器是按段管理的,后续介绍)。但SP和BP应用上是有区
别的,SP可用于PUSH、POP、CALL、RET等指令,而BP不
能用于这些令(后续介绍)。
⑶变址寄存器SI、DI
SI(source Index)叫源变址寄存器,一般用于
源操作数当前数据段中某个地址的偏移地址。
DI(Destination index)叫目标变址寄存器,一
般用于目标操作数当前附加段(本数据段)中某个地
址的偏移地址。
在字符串操作中,SI用于存放源串操作数的偏移
地址,这个串一定是在数据段DS。DI用于存放目标串
操作数的偏移地址,这个串一定是在附加段ES。
在寄存器间寻址时,经常用DI、SI加上一个位移
量来改变存储器的地址,因此叫变址寄存器。
指针寄存器和变址寄存器与数据寄存器样,可以
参与算术和逻辑运算,但指针寄存器和变址寄存器只
能用于16位计算,不能分成8位。
2.段寄存器(segment)
段寄存器包括CS、SS、DS、ES,用于指示当前段的
段基址。
CS(Code Segment)叫代码段寄存器,用于指示当
前的代码段(程序段)的起始地址段基址。
DS (Date Segment)叫数据段寄存器,用于指示当
前的数据段的段基址。
SS(Stack Segment)叫堆栈段寄存器,用于指示
当前的堆栈段的段基址。
ES (Extra Segment)叫附加段寄存器,用于指示当
前的附加段的段基址。
CS段一般用于存放CPU执行的程序代码。DS一般用
于存放程序中的变量和数据。SS段一般用于存放压栈的
信息。ES段一般用于存放参与运算结果。
3.控制寄存器
控制寄存器有IP和FLAGS。
⑴IP(Instruction Pointer)叫指令指针寄存器
(程序指示器)。用于存放预取指令的偏移地址。CPU
从代码段中偏移地址为IP的内存单元中取出指令代码的
一个字节后,IP自动加I,指向指令代码的下一个字节
。用户程序不能直接访问IP。
⑵FLAGS(Flags)叫标志寄存器,用于存放运算
结果的标志。FLAGS是16位寄存器,用其中的9位来描述
9个标志。通常叫标志9个标志可分为状态标志位和控制
标志位。如图2-3所示。
OF
DF IF
TF
SF
ZF
图2-3 8086标志寄存器FLAGS
AF
PF
CF
状态标志位有:
CF(Corry Flag)进位标志位(借位标志位):当进行加法
(或减法)运算时,若最高位发生进位来借位,则CF=1,否则CF=0。
PF( Parity Flag)寄标志位:当逻辑运算结果中“1”的个
数为偶数时,PF=1,为奇数时,PF=0。
AF(Auxiliary Carry)半进位标志位:在8(16)位加减法运
算中,低4(8)位向高位有进位或借位,则AF=1,否则AF=0。
ZF(Zero Flag)零标志位:当运算结查为0时,ZF=1,否则
ZF=0。
SF(Sign Flag)符号标志位:当运算结果最高位是1(即函数)
时,SF=1,否则SF=0。
OF(Over Flag)溢出标志位:当运算结果超出了带符号数的
范围,即溢出时,OF=1,否则OF=0。8位带符号数范围是-128~+127。
16位带符号数的范围是-32768~+32767。这6个状态标志位状态是计
算机运算后,自动生成的不是人为赋予的,当然也可通过POPF改变
各状态值。(后续介绍)
控制标志位
控制标志位被设置后,可完成某些控制操作。
TF(Trap Flag)跟踪标志位:是为调试程序而设置的。若
TF=1,则使8086CPU处于单步工作方式,在这种工作方式下,CPU每
执行完一条指令,就自动产生一个内部中断,处理机转去执行一个
中断服务程序。检查程序中的每条指令执行情况,当TF=0时,CPU正
常执行程序。
IF(Interrupt Flag)中断允许标志位(开中断标志位):若
将IF设置为1时(IF=1),8086CPU开中断,CPU允许外部的可屏蔽中
断源的中断请示,若将IF清零(IF=0),8086CPU关中断,CPU禁止
外部可屏蔽中断的请求。
IF只对可屏蔽中断起作用,对非屏蔽中断和内部中断都不起作
用。
DF(Direction Flag)方向标志位:方向标志位用于控制串操
作指令中SI(或DI)的修改方向。当DF设置为1(DF=1)时,SI(或
DI)减量,当DF清零(DF=0)时,SI(或DI)增量,因为SI(或DI)
描述串操作的偏移地址,当SI(DI)减量时,串是由高地址向低地
址方向遵序执行。后续指令中将详细介绍。
在调试程序时,DEBUG提供了测试标志位的手段,
用符号表示标志位的值,每种标志位的符号如下表:
标志名
标志为1 标志为0
OF溢出(是/否)
OV
NV
DF方向(减量/加量)
DN
UP
IF中断(允许/关闭)
EI
DI
SF符号(负/正)
NG
PL
ZF零(是/否)
ZR
NZ
AF辅助进位(是/否)
AC
NA
PF奇偶标志( 偶/奇)
PE
PO
CF进位标志(是/否)
CY
NC
例1:执行两个数的加法,分析对标志位的影响。
 标志:
运算结果最高位为0
∴SF=0;
运算结果本身≠0
∴ZF=0
低8位中1的个数为奇数个
∴PF=0;
最高位没有进位
∴CF=0
第三位向第四位无进位
∴AF=0;
次高位向最高位没有进位 ,最高位向前没有进位 , ∴OF=0。
例2 若AL = 3BH,AH = 7DH,试指出AL中的内容和AH中的内容相加、
相减后,标志CF、AF、PF、SF、OF和ZF的状态。
解:(1)AL + AH
(2)AL – AH
0 0 1 1 1 0 1 1
AL
0 0 1 1 1 0 1 1
AL
+ 0 1 1 1 1 1 0 1
AH
- 0 1 1 1 1 1 0 1
AH
1 0 1 1 1 0 0 0
1 0 1 1 1 1 1 0
由运算结果可知:
由运算结果可知:
CF = 0 (无进位);
CF = 1(有借位);
AF = 1(有辅助进位);
AF = 1(有辅助借位);
PF = 1(有偶数个1);
PF = 1(有偶数个1);
SF = D7 = 1(运算结果符号位为1);SF = 1(符号位为1);
OF = 1 (同号相加,结果的符号与 OF = 0(同号相减,无溢出);
两操作数符号相反,有溢出);
ZF = 0(运算结果不为0)。
ZF = 0 (运算结果不为0)。
8086/8088系统中存储器
的每一个存储单元(字节)
都有一个独立的地址编码,
地址编码采用20位二进制
表示,地址译码器是根据
地址编码才找到目标存储
单元的。
20位二进制地址编码的范
围的十六进制表示为
00000H~FFFFFH,最多
可表示 2 20(1MB)地址编
码唯一的存储单元,把20
位二进制表示的地址称为
物理地址。
存储单元内容
38F04H
存储单元地址
10110110
存储单元地址:按照字节编址
物理地址
内容
00000H
00001H
00002H
......
00006H
1100
1111B
......
FFFFFH
内存单元的地址和内容
存储单元的内容:一个存储单元有效的信息。
机器字长是16位,
大部分数据以字节为单位表示,
• 一个字存入存储器占有相继的二个单元:
低位字节存入低地址,高位字节存入高地址。
字单元的地址采用它的低地址来表示。
例:
字单元
:[0004H]=1234H,
字节单元 :[0004H]=34H
同一个地址既可以看作字节单元地址,
又可看作字单元地址,需要根据使用情况确定。
字单元地址:可以是偶数也可以是奇数,
8086/ 8088系统的存储体结构
8086有20条地址线,可以寻址1M内存空间。地址从
00000H~FFFFFH。但8086CPU内部的地址寄存器都是16位的,
最多能寻址64K字节,为了能寻址1M字节,8086采用分段技
术。分段技术是把存储器可分成代码段CS、堆栈段SS、数
据段DS和附加段ES四种。每段为64KB,段与段可以重叠,
可以交叉,也可以没有联系。如图2-4所示。存储器分段管
理后,每个单元的地址都可以用两个形式的地址来表示,
实际地址(物理地址)和逻辑地址。
2-4
存储器的逻辑分段结构
例:已知当前有效的代码段、堆栈段、数据段和附
加段的段基址分别为1055H、EFF0H、250AH和8FFBH,它
们在存储器中的分布情况如图2-5所示。
物理地址:是由20位地址或状态来表示的地址。即20位
二进数来表示。CPU与存储器交换信息时,使用的是物理地
址。
逻辑地址:是把20位地址分成段基址和偏移地址两部
分表示,即段:偏移。这两部分都是无符号的16位二进制
数。例如:0001H:2000H。程序是以逻辑地址来编址的。
物理地址的形成是通过CPU内部的BIU部件中的地址加
法器运算出来的,如图2-6。
从图中可看出物理地址可由下式计算:
物理地址=段基址×16+偏移地址。
2-6 8086物理地址的形成
例如:CS=2000H IP=2200H,则物理地址为:
20000H+2200H=22200H。
已知CS=1055H,DS=250AH,ES=2EF0H,SS=8FF0H,
DS段有一操作数,其偏移地址=0204H,
1)画出各段在内存中的分布
2)指出各段首地址
10550H
CS
3)该操作数的物理地址=?
250A0H
解: 各段分布及段首址见右图所示。
2EF00H
操作数的物理地址为:
DS
ES
250AH×10H+0204H = 252A4H
8FF00H
SS
四个段寄存器可以分别描述当前使用的段的起始
字节单元。偏移地址可由16位寄存器来描述。一般情
况下CS段的偏移地址用IP描述,SS段的偏移地址由SP
和BP描述。DS段的偏移地址由BX或SI加上位移量来描
述,ES段的偏移地址可由BX和DI加上位移量来描述。
如图2-7所示。
2-7 段寄存器和其它寄存器组合指向存储单元
没有指明时,一般的数据访问在DS段;使
用BP访问主存,则在SS段
默认的情况允许改变,需要使用段超越前
缀指令;8086指令系统中有4个:




CS:
SS:
DS:
ES:
;代码段超越,使用代码段的数据
;堆栈段超越,使用堆栈段的数据
;数据段超越,使用数据段的数据
;附加段超越,使用附加段的数据
没有段超越的指令实例:
MOV AX,[2000H] ;AX←DS:[2000H]
 ;从默认的DS数据段取出数据
采用段超越前缀的指令实例:
MOV AX,ES:[2000H] ;AX←ES:[2000H]
 ;从指定的ES附加段取出数据
逻辑地址来源
操作类型
正常使用(隐
含)段基址
可替换
段地址
偏移
地址
物理地址计算
取指令
CS
无
IP
(CS)16d+(IP)
堆栈操作
SS
无
SP
(SS) 16d+(SP)
BP间址
SS
CS,DS,E
S
有效地址
EA
(SS) 16d+EA
存取变量
DS
CS,ES,S
S
有效地址
EA
(DS )16d+EA
源字符串
DS
CS,ES,S
S
SI
(DS) 16d+(SI)
目标字符
串
ES
无
DI
(ES) 16d+(DI)
堆栈是在计算机中的RAM存储区开辟的一个
特定区域,按照“后进先出”的原则组织。
主要用于暂存数据和断点地址。
1.堆栈的结构
存储区的存储方式采用一端固定(称为栈
底),另一端浮动(称为栈顶)的方式,
即只允许在活动端进行数据的输入或删除。
2.堆栈的操作
堆栈段在存储区中的位置由堆栈段寄
存器SS和堆栈指针SP来确定。SS中存放堆
栈段的段基址,SP中存放栈顶的地址,此
地址表示栈顶离段首址的偏移量,因此用S
P指示栈元素进栈和出栈的偏移地址的变化。
图2-8 8086堆栈在存储器中的
分布情况
(1)建栈。
建立堆栈就是设定堆栈的段基址和栈底,用户可以通过数据传送指令把
堆段的段基址送入段寄存器SS,把栈底的偏移地址送入堆栈指针寄存器SP。
此时栈中无数据,是一个空栈。
若SS = 1000H,SP = 2000H,则堆栈的情况如图2-8所示,建立堆栈
指令为:MOV AX,1000H
MOV SS, AX
MOV SP,2000H
(2)入栈。
入栈就是把数据压入堆栈,又称进栈。8086微处理器的入栈操作以字为单
位。入栈操作分为两步:①将堆栈指针寄存器SP的内容减2,即是栈顶向低
地址方向移动一个字单元,指向新栈顶。即:SP ← SP – 2;②将一个字数据
推入到SP所指向的栈顶字单元,即:[SP] ← 字数据。
注意:入栈字的低字节存入低地址单元,高字节存入高地址单元。
例2 若SS = 2000H,当前SP = 1234H,将寄存器AX中的数据7C9FH压入
堆栈。操作如下:①修改SP,使其指向新栈顶,即:SP = 1232H。
②AX的内容压入栈顶字单元。即:AL送21232H单元,AH送21233H单元。
其操作如图所示。
(3)出栈。
出栈是从堆栈中弹出数据。出栈的操作顺序
与入栈相反。①将栈顶的一个字送寄存器或
存储器,即:寄存器/存储器 ← [SP];②堆
栈指针寄存器SP的内容加2,指向新栈顶,
即:SP ← (SP)+ 2
若:若SS = 2000H,当前SP = 1232H,
将栈顶数据弹出送寄存器AX。
80386的主要特性
灵活的32位微处理器,提供32位的指令。
提供32位外部总线接口,最大数据传输速率为32Mbps。
具有片内集成的存储器管理部件MMU,可支持虚拟存储和特权保护 。
具有实地址方式、保护方式和虚拟8086方式。
具有极大的寻址空间。
通过配用数值协处理器可支持高速数值处理。
在目标码一级与8086、80286芯片完全兼容。
80386中共有7类32个寄存器,它们是:
•通用寄存器:EAX,EBX,ECX,EDX,ESP,EBP,
ESI,EDI
•段寄存器:CS,DS,ES,SS,FS,GS
•指令指针和标志寄存器:EIP,EFLAGS
•控制寄存器:CR0,CR1,CR2,CR3
•系统地址寄存器:GDTR,LDTR,IDTR,TR
•调试寄存器:DR0,DR1,DR2,DR3,DR4,DR5,
DR6,DR7
•测试寄存器:TR6,TR7 。
15
3
选择子
2
T1
1
0
RPL
80386中MMU增加了分页管理的功能,分页机制可以
将线性地址转换为物理地址。
•内存的分页管理
在保护方式下,控制寄存器CR0中PE=1时,可以通过
设置PG位来控制分页机制是否启用:PG=1,分页机
制启动;PG=0,则关闭分页机制。
实地址方式:系统启动后,80386自动进入实地
址方式。此方式下,采用类似于8086的体系结
构
保护方式 :是指在执行多任务操作时,对不同
任务使用的虚拟存储器空间进行完全的隔离,
保护每个任务顺利执行。
虚拟8086方式 :是指一个多任务的环境,即模
拟多个8086的工作方式。