网站大量收购闲置独家精品文档,联系QQ:2885784924

内存地址空间教案.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内存地址空间上述的那些存储器,在物理上是独立的器件,但是在以下两点上相同。都和CPU的总线相连。CPU对它们进行读或写的时候都通过控制线发出内存读写命令。这也就是说,CPU在操控它们的时候,把它们都当作内存来对待,把它们总的看作一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。在汇编这门课中,我们所面对的是内存地址空间(在统一的逻辑存储器中)。图1.8展示了CPU将系统中各类存储器看作一个逻辑存储器的情况。?图1.8? 将各类存储器看作一个逻辑存储器在图1.8中,所有的物理存储器被看作一个由若干存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。假设,图1.8中的内存地址空间的地址段分配如下。地址0~7FFFH的32KB空间为主随机存储器的地址空间;地址8000H~9FFFH的8KB空间为显存地址空间;地址A000H~FFFFH的24KB空间为各个ROM的地址空间。这样,CPU向内存地址为1000H的内存单元中写入数据,这个数据就被写入主随机存储器中;CPU向内存地址为8000H的内存单元中写入数据,这个数据就被写入显存中,然后会被显卡输出到显示器上;CPU向内存地址为C000H的内存单元中写入数据的操作是没有结果的,C000H单元中的内容不会被改变,C000H单元实际上就是ROM存储器中的一个单元。内存地址空间的大小受CPU地址总线宽度的限制。8086CPU的地址总线宽度为20,可以传送220个不同的地址信息(大小从0至220-1)。即可以定位220个内存单元,则8086PC的内存地址空间大小为1MB。同理,80386CPU的地址总线宽度为32,则内存地址空间最大为4GB。我们在基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存地址空间分配情况。因为当我们想在某类存储器中读写数据的时候,必须知道它的第一个单元的地址和最后一个单元的地址,才能保证读写操作是在预期的存储器中进行。比如,我们希望向显示器输出一段信息,那么必须将这段信息写到显存中,显卡才能将它输出到显示器上。要向显存中写入数据,必须知道显存在内存地址空间中的地址。不同的计算机系统的内存地址空间的分配情况是不同的,图1.9展示了8086PC机内存地址空间分配的基本情况。图1.9告诉我们,从地址0~9FFFF的内存单元中读取数据,实际上就是在读取主随机存储器中的数据;向地址A0000~BFFFF的内存单元中写数据,就是向显存中写入数据,这些数据会被显示卡输出到显示器上;我们向地址C0000~FFFFF的内存单元中写入数据的操作是无效的,因为这等于改写只读存储器中的内容。内存地址空间最终运行程序的是CPU,我们用汇编语言编程的时候,必须要从CPU的角度考虑问题。对CPU来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。网卡物理地址和MAC地址的几点感想网卡物理地址指的是网卡存放在存储器里的地址,而MAC地址是网卡工作的时候用的地址,当然一般情况下这两个地址是一样的。??? 这里要说的是存储器通常是指EEPROM,我想只要你乐意将网卡物理地址其他存储器也是可以的。??? 事实上存放在EEPROM内的物理地址是什么并不非常重要。因为网卡工作的时,只会加入CRC和前导码(这个到底是网片的逻辑加的,还是电路设计加入,不是很清楚)。通常的数据链路层所看到的源地址和目的地址都是驱动程序加的。因此我们可以将任意一个网卡使用任意的MAC地址。??? 例如:在Windows系统,在初次安装网卡和使用网卡时(具体的实现细节可能会有出入,应该是可以检测出有变化和注册表值无效都会重新读入),Windows操作系统会将网卡物理地址读入,并写入注册表。以后需要发送报文时将在注册表中读入。??? 在我工作使用的嵌入式系统内部实现有这样几种情况:??? 1、每次初始化网口,读取EEPROM内部物理地址至内存,以后使用内存读取到的MAC地址通讯??? 2、每次初始化网口,不读取EEPROM内部物理地址,而是按照一定规则计算得出MAC地址通讯??? 3、是1和2的综合,在操作系统初始化阶段采用1,而当应用层初始化时候,再次初始化网口,重新计算并使用新的MAC地址通讯。??? 2和3计算法得出的MAC地址又存在2种处理,1、写入EEPROM,2、不写入仅使用。推荐使用不写入的方法,因写入后多次测试更换后将可能出现使用的MAC地址冲突情况,这个已经见过很多次了。总结:??? 1、驱动在填入源地址和目的地址时,使用的都是内存中的MAC地址,一般情况不会再去读取真实的物理地址。??

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档