指令集体系结构(6)

 

3.4.3  ARM、MIPS之战

由于ARM公司和MIPS公司的商业模式相同,因此它们也经常被人们拿来作对比。很长一段时间内,在处理器本身的技术路线上,MIPS要强于ARM,但是在商业上,ARM要更强一些。

设计ARM的原始想法完全来自于MIPS研究小组发表的论文,两位优秀并敏感的英国工程师Sophie Wilson和Steve Furber看到论文后专门跑到美国去参观实习了一把,回去后就说服老板开始设计ARM1。ARM十几年磕磕碰碰走来,从ARM1一直做到现在的Cortex,其中有几个系列取得了巨大的商业成功:ARM7、ARM9、ARM11和Cortex。

一直到2000年前后,ARM和MIPS两个公司在业务规模上还是基本旗鼓相当的,差距出现在之后的IT泡沫破灭,MIPS的地盘在电信和网络市场,受到了惨重的打击。而手机日渐成为普通消费品,因此ARM的市场风生水起,从此这两家公司的差距增大。

人们买东西都会有一个特点:喜欢去人多的地方买。越拥挤,就会觉得店子越好,就越要挤进去。股市也有类似的一句话,叫:追涨杀跌。ARM这几年过的是越来越好,而MIPS的发展则相差甚远。

现在MIPS和ARM的市场定位有大量的重合,它们之间的竞争将会更加激烈。

3.5  汇编语言格式——没有规矩不成方圆

我对上帝说西班牙语,

对女人说意大利语,

对男人说法语,

对我的马说德语。  

——查理五世,法国国王

有这样一个笑话:中国留学生在国外的高速公路出车祸了,连人带车翻下悬崖,交警赶到后向下喊话:“How are you?”留学生回答:“I’m fine, thank you.”然后交警就走了,留学生于是死了。

由此可见,语言是很重要的,程序员学习处理器的语言也是很重要的,一来可以更了解处理器,二来在某些领域,如从事破解的,都需要知道一些汇编知识。、

3.5.1  机器字长

机器字长表示处理器一次处理数据的长度,主要由运算器、寄存器决定,如32位处理器,每个寄存器能存储32bit数据,加法器支持两个32bit数进行相加。

x86指令集的鼻祖是1978年出的16位处理器8086,现在Intel的处理器都是32位/64位的了,但是仍然能兼容传统的16位汇编进行编程。

32位处理器的地址总线通常都是32位,可寻址范围是4Gbyte,地址总线越宽,可寻址范围越大。通常数据总线的带宽都要高于机器字长,32位处理器很多都采用64bit、128bit的数据带宽,这样可以一次读取更多的数据。

目前嵌入式处理器大都以32位为主,而服务器和PC已经进入了64位时代。最早将x86扩展到64位的并不是大哥Intel,而是小弟AMD。2003年,AMD 推出 Opteron(皓龙),这是第一款含 x86-64 技术的处理器。AMD x86-64完美的兼容性和不错的性能赢得了一片喝彩,Intel立即意识到了问题的严重性,并迅速推出了自己的64位架构——EM64T,总算是扳回了一局。

3.5.2  操作数个数

x86处理器由于设计时间很早,那个时候晶体管紧张,寄存器数目较少,因此指令集在设计时,只使用了两个寄存器:

ADD  BX,  AX;源和目的操作数共用一个寄存器。

Intel后来扩充了一些SSE指令,有些SSE指令也使用3个操作数,1个源操作数,1个目的操作数,还有1个操作数作为mask(掩码)使用。

后来的RISC指令集,基本运算都使用了3个操作数,2个源操作数,1个目的操作数:

ADD  A1,  A2,  A3

3.5.3  操作数顺序

在x86处理器中,目的操作数放在前面,在C6000 DSP中,目的操作数放在最后。

x86指令格式:ADD  BX,  AX;表示将BX和AX的值相加,结果放到BX中。

C6000 DSP指令格式:ADD  A1,  A2,  A3;表示将A1和A2的值相加,结果放到A3中。

MIPS指令集也是3个操作数,不过和C6000 DSP不同的是:目的操作数是第一个操作数。

读书导航