微机原理与接口技术(MOOC)-8088CPU

1.CPU内部架构和工作原理

CPU的内部逻辑结构:(8088)

在这里插入图片描述

1.执行单元(EU)

在这里插入图片描述

2.总线接口单元(BIU):

(负责与内存或I/O接口之间的数据传送)
十六位的段地址寄存器(CS、DS、ES、SS)和指令指针寄存器IP;
二十位的地址加法器:两个16位的地址加为一个20位的地址(段地址左移4位+16位IP地址=20位物理地址);
六字节的指令队列缓冲器:BIU将从内存中取来的指令放在一个缓冲区(即指令队列)中,执行部件从指令队列中取指令执行。

3.寄存器组:

在这里插入图片描述

    一、 通用寄存器由数据寄存器(Ax、BX、CX、DX)、地址指针寄存器(SP、BP)、变址寄存器(SI、DI)组成。四者的功能如下:
     (1)AX:十六位的累加器,可以划分为 八位的AH、AL来使用,所有I/O指令都通过AX与接口传送消息,中间运算结果也多放于AX中;
     (2)BX:十六位的基址寄存器,也可以划分为 八位的BH、BL来使用,常被用来在间接寻址中存放基地址;
     (3)CX:十六位的计数寄存器,同样可以划分为两个八位寄存器:CH、CL使用,用于在循环或串操作指令中存放计数值;
     (4)DX:十六位的数据寄存器,同样可以划分为两个八位的寄存器来使用,在间接寻址的I/O指令中存放I/O端口地址。
    (5)BP(基址指针寄存器):通常在间接寻址中使用,操作数在堆栈段中,由SS段寄存器和BP组合形成操作数的地址,即BP中存放现行堆栈段中的一个数据区的"基址"的偏移量。
    (6)SP(堆栈指针寄存器):系统入栈和出栈的指令过程即该寄存器给出的栈顶指针的偏移地址存取位于堆栈段中的数据的过程,在此过程中堆栈指令SP指令会自动修改。
    (7)SI(源变址指针寄存器):用来存放相对于DS段之源变址指针。
    (8)DI(目标变址寄存器):变址寄存器在指令中常用于存放数据在内存中的地址。
    二、段寄存器:用于存放相应逻辑段的段基地址。
    (1)代码段寄存器(CS):存放代码段的段基地址;
    (2)数据段寄存器(DS):存放数据段的段基地址;
    (3)附加段寄存器(ES):存放数据段的段基地址;
    (4)堆栈段寄存器(SS):存放暂时不用但需要保存的数据。
    三、控制寄存器(先略)

CPU的工作原理如下:

①将指令所在地址赋给程序计数器PC;
②PC内容送到地址寄存器AR,PC自动加1;
③把AR的内容通过地址总线送至内存储器,经地址译码器译码,选中相应单元;
④CPU的控制器发出读命令;
⑤在读命令控制下,把所选中单元的内容(即指令操作码)经数据总线送到数据寄存器DR;
⑥指令译码(数据寄存器DR将它送到指令寄存器IR,然后再送到指令译码器ID)。

在这里插入图片描述
在这里插入图片描述

2. 存储器寻址

内存中每个单元的地址在逻辑上有两部分组成:

段(基)地址:

16位,指示存储单元在整个内存空间中处于哪个区域;

段内地址(相对地址/偏移地址):

16位,指示存储单元在段中的相对位置(与段中第一个单元的距离);
由上可知,段首的偏移地址=0,即16个0,为了方便,使用4个0来表示(前提:任何一个段的段首地址都必须能被16整除,即最低4位是0)。这样,就形成了16位的段基地址加上4位的偏移地址等于20位的物理地址。
任一单元的物理地址=段基地址×16+偏移地址,在二进制中,每乘以2,相当于向左移动一位,乘以16相当于左移4位,在最低位补4个0。

物理分段:

比如说8088这个16位的CPU,有1M的内存空间,因为它能直接产生16位的地址,所以有16块64K的单元,就把这1M给占满了。

逻辑分段:

为了解决内存空间的浪费,根据需要可以不断调整地址的大小。这么多逻辑段只有四种类型:代码段、数据段、附加段、堆栈段。这4个类型的逻辑段就对应着4个段寄存器(CS、DS、ES、SS),这4个段寄存器里就放的是每一个逻辑段的段基地址。

3. 为什么CPU工作需要时钟?

参考1

时钟不是作用在ALU(算数逻辑单元)上,而是作用在寄存器上。这种特殊的寄存器叫做时钟寄存器。
CPU从内存读取一个32位或64位的数(指令或数据),要求32位同时读入,不能有先后顺序。所以仅仅靠简单的逻辑运算是做不到的。所谓的“同时读32个bit”,就需要有同一个时钟控制,在同一个上升沿或下降沿去读取,然后到下一个上升沿或下降沿前什么都不做,但是能保持住读进来的数值。
数值的上升沿读入,其他时间保持,就是寄存器。因为有了寄存器,保证了逻辑运算的时候,输入的1和0是稳定的,不是变化的。这就是时钟的基本作用。如果没有时钟,可能32位读入有时间顺序的差异。
如果有复杂的计算,可能需要多次读入(例如计算2个64位整数的加法),读入指令一次,读入A一次,读入B一次,相加输出再一次。每一次就是一个时钟的上升沿或下降沿操作。

其中,下边有一个评论说:
CPU可以有时钟,也可以没有时钟。使用时钟工作的CPU称为同步CPU,不使用时钟工作的CPU称为异步CPU。
问题:
没有时钟一样是可以有时序的?
控制通路全部用握手完成?
数据通路全部是特殊设计的双线逻辑?

参考2

