首页
社区
课程
招聘
[求助]CPU为什么不多做些寄存器呢
2008-12-9 11:48 14000

[求助]CPU为什么不多做些寄存器呢

2008-12-9 11:48
14000
core  I7也出来了,看起来很好很强大。  但为什么从8086到现在,CPU寄存器却没怎么变化,工艺技术应该能轻易解决吧。
    写汇编程序的时候常常感觉寄存器不够用,只好读写内存,如果做100个寄存器,我想可以很大地提高效率,最好按照摩尔定律翻番就更爽了。

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞7
打赏
分享
最新回复 (21)
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
shoooo 16 2008-12-9 11:49
2
0
为了下向兼容
p.s. 你怎么知道就没有100个寄存器呢
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
mik 4 2008-12-9 12:03
3
0
不多增加 GPRs 主要面临指令格式的问题。

要重新设计指令系统。 重新编排新的指令格式的话,那么原有的格式就不能平滑的使用了。

但我认为:重新设计指令格式增加 GPRs 而达到兼容目的还是可以的,前提是在 CPU 开启某种模式下。

但是处理器的解码单元要增加多点功夫了。
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
北极狐狸 7 2008-12-9 12:03
4
0
寄存器是做什么的啊?要那么多做什么?
吃吗?
呵呵............
小水一把....
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
mik 4 2008-12-9 12:14
5
0
寄存器当然更多些,要好啦。
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
北极狐狸 7 2008-12-9 12:51
6
0
就目前的寄存器数量,分析的时候已经够呛了....还要那么多。累死人啊.....
雪    币: 202
活跃值: (58)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
egogg 9 2008-12-9 13:08
7
0
cpu中实际的寄存器是很多很多的,公开给我们使用的只是那几个而已。同时也可能是为了指令编码和兼容问题,所以实际可以使用的寄存器就那么几个。
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
better 2 2008-12-9 13:12
8
0
不要硬盘,全变内存
不要内存,全变寄存器
……赞
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
北极狐狸 7 2008-12-9 13:59
9
0
要是真的这样了....文件保存到哪啊?呵呵..
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lttlst 2008-12-9 15:06
10
0
脑袋和电脑连接,直接进行生物存储,强```
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ucantseeme 2008-12-9 17:56
11
0
在多点就要吐啦
雪    币: 155
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
greatbob 2008-12-9 18:46
12
0
现在只能期盼我们的龙芯做成宇宙无敌
雪    币: 2108
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
书呆彭 6 2008-12-9 18:52
13
0
寄存器越多,当然对于提高性能就越有好处。

MIPS处理器最初设计为32个通用寄存器。至于现在发展到什么情况我没有关注过。

目前最流行的嵌入式处理器ARM,逻辑上有16个通用寄存器,外加程序计数器和状态寄存器。而由于一部分寄存器是分栏的(处理不同模式下对应不同的物理寄存器),实际上有37个物理寄存器。

安腾处理器构有多达127(128,其中r0为常数0)个整数处理器,128个浮点寄存器,以及64个判断寄存器(1位的,可以理解为标志位寄存器),8个转移寄存器。

除去上面这些普通寄存器,还有像控制寄存器、分区寄存器、缓冲管理寄存器、中断寄存器、性能监控寄存器等等许多组(不是个,是组)系统寄存器。

但安腾是高端机的,与80x86只能十分有限地“兼容”(实际上并不兼容,需要进行处理器状态切换,而且切换后也只能执行80x86指令集的一个子集)。

80x86之所以没有再增加寄存器,就如MIK所说,指令结构中用来编码寄存器的域只有3个位,所以只能有8个通用寄存器。

而x64增加了用REX前缀扩展了指令的编码,所以x64结构可以使用16个通用寄存器。

6楼狐狸说寄存器多了难以分析,但至少在我来说,做ARM的东西时比X86的东西要容易。做过Linux和uCOS-II,ARM的代码很简单,而x86(uCos-II发布版本带有一个8086的示例)反而没有ARM简单。

由于x86没有足够多的寄存器,所以通常使用内存操作数,而寄存器常常只用来做“暂存器”。

但有了足够多的寄存器后,分析一个函数,几乎所有的变量和参数都是寄存器,所以汇编语言看起来跟高级语言没什么区别了已经。
雪    币: 155
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
greatbob 2008-12-9 19:04
14
0
请问下书哥,做ARM开发直接用它的汇编多么,如果用LINUX开发,那是不是要用AT语法了,
雪    币: 2108
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
书呆彭 6 2008-12-9 19:22
15
0
1.做操作系统底层是离不开汇编的。但ARM的汇编很好掌握。

2.ARM的AT&T汇编相比x86的AT&T汇编要稍微容易掌握一点。

3.即使不会AT&T,GNU的工具集里也有支持ARM手册中给出的官方汇编格式的汇编器的。

4.而且,也不一定非要用Linux下的开发工具。Win平台很多工具是使用GNU工具链的,通过适当的配置就可以交叉编译到ARM-Linux。
雪    币: 6146
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shuichon 2010-4-2 23:12
16
0
学习了,当时自己学习的时候也有这个问题,现在终于知道怎么回事了。
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xouou 2010-5-8 04:14
17
0
潜力贴留名.字数补丁.字数补丁..
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
半道出家 2010-5-8 18:25
18
0
对于计算而言,通用寄存器的优点是速度快,但寄存器多了增加ALU等计算处理单元的复杂度,增加指令编码的长度(使用寄存器堆的还会增加管理的复杂度),更重要的,现在操作系统都是多线程的,在发生线程切换时,必须保存所有通用寄存器,重新加载新线程上下文中的所有寄存器,这无疑会增加线程资源开销。
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xinahau 2010-6-3 16:57
19
0
实际上来说,寄存器越多越好,可以一次性把东西都装载到寄存器中处理,效率可以提高很多。
雪    币: 54
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cykefu 2010-6-5 01:19
20
0
我不懂,但感觉18楼说的也有道理,若真的是寄存器越多越好,那么,INTEL公司早就解决这种技术问题了
雪    币: 217
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
esxgx 2011-8-12 13:59
21
0
如果没有那么广泛的用户群体,x86就什么也不是。。。。。。
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Tsinghua王 2011-8-12 20:11
22
0
寄存器是CPU很宝贵的资源,够用即可
游客
登录 | 注册 方可回帖
返回