免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 怪怪虎
打印 上一主题 下一主题

寄存器有地址吗 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2008-10-24 14:38 |只看该作者
这个讨论没有意义
找个cpld来烧一下就明白了

论坛徽章:
0
32 [报告]
发表于 2008-10-27 22:41 |只看该作者

回复 #31 wangyuu235 的帖子

cpld 是什么咚咚?忘赐教。

以下是个人理解:(纯属个人想法)
cpu内部的寄存器实际上是个有与非门组成的电路,是一个存在的物理实体。如果在学习的角度上我们可以认为他是有地址的,我们平常用的一些特殊的指令,如rdtsc,lgt等等用到了特殊的寄存器,这些寄存器对这些指令都是透明的,即指令知道这些特殊寄存器的位置,会把数据送到特定的位置。

论坛徽章:
0
33 [报告]
发表于 2008-10-27 23:00 |只看该作者

回复 #32 怪怪虎 的帖子

google PLA PLD CPLD FPGA

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
34 [报告]
发表于 2008-10-28 00:33 |只看该作者
其实如何访问只是一个手段问题而已,既然手段合理,为什么不去使用呢?

论坛徽章:
0
35 [报告]
发表于 2008-10-29 16:40 |只看该作者
知名的,预设的地址

论坛徽章:
0
36 [报告]
发表于 2008-10-30 13:05 |只看该作者
寄存器都没有地址的吧!
至少程序中不可读其地址
也不能用指针指向他

论坛徽章:
0
37 [报告]
发表于 2008-11-01 12:56 |只看该作者
我是新手,刚学习X86体系,可能说错了,希望理解,就当笑话,一笑而过,
在cpu看来,所有的东西都被看成是地址寻址(也就是里边的引脚),因此寄存器也是有地址的,命令也是有地址的,好像指令集和通用寄存器是在一起的(就像内存逻辑分段一样,命令在命令段,寄存器在寄存器段),唯一例外的是立即数,但它也有特定的引脚连接立即数产生电路产生的。
0B0B:0102 B80002        MOV     AX,0200
0B0B:0108 B80200        MOV     AX,0002
这两条指令比较之后,看出前面的B8一样,说明这两条指令不随ax值得变化而变化,这只能说明寻址的是ax的地址,
0B0B:0100 89D8           MOV     AX,BX
0B0B:0102 B80002        MOV     AX,0200
0B0B:0105 A10002        MOV     AX,[0200]
0B0B:0100 BB0002        MOV     BX,0200
0B0B:0103 8B1E0002      MOV     BX,[0200]
0B0B:0107 BE0002        MOV     SI,0200
0B0B:010A 8B360002      MOV     SI,[0200]
0B0B:010E 89DE          MOV     SI,BX
0B0B:0110 89F0          MOV     AX,SI
这些指令看出当有寄存器参与之后,寻址方式变化之后,指令的2进制表示就会不同,说明指令是由命令和寄存器加寻址方式经过了一种特殊的运算形成,而内存里的东西,在cpu看来就是一些外来的参数,而且是CPU所不理解的东西,因此在指令的表示里只能照搬过来,如0B0B:0102 B80002        MOV     AX,0200,B80002 就把0200给搬到指令中去。
所有这些指令中寄存器的地址是隐含的。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
38 [报告]
发表于 2008-11-01 13:06 |只看该作者
原帖由 06403213 于 2008-11-1 12:56 发表
我是新手,刚学习X86体系,可能说错了,希望理解,就当笑话,一笑而过,
在cpu看来,所有的东西都被看成是地址寻址(也就是里边的引脚),因此寄存器也是有地址的,命令也是有地址的,好像指令集和通用寄存器是 ...

此寻址非彼寻址,LZ的寻址特制挂在地址总线上

论坛徽章:
0
39 [报告]
发表于 2008-11-01 20:49 |只看该作者
原帖由 cjaizss 于 2008-11-1 13:06 发表

此寻址非彼寻址,LZ的寻址特制挂在地址总线上

如果按这个理解,那寄存器“一般”是没有地址的。
同样以X86为例。在所有的指令里,没有寄存器地址的信息。
楼上的楼上所看到的,只是指令中地址码部分里对寄存器的编码(序号),根本不是寄存器地址。
当然,在CPU内部,寄存器必须是有地址的。否则,一大堆寄存器,会走错门的。
因此,对于绝大多数CPU来说,寄存器地址是内部的,不反映在指令里。

论坛徽章:
0
40 [报告]
发表于 2009-02-05 17:39 |只看该作者
这个问题有点复杂:
寄存器分为两种:
第一种是CPU专用寄存器,如R0--R31,这种寄存器访问使用的是CPU指令集,它的作用是初始化CPU以及相关外设,一般来说只有做系统启动的工程师才关心这种寄存器
第二种寄存器是设备专用寄存器,这种寄存器对于程序员来说是有地址的,这个地址的确定是由硬件逻辑人员来提供给驱动程序员的,一般来说这种寄存器是做驱动的工程师需要关心的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP