Bootstrap

8086CPU只有16位寄存器,却可以访问20位的物理地址

一、背景介绍

Intel 8086是一个由Intel于1978年所设计的16位微处理器芯片,是x86架构的鼻祖。它是以8080和8085的设计为基础,拥有类似的寄存器组,但是数据总线扩充为16位。总线界面单元(Bus Interface Unit)透过6字节预存的队列位指令给执行单元(Execution Unit),所以取指令和执行是同步的,8086 CPU有20条地址线,可直接寻址1MB的存储空间,每一个存储单元可以存放一个字节(8位)二进制信息。

二、16位的寄存器为什么可以访问20位的物理地址

地址线有20位,寄存器却只有16位,这不矛盾么?怎么才能用16位的寄存器来访问20位地址线所表示的内存范围(1M)呢?答案就是用两个寄存器,一个用来表示段(也就是段寄存器),一个用来表示段内的偏移,这样才可以做到访问20位地址线所代表的内存范围。将段地址左移4bit,则扩充到了20bit。我们知道,左移1位就是乘2,所以有了段地址×16+偏移地址,也就是段地址×10H+偏移地址,这个逻辑地址与物理地址的转换公式。

而采取这样的办法纯粹是因为硬件设计的原因,不得已而为之。

这里写图片描述

这两个16位寄存器提供的地址分别称为段地址偏移地址
它们通过地址加法器合成一个20位物理地址,然后通过内部总线将20位物理地址送到输入输出控制,之后,通过地址总线送到储存器

参考:

https://tntaxin.blog.csdn.net/article/details/78965130?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.control

 

;