0%

Intel 8086の存储器组织

简单记录一下Intel 8086存储器组织的相关内容( ~’ω’)~。

Intel 8086の存储空间

Intel 8086具有20条地址总线,可访问的存储大小为1MB,与之对应的物理内存地址为00000H~FFFFFH;存储器以字节为单位来对存储单元进行编址,一个存储单元写入一个字节的内容。

字节 & 字

Intel 8086的字长为16位,一个字由两个字节组成,占用相继的两个存储单元,大部分数据以字节为单位来表示;字节被顺序写入,低位字节被写入低地址,高位字节被写入高地址,同一地址既可以是字节单元地址,也可以是字单元地址,视使用情况而定

如上图所示,0004H既是字单元1234H的地址,也是字节单元34H的地址。

附:

Intel 8086也可使用双字、规则字和非规则字来表示数据:

  • 双字:双字型数据为32位的二进制数,需要占用连续的4个存储单元;

  • 规则字:低位字节被写入偶地址的存储单元,高位字节被写入奇地址的存储单元,在一个总线周期内完成读写;

  • 非规则字:写入规则与规则字相反,对非规则字的读写需要两个总线周期

    • 在第一个总线周期内,非规则字的低8位通过数据总线的高8位进行读写,数据总线的低8位处于空闲状态;

    • 在第二个总线周期内,非规则字的高8位通过数据总线的低8位进行读写,数据总线的高8位处于空闲状态。

在内存中,一个字节的数据既可以被写入奇地址的存储单元,也可以被写入偶地址的存储单元;读写一个字节时,只需要访问单个存储单元,相应的8位数据在数据总线上有效,而另一个字节的数据被忽略。

两个引脚的信号组合对存储器的读写控制:

Intel 8086の存储器分段结构

Intel 8086中用于写入地址的寄存器均为16位,最大只能寻址64KB的存储空间,若要访问1MB的存储空间,则需要对存储空间进行分段管理。

操作系统将存储器分为若干个逻辑段,每个逻辑段的存储容量小于或等于64KB,各逻辑段之间可以紧密相连,也可互相重叠

用户编写的程序(指令和数据)被写入相应的逻辑段,这些逻辑段的段地址则被写入Intel 8086相应的段寄存器,而这些指令和数据在逻辑段中的偏移地址则被写入Intel 8086相应的寄存器中,由段地址和偏移地址即可确定指令和数据在物理内存中的地址:将段地址左移四位,再加上偏移地址,即可得到20位的物理地址(物理地址=段地址×16+偏移地址)。

在物理内存中,每一个存储单元均有唯一一个物理地址,但其对应的段地址和偏移地址不唯一

补充

Intel 8086のI/O组织

Intel 8086采用独立编址方式(即I/O端口地址与物理内存地址分开独立编址,I/O端口地址不占用物理内存的地址范围,需要有专门的I/O指令和控制逻辑),通过I/O芯片与外部设备进行通信,每个I/O芯片设置有一定数目的端口,每个端口被分配一个地址,一个端口通常对应芯片内部的一个或一组寄存器。

Intel 8086通过地址总线的低16位对8位I/O端口进行寻址,可访问的8位I/O端口有65536(64K)个,两个地址相邻的8位端口可以组成一个16位端口。一个8位的I/O设备既可以连接到数据总线的高8位,也可以连接到数据总线的低8位。

当一个I/O设备接在数据总线的低8位时,该I/O设备的所有端口地址都将是偶地址;当一个I/O设备接在数据总线的高8位时,该I/O设备的所有端口地址都将是奇地址。

Intel 8086对偶地址的I/O设备进行16位数据的读写时,可在一个总线周期内完成;对奇地址的I/O设备进行16位数据的读写则需要两个总线周期来完成,与对存储器的读写操作类似。


参考资料:

8086/8088存储器和I/O组织