打印

寄存器统一编址?

[复制链接]
2986|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
longwuyi|  楼主 | 2007-5-15 20:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
high| | 2007-5-15 21:31 | 只看该作者

cpu架构决定了编址

一般一套总线的risc,把一段内部地址分配给内部寄存器。(一般是高端地址)。所以可以 以看起来访问内存的方式来访问寄存器。而且,他所有地址不会重合,这么就叫统一编址。

有2套总线结构的可以分开编址,操作同一地址借由不同指令,比如0地址可以是内存也可以是rom.由指令来分别。

使用特权

评论回复
板凳
平常人| | 2007-5-15 21:39 | 只看该作者

楼主说“有些平台是通一编址”,请教一下哪些不是通一编

你的WDM是指什么? Windows Driver Model?  好像应该只有x86吧?

使用特权

评论回复
地板
high| | 2007-5-15 21:43 | 只看该作者

还是平常人仔细

使用特权

评论回复
5
ahwei| | 2007-5-15 22:44 | 只看该作者

wdm中两种都支持

io地址空间的编址有两种方式,io独立编址和存储器映像编址,io独立编址中,io端口操作有独立的指令,如x86中的in,out,相应的io总线中有iord, iowr读写控制信号。存储器映像编址中用存储器地址对io端口寻址,直接用操作存储器的指令即可操作io,如mov,ld,st等等,51就是这种编址方式。
但是现在很多高级处理器对存储器访问作了优化,如缓存,预取等等,而io操作通常要求实时性,比如一个寄存器当前的某个bit是1,必须在1ms后把它置成0,存储器编址就得花另外的代价解决这个问题,这就是pci总线的内存空间分为prefecth和nonprefetch的原因。存储器编址用c语言比较容易编程,比如要给0x80地址写0x5a,只需*((char*)(0x80)) = 0x5a即可,而在io独立编址中,往往得写一个函数或者是宏。
x86中有64k的io地址空间,外设接口卡可以使用,在pci总线中这是动态分配的,同时还可以使用内存空间,这在pci总线中也得到了很好的支持,在设备枚举时bios或者windows会动态的分配这些io空间和内存空间,一个外设到底使用什么空间这是设计者考虑的事情。
但是对于wdm驱动程序来说,hal.dll导出了一系列的宏,只要用这些宏操作就可以了,不过一般来说,自己写驱动时,除了pci驱动,其他的很少使用到。 

使用特权

评论回复
6
high| | 2007-5-16 09:18 | 只看该作者

顶楼上,相当有经验。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

61

帖子

0

粉丝