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

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

2008-12-9 11:48
14526

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


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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

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

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

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

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没有足够多的寄存器,所以通常使用内存操作数,而寄存器常常只用来做“暂存器”。

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

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

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

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