pingjingde
驱动牛犊
驱动牛犊
  • 注册日期2003-03-05
  • 最后登录2004-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1399回复:8

我明白了不仅非常感谢你 我所有的分都给你

楼主#
更多 发布于:2004-05-10 16:18
在过去的程序设计中,分为代码段,数据段和附加段。 代码段是不是在内存中一个连续的空间,而数据段在内存的另外一个连续空间。那么是不是每条指令在需要访问数据的时候必须改变段寄存器的值,这样是不是很慢??为什么这样设计?


是不是和intel处理器的 机器码怎么访问内存的 访问代码段然后再切换到数据段 在却换到代码段然后再切换到数据段

这样是不是 机器很大的浪费吗〉

给我指点一下好吗?? 困惑我很久了,非常感谢

能给我讲清 所有的分都给你
escape
驱动老牛
驱动老牛
  • 注册日期2002-02-01
  • 最后登录2004-08-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-10 16:44
嗬嗬,都是用虚拟内存了,哪有什么连续内存啊?
段寄存器有好几个哟。
先把分给了,有问题可以继续问.
pingjingde
驱动牛犊
驱动牛犊
  • 注册日期2003-03-05
  • 最后登录2004-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-10 16:51
  我是问以前的计算机结构
汇编语言程序结构 设计都是那样干的

我想了解早期 机器指令运行的真实情况
现在人们离机器  越来越远了
escape
驱动老牛
驱动老牛
  • 注册日期2002-02-01
  • 最后登录2004-08-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-10 16:53
早期何必管那么多。都过时了。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2004-05-10 20:46
嘿嘿。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
Ymd1023
驱动中牛
驱动中牛
  • 注册日期2002-11-22
  • 最后登录2008-05-07
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-05-11 14:13
 
早期何必管那么多。都过时了。
YMD
root60931
驱动大牛
驱动大牛
  • 注册日期2002-10-25
  • 最后登录2023-10-29
  • 粉丝2
  • 关注0
  • 积分1013分
  • 威望432点
  • 贡献值0点
  • 好评度311点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2004-05-13 23:10
哈哈, 你说的事8086的汇编吧,在8086年代程序的确是分为代码段,数据段和附加段,但每个段都有一个段基址寄存器分别为cs,ds,es。所以访问不同的段时并不需要在各个段之间切换,cs专门用来访问代码段,ds访问数据段,es访问附加段。所以不用担心访问不同的段要频繁的改变寄存器的值。

真正会让你感觉会浪费机器的在下面:
286以后的cpu添进了保护模式(之前的cpu都是工作在实模式下,使用 【段:偏移】的方式寻址),增加了fs,gs两个段寄存器。保护模式的寻址方式分为以下三种:
1:分段机制
这时的内存被分为很多段,并为每个段建立一个描述符,所有的描述符组成描述符表,描述符里记录了该段的基地址,段的长度,访问权限,访问特权级等。访问内存时也是采用段:偏移的方式,但这是的段寄存器里存放的不是段的基地址,而是一个选择子,用来选择描述符表中的一个描述符,从描述符里得到的才是真正的基地址,这是保护机制起作用了,它要判断要访问的偏移地址时否大于该段的长度,该段是否允许被以当前的方式被访问,是否有权限访问该段,等。若都可以才可以访问,否则会出现保护异常,就时我们常遇到的非法操作。

2:分页机制
涉及到页表(甚至一级页表,二级页表),缺页故障。总之也很复杂。
(未完待续)

3:段页结合机制
呵呵,一看就知道更复杂
(未完待续)

睡觉! zzzzzZZZZZ
好好学习,天天向上! root60931@gmail.com
flyhobo
驱动小牛
驱动小牛
  • 注册日期2004-03-05
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-14 13:58
哈哈, 你说的事8086的汇编吧,在8086年代程序的确是分为代码段,数据段和附加段,但每个段都有一个段基址寄存器分别为cs,ds,es。所以访问不同的段时并不需要在各个段之间切换,cs专门用来访问代码段,ds访问数据段,es访问附加段。所以不用担心访问不同的段要频繁的改变寄存器的值。

真正会让你感觉会浪费机器的在下面:
286以后的cpu添进了保护模式(之前的cpu都是工作在实模式下,使用 【段:偏移】的方式寻址),增加了fs,gs两个段寄存器。保护模式的寻址方式分为以下三种:
1:分段机制
这时的内存被分为很多段,并为每个段建立一个描述符,所有的描述符组成描述符表,描述符里记录了该段的基地址,段的长度,访问权限,访问特权级等。访问内存时也是采用段:偏移的方式,但这是的段寄存器里存放的不是段的基地址,而是一个选择子,用来选择描述符表中的一个描述符,从描述符里得到的才是真正的基地址,这是保护机制起作用了,它要判断要访问的偏移地址时否大于该段的长度,该段是否允许被以当前的方式被访问,是否有权限访问该段,等。若都可以才可以访问,否则会出现保护异常,就时我们常遇到的非法操作。

2:分页机制
涉及到页表(甚至一级页表,二级页表),缺页故障。总之也很复杂。
(未完待续)

3:段页结合机制
呵呵,一看就知道更复杂
(未完待续)

睡觉! zzzzzZZZZZ


感谢!!!!
请继续……
好好过日子
yekai
驱动牛犊
驱动牛犊
  • 注册日期2001-05-15
  • 最后登录2008-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-05-14 14:24
我说说我的理解,可能因为内存的访问以字节的整数倍为单位,所以寄存器的大小也以字节的整数倍为单位,那时候内存都很小,所以地址总线只有20位,所以用两个寄存器来放地址。
游客

返回顶部