内存为什么要分段? 分成多少种段? 段与段寄存器的区别?

 我来答
夜隐霜华
推荐于2017-11-24 · TA获得超过3922个赞
知道小有建树答主
回答量:656
采纳率:100%
帮助的人:298万
展开全部
8086CPU有20根地址线,最大可寻址内存空间为1MB。而8086的寄存器只有16位,指令指针(IP)和变址寄存器(SI、DI)也是16位的。用16位的地址寻址1MB空间是不可能的。所以就要把内存分段,也就是把1MB空间分为若干个段,每段不超过64KB,在8086中设置4个16位的段寄存器,用于管理4种段:CS是代码段,DS是数据段,SS是堆栈段,ES是附加段。
把内存分段后,每一个段就有一个段基址,段寄存器保存的就是这个段基址的高16位,这个16位的地址左移四位(后面加上4个0)就可构成20位的段基址。
追问
访问内存空间与寄存器有啥关系啊?为什么16不能寻到1M?还有内存是不是分成四种段啊?(CS/DS/SS/ES)?段寄存器就是其管理作用吗?
先加20分。若满意会再加分的!
追答
寄存器是CPU内部的存储部件与内存空间没有关系,设置寄存器的原因是为了减少CPU与内存交换数据的次数,以提高计算机的工作速度。
内存空间和地址线的关系为:存储容量=2^n(n是地址线的数量),所以16根地址线只能访问2^16=64K的存储空间。
内存是分成四种段,这是考虑到程序执行时需要的四个部分。但是,内存不止四个段,只是同时最多只有四个段在工作,其他的在“睡眠”,需要时再“唤醒”。
内存分段后,内存的地址(又称物理地址)就由两部分组成:段地址和段内偏移地址,段寄存器管理的是段地址。
天晴在那天
2011-05-26 · TA获得超过3263个赞
知道小有建树答主
回答量:782
采纳率:0%
帮助的人:573万
展开全部
楼上已经讲得很完善了,我这里说一下段寄存器:它是专门存放段地址的寄存器,
有代码段CS (存放偏移地址寄存器 IP 注:这是8086和8088的 80386前面加一个E以后类推 )
数据段DS (SP BP)
堆栈段SS(BX DI SI 或一个16位数)
附加段ES(DI 用于串指令) (还有FS GS)
它们各自都有一个确定的段起始地址,用途也各不一样,代码段存放正在运行的程序,数据段存放当前运行程序的数据,堆栈是一种数据结构,堆栈段定义了堆栈的所在区域,附加段就是附加的数据段。
段和段寄存器的关系:程序员在编制程序时,应该按照上述规定(什么放什么)把程序的各部分放在规定的段区之内,每个段独立地占用64KB的存储区。
为什么要分段?很明显是为了便于管理,这里有个名词叫“分段储存管理”(还有分页),目的是为了满足用户(程序员)在编程和使用方面的要求,比如用户把自己的作业按照逻辑关系划分成若干个段,每个段都是从0开始编制,因此希望要访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定,所以是非常必要的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户66275
2014-04-29 · TA获得超过292个赞
知道答主
回答量:123
采纳率:0%
帮助的人:176万
展开全部
楼上已经讲得很完善了,我这里说一下段寄存器:它是专门存放段地址的寄存器,有代码段CS (存放偏移地址寄存器 IP 注:这是8086和8088的 80386前面加一个E以后类推 )数据段DS (SP BP)堆栈段SS(BX DI SI 或一个16位数) 附加段ES(DI 用于串指令) (还有FS GS)它们各自都有一个确定的段起始地址,用途也各不一样,代码段存放正在运行的程序,数据段存放当前运行程序的数据,堆栈是一种数据结构,堆栈段定义了堆栈的所在区域,附加段就是附加的数据段。段和段寄存器的关系:程序员在编制程序时,应该按照上述规定(什么放什么)把程序的各部分放在规定的段区之内,每个段独立地占用64KB的存储区。为什么要分段?很明显是为了便于管理,这里有个名词叫“分段储存管理”(还有分页),目的是为了满足用户(程序员)在编程和使用方面的要求,比如用户把自己的作业按照逻辑关系划分成若干个段,每个段都是从0开始编制,因此希望要访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定,所以是非常必要的。 查看原帖>>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
窥窥爱絮色168
2014-04-29 · TA获得超过129个赞
知道答主
回答量:137
采纳率:0%
帮助的人:141万
展开全部
8086CPU有20根地址线,最大可寻址内存空间为1MB。而8086的寄存器只有16位,指令指针(IP)和变址寄存器(SI、DI)也是16位的。用16位的地址寻址1MB空间是不可能的。所以就要把内存分段,也就是把1MB空间分为若干个段,每段不超过64KB,在8086中设置4个16位的段寄存器,用于管理4种段:CS是代码段,DS是数据段,SS是堆栈段,ES是附加段。把内存分段后,每一个段就有一个段基址,段寄存器保存的就是这个段基址的高16位,这个16位的地址左移四位(后面加上4个0)就可构成20位的段基址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2022-06-18 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部

8086/8088  CPU,具有 20 条地址线。

所以,它可以访问 1MB 的存储器范围。

由于 CPU 中的寄存器,都是十六位的。

20 位的地址,不可能正常存放。

所以,Intel 公司就采用了一个笨办法:分段访问

每个段,仅有 16 地址数据。

因此,CPU 就能随意的访问:64KB。

CPU 共有四个段寄存器。

所以,CPU 可以访问的最大值:256KB。

但是,段和段,是可以重合的。

如果四个段,完全重叠!

那么,CPU 能访问的范围,就是最小值:64KB。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式