首先考虑如下逻辑电路:
在这里插入图片描述
当A=B=1时,Q=0。当输入信号发生变化时,逻辑元件不会立即对输入变化做出反应,会有一个传播时延。当B变化为0时,由于B也作为XOR的直接输入,所以XOR异或门会立即感知一个输入变为0的状态变化,XOR输出变为了1。但是由于传播时延的作用,AND与门的输出会过一段时间才变为0,XOR的输出会在变为1后隔一段时间重新变为0。如下图所示:
在这里插入图片描述
这种现象叫做空翻,即输出中出现了一个不希望有的脉冲信号。解决办法是:在输出端放置一个边沿触发器,即只有当CLK端输入从0变到1时,数据端的输入才会影响边沿触发器的输出。这样,所有的传播延时都会被边沿触发器隐藏掉,Q端的输出也变得稳定。
在这里插入图片描述
在这里插入图片描述
得出结论:

目前大多数的微处理器都是被同步时序电路所驱动,而时序电路由各种逻辑门组成。逻辑门需要一小段时间对输入的变化做出反应,所以需要时钟周期来容纳传播时延,并且时钟周期应当大到需要容纳所有逻辑门的传播时延。

4、实模型下的存储器寻址

提要

①内存分段管理思想
②实模式下的内存地址变换
③段寄存器的应用
④堆栈的概念

4.1 内存分段管理思想

8088CPU是16位体系结构的微处理器,即它可以同时处理(或产生)16位二进制码,就可以产生2的16次方个编码(就像两位二进制码能产生4个编码一样),即64K个。如果这64K个编码用来作为内存单元的地址,也就意味着它能直接管理64K个内存单元。8088CPU需要管理1M个内存单元,那么需要多少位二进制码给它编地址呢?也就是2的几次方是1兆?答:需要20位。
所以,用16位的体系结构来产生20位的地址的能力,即内存的分段管理。

4.2 内存地址变换

要实现对1MB内存空间的正确访问,每个内存单元在整个内存空间中必须具备唯一地址,即***物理地址***。
因为要管理的内存是1M个单元,所以物理地址一定要是20位(2的20次方有1M个地址编码)。内存地址变换的作用就是如何将直接产生的16位编码变换为20位物理地址。

4.2.1 内存单元的编址

内存单元地址在逻辑上由两部分组成:段基地址(指示存储单元在整个内存空间中处于哪个段)、段内地址(相对地址或偏移地址,指示存储单元在段中与段中第一个单元的距离)。8088为16位结构,所以它的段地址和偏移地址均为16位。
在这里插入图片描述
所以可以看到,在内存中,任何一个单元从逻辑上讲,是一个32位的地址,即就内存地址变换是怎么样把这个32位地址变成一个20位的物理地址。
在这里插入图片描述
如上图所示,段首的偏移地址是0,所以在这里用4位0来表示16位0,这样的话加上16位的段基地址,就构成了20位的内存的物理地址。
在这里插入图片描述
上图中的×16(2的4次方)相当于段基地址左移4位。
上述内存地址变换分析的前提是:任何一个段的段首地址都能被16整除,即最低四位是0。

4.3 段寄存器

作用:用于存放相应逻辑段的段基地址。
类型:
①代码段:存放指令代码
②数据段:存放操作的数据
③附加段:存放操作的数据
④堆栈段:存放暂时不用但要保存的数据
这4个类型的逻辑段就对应着4个段寄存器,这4个段寄存器里放的就是每一个逻辑段的段基地址。
在这里插入图片描述
注意物理地址和逻辑地址的区别。

4.4 逻辑段与逻辑地址

内存的分段是逻辑分段,各个逻辑段在地址上可以不相连,可以重合。
每个内存单元具有唯一的物理地址,但可能具有多个逻辑地址。

一个内存单元可以同时处于两个逻辑段。
一个内存单元可以在不同时刻属于相同(或不同)类型的段。
一个内存单元在同一时刻可以属于不同类型的段。

4.5 堆栈

内存中一个特殊区域,用于存放暂时不用或需要保护的数据,常用于响应中断或子程序调用。
堆栈段中需要考虑的是:栈底、栈顶。
在这里插入图片描述

在8个通用寄存器中,有一个寄存器叫SP,SP作为通用寄存器是可以用来暂存中间运算结果的。但在很多时候它是作为专用寄存器使用的(只要程序中牵扯到堆栈段的操作),它的专用就是用来存放栈顶的偏移地址,因此SP也称为栈顶指针

栈顶等于栈底,则表示是空栈;
栈顶等于栈首,则表示是满栈。

在这里插入图片描述

5.计算机总线结构

在这里插入图片描述

6.

十进制数转换为二进制数:

对整数,除2取余;对小数,乘2取整。
eg:48.25
对小数部分,0.25×2=0.5,0.5×2=1,所以取0 1,所以48.25=110000.01B。

十六进制与二进制的转换

用4位二进制数表示1位十六进制数;
整数部分,从小数点向左组,每4位一组,不够4位的高位补0。小数部分,从小数点向右分组,不够4位的在低位补0。
eg:
(1)25.5=11001.1B=0001 1001.1000B=19.8H;
(2)1100 1010.0110 101B=1100 1010.0110 1010B=CA.6AH。
(3)X=-52=-0110100,Y=116=+1110100,求X+Y=?
[X]原=1011 0100,[X]补=[X]反+1=1100 1100;
[Y]补=[Y]原=0111 0100;
[X+Y]补=[X]补+[Y]补=1100 1100+0111 0100=0100 0000;
X+Y=+1000000。
“异或”逻辑:
F=A非 与 B + A 与 B非 = A⊕B,相同则为0,相异则为1。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值