8086cpu把1MB 的内存空间分成几个逻辑段?
一个段,范围就是64K。
段和段,可以重叠,甚至可以完全重合,即共用同一个64K。那么,就是可以随便分,多少段都行。 如果不重叠,最多就是分成16个段。因为:16 × 64K = 1M。
分段技术只是逻辑上的概念,并不是说非要把1MB的内存空间划分了,利用段+偏移来寻址,这样有助于数据的访问,不同的段只需要加载段首地址就可以实现访问了。
若干个具体是多少是不确定了,因为在实际的应用中,比如数据段和代码段这是可以重叠的,所以不能确定哪个段是某个固定的大小。另外利用分段技术可以很容易实现重定向的,这才是采用分段技术的关键说在。
扩展资料:
重叠部分可以是数据段也可以是代码段,一般规定一个段是64K,当用不了这么大的空间时就可以重叠了,比如说数据段在代码段的前端,如果数据段只占了8K空间,那么代码段就可以跟在其后进行分配了,这就叫重叠。应该从逻辑概念上理解为何要推出分段技术。
64kb,地址的定位是把段的基地址的16进制左移四位再加上偏移量,所以偏移量的取值范围决定了一个段中最多可以寻址的范围,也就是这个段可以存储多少单元,偏移量的范围是0000h-ffffh,所以是64kb。
内存分段问题 每段最大64kb 最小16b 这个是怎么算出来的啊
8086CPU中的寄存器都是16位的,16位的地址只能访问64KB的内存。086系统中的物理地址是由20根地址总线形成的,要做到对20位地址空间进行访问,就需要两部分地址,在8086系统中,就是由段基址和偏移地址两部分构成。
这两个地址都是16位的,将这两个地址采用相加的方式组成20位地址去访问存储器。在8086系统的地址形成中,当段地址确定后,该段的寻址范围就已经确定,其容量不大于64KB。同时,通过修改段寄存器内容,可达到逻辑段在整个1MB存储空间中浮动。
各个逻辑段之间可以紧密相连,可以中间有间隔,也可以相互重叠(部分重叠,甚至完全重叠)。采用段基址和偏移地址方式组成物理地址的优点是:满足对8086系统的1MB存储空间的访问,同时在大部分指令中只要提供16位的偏移地址即可。
扩展资料
把段的起始单元的物理地址除以16的结果称为段地址,它为16位,写成十六进制是4位:XXXXH。显然,段地址决定了段在lMB空间中的位置。段内各存储单元相对段的起始单元都有一个距离,称为段内偏移量。
在对内存进行操作时,段地址先确定下来,然后给出不同的段内偏移量,就可以实现段内的寻址。段地址也是可以改变的,即段在1MB空间中的位置是可变的,因而可实现1MB的全范围寻址。
由于采用了分段结构,因此可以把每一个存储单元看成是具有两种类型的地址:物理地址和逻辑地址。物理地址就是实际地址,它具有20位的地址值,它惟一地标识1MB存储空间的某一存储单元。CPU与存储器之间的信息交换都是使用这个物理地址。
逻辑地址是编程时所使用的地址,它由段地址和段内偏移量组成。逻辑地址和物理地址的关系为:物理地址=段地址16+段内偏移量。由逻辑地址形成物理地址是由总线接口部件中的电路实现的。
百度百科——内存分段
好像来的有些晚,以下是我的个人想法:
记得是老师在讲8086cpu的时候说的这句话吧,8086的地址线有20位,所以想表示某一个内存单元就得需要20位,但是内部的寄存器都是16位的啊,所以就得把这20位(1MB)的空间切分开,拿段地址(CS寄存器中存放)和偏移地址(IP寄存器存放)表示,因为IP是16位的,所以可寻址的空间是64KB;CS也是16位的,如果这些段地址全用上了,大家一起分这1MB,那么每段就只剩2^20/2^16=16B,这就是最小的情况
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!