8086存储器组织和IO组织 奇偶分体

8086的存储器组织

存储器的基本存储单位是字节,每个字节用唯一的地址码表示。

若存放的信息是8位的字节数据,将按顺序存放;

若存放的信息是16位的字数据,则将字的高位字节放在高地址中,低位字节放在低地址中(8086属于小端处理器);

若存放的信息是32位的双字指针数据,其低位地址中的字数据是偏移量,高位地址中的字数据是段基址。

存储器引脚

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20200330155907537.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dXSWFuZE1D,size_16,color_FFFFFF,t_70)

地址线 A0- An

地址输入用来选择存储器件中的一个存储单元。

数据线 D0-Dn

通过数据线输入数据存储,也能够提取数据。

选择线 CS*(片选)

选择线上信号为逻辑0时,存储器件执行一次读或写操作。如果是逻辑1,则存储器件不能进行读或写操作(处于禁用状态)

控制线 OE* WE*

OE(Output Enable),WE(Write Enable)

字数据的存取——奇偶分体

为了能对存储器进行字节寻址和整字(16位)的读写,把存储器分成容量相等的两个字节存储体——“偶存储体”和“奇存储体”,所谓奇偶分体。

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20200330171826314.jpg?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dXSWFuZE1D,size_16,color_FFFFFF,t_70)

如图所示,相邻的地址位于不同的存储体中,属于低位多体交叉存储器

偶存储体同DB的低8位D7-D0相连

奇存储体同DB的高8位D15-D8相连

AB的An-A1同两个存储体中的地址线An-1-A0

最低位地址线A0和BHE*用来选择存储体(根据半字边界对齐的要求,最低位默认为0,A0可移做他用)

这样可以选择:

传送两个字节(整字数据)

传送奇地址的高位字节

传送偶地址的低位字节

存放字数据时:

低地址为偶数,高地址为奇数存放的字被称为规则字

低地址为奇数,高地址为偶数存放的字被称为非规则字

读取规则字时,D7-D0传输偶存储体中的低8位数据,D15-D8传输奇存储体中的高8位数据。

读取非规则字时,因为A0地址线用作了奇偶体选择,所以存储器收到的地址都是偶数,不能从起始的奇数地址开始读。所以读取非规则字时,需要分开读取。

第一个总线周期

D15-D8从奇地址单元读取数据高8位

第二个总线周期

D7-D0从偶地址单元读取数据的低8位。

对于8086,非规则字的读取需要两个总线周期,规则字的读取只需要一个总线周期

对于8088,非规则字和规则字都要用两个总线周期(8088仅有8条数据线,16位的数据一定要读两遍)。

微机原理的问题:为什么8086存取一个非规则字比存取一个规则字多用一个总线周期?

分段管理

8086有20根地址线,拥有220=1M字节的内存空间,但8086的内部寄存器是16位的,只能直接寻址64KB的地址空间(216字节),为此16位微处理器引入分段概念。

8086把1MB空间分为若干逻辑段,每个段最多可以包含64KB的连续存储单元。

段和段之间可以是连续的,分开的,部分重叠的或完全重叠的。

每个段的起始地址值又叫段基址(Base Address),段区的分配工作由操作系统完成,也允许程序员手动指定。

物理地址和逻辑地址

物理地址:

CPU和存储器进行数据交换时使用的地址,是唯一能够表示存储空间每个字节单元的地址。用20位二进制数或5位十六进制数表示。

逻辑地址:

由两部分组成

段基址

偏移量

偏移量是指存储单元所在位置离段基址的偏移距离,又称偏移地址。基址和逻辑地址都用无符号16位二进制数或4位十六进制数表示。

物理地址 = 逻辑地址左移4位 + 偏移地址(通过地址加法器完成)

段基址来源于4个段寄存器,偏移地址来源于SP,BP,SI,DI和IP

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20200330205513650.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dXSWFuZE1D,size_16,color_FFFFFF,t_70)

I/O组织

8086系统和外设之间都是通过I/O芯片联系的。每个I/O芯片都有一个端口或者几个端口,一个端口对应芯片内部的一个寄存器或者一组寄存器。微机系统要为每个端口分配一个地址,这个地址叫端口号。

8086是用地址线的低16位来寻址8位I/O端口的,因此CPU可访问216 = 65536个I/O端口,并且,I/O端口的64KB寻址空间不需要分段。

通过M/IO*信号可以区分当前访问的是存储器还是I/O地址

Copyright © 2022 ZGC网游最新活动_热门游戏资讯_玩家互动社区 All Rights Reserved.