2 yzy4829229 yzy4829229 于 2015.06.02 20:45 提问

关于8086CPU给出物理地址的问题

根据王爽老师书籍中的描述:CPU中把一个16位的段地址和一个16的偏移地址输入进地址加法器,然后段地址×16+偏移地址输出一个20位的物理地址。
那么我的问题是:已经说明了CPU是16位的了,那么寄存器的最大宽度也是16位,也就是说在寄存器中存储的数字最大是65535,那么这20位的地址是怎么保存的?

4个回答

a1193561652
a1193561652   Rxr 2015.06.02 21:37
已采纳

20位的分为两部分保存(段地址和偏移地址),两部分合成的20位的数不保存,直接输出到地址总线。

caozhy
caozhy   Ds   Rxr 2015.06.02 20:46

用两个寄存器保存,64K的地址+偏移量。

caozhy
caozhy 回复易天曦: 不需要移动,两个寄存器
大约 3 年之前 回复
yzy4829229
yzy4829229 那么段地址在向左移动四位的时候,原来就是16位,它移动4位,那么最前面四位不会丢失吗
大约 3 年之前 回复
gamefinity
gamefinity   Rxr 2015.06.02 21:11
  • CS:IP
  • 事实上根本没有保存这个地址的地方
  • CS是代码段寄存器,保存了地址的前面16位
  • IP是指令指针,它只在一个段里面起作用。也就是说它是管得到64K里的内容。
  • 每段代码执行的时候,必须先明确CS,然后在CS的控制范围内移动你的IP。如果你的程序大到>64K的话,必须有额外的指令帮你切换CS,才能达到超越64K的目的。
  • 这个就是所谓8086的的实模式
yunfenglw
yunfenglw   2015.06.02 21:17

因为x86处理器地址总线是20位,最大管理1M内存,对应物理地址是00000H-fffffH
而内部数据总线、寄存器都是16位的,能表示的范围为0000H-ffffH

如何用16位寄存器表示20位?想到这样一种方式:
把两个16位寄存器相加得到20位,于是便有了
物理地址=段地址*16+偏移地址
相当于在16位地址后面加4个0,形成20位地址

具体过程如下:
段地址和偏移地址通过内部总线传入到地址加法器的部件;
地址加法器将两个16位地址合并为一个20位的物理地址;

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
2.6 8086CPU给出物理地址的方法
8086CPU有20位地址总线,可以传送20位地址,达到1MB的寻址能力。8086CPU又是16位结构,在内部一次性处理、传输、暂时存储的地址为16位。    从8086CPU的内部结构来看,如果将地址从内部简单地发出,那么它只能送出16位的地址,表现出的寻址能力只有64KB。       8086CPU采用一种在内部用两个16位地址合成方法,来形成一个20位的物理地址。      
汇编2-8086cpu确定物理地址的方式
1.引言 cpu一般是偶运算器、控制器、存储器组成,这些器件也是利用总线相连,只不过这里提及的总线是内部总线,与之前提到的总线不同。运算器负责信息处理,寄存器负责信息存储,控制器控制各个部件工作。对一个汇编程序员来说,最重要的就是寄存器,因为程序员就是通过操作各种寄存器来控制cpu从而实现特定的功能。 不同的cpu寄存器的个数与格式都是不同的。8086一共有14个寄存器:AX、BX
2.6 8086 CPU给出的物理地址的方法
8086是16位结构的CPU,16位结构的CPU常见的几种说法是(16位机,字长为16位等,与16为结构含义相同)。16位结构描述了一个CPU具有下面几个方面的结构哦特征:。运算器一次最多可以处理16位的数据。寄存器的最大宽度为16位。寄存器和运算器之间的通路为16位8086是16位结构的CPU,也就是说在8086内部能够一次性处理、传输、暂时存储的信息的最大长度是16位。内存单元的地址在送上地址总线之前,比须在CPU中处理、传输、暂时存放,对于16位的CPU能一次性处理、传输、咱数存储16位的地址。---
8086CPU
1、  8086CPU和8088CPU内部结构基本相同,不同之处在于8088有8条外部数据总线,因此为准16位。8086有16条外部数据总线。两个CPU的软件完全兼容,程序的编制也完全相同。2、  8086CPU从功能上分为两大部分:一是执行部件(EU),二是总线接口部件(BIU)。执行部件是由以下虽部分组成:(1)四个通用寄存器:AX BX CX DX(2)四个专用寄存器:基数指针寄存器BP,堆
逻辑地址/转线性地址/物理地址
逻辑地址转线性地址 机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过 MMU (CPU中的内存管理单元)转换成物理地址才能够被访问到。 我们写个最简单的 hello world 程序,用 gcc 编译,再反汇编后会看到以下指令: mov 0x80495b0, %eax 这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的 DS 数
汇编学习--7.9--寄存器
1.  CPU 由运算器 控制器 寄存器等器件构成,这些器件靠内部总线相连,它们之间进行数据传送。      对于一个汇编程序员来说: CPU里的主要部件是 寄存器。通过改变寄存器的内容实现对CPU的控制。   不同的CPU,寄存器的个数,结构都不相同。 2.  8086CPU的所有寄存器都是 16位,存放两个字节,8086共有14个寄存器。 AX, BX, CX, DX四个寄存器通常
8086的CPU工作原理演示动画
包令这些: CPU内存中读/写数据的过程.swf 8086CPU读取/执行指令的过程.swf 8086CPU给出物理地址的方法.swf 8086CPU栈操作的方法.swf 内部中断过程.swf 端口读写.swf ...
2.4 8086微处理器的存储器管理
 1.存储单元的地址和内容  计算机存储信息的基本单位是一个二进制位(bit)。一位可存储一个二进制数:0或1,每8位组成一个字节。微机中常用的数据类型有:  ·字节:存储器中存取信息的基本单位。我们常说某存储器容量是64MB,就是说该存储器有64M(1M=220)个字节。其位编号如图2.5(1)所示。  ·字:一个字16位,占用两个字节,8086的字长就是16位的。一个字的位编号如图2.5(2)
Intel 8086处理器
Intel 8086的地位毋庸置疑。 1.8086的通用寄存器 8个16位通用寄存器 AX,BX,CX,DX,SI,DI,BP,SP,前四个又各自可拆分成两个8位寄存器使用,比如AX=>AH,AL 2.内存分段机制 段地址:偏移地址 为逻辑地址;代码段寄存器(Code Segment,CS)和数据段寄存器(Data Segment,CS) 3.8086内存分段机制 8086内部有4个段
8086/8088微处理器的系统结构
一、 8086/8088微处理器的基本结构      Intel 8086 微处理器有16位寄存器和16位外部数据总线,20位地址总线,寻址为1MB的地址空间。Intel 8088 微处理器的外部数据总线为8位,其他与8086是一样的。      图一 8086微处理器的结构       从图中可以看出,8086 CPU从功能上划分成两部分:总线接口单元BIU(Bus