3.4.3 ARM、MIPS之戰(zhàn)
由于ARM公司和MIPS公司的商業(yè)模式相同,因此它們也經(jīng)常被人們拿來(lái)作對(duì)比。很長(zhǎng)一段時(shí)間內(nèi),在處理器本身的技術(shù)路線(xiàn)上,MIPS要強(qiáng)于ARM,但是在商業(yè)上,ARM要更強(qiáng)一些。
設(shè)計(jì)ARM的原始想法完全來(lái)自于MIPS研究小組發(fā)表的論文,兩位優(yōu)秀并敏感的英國(guó)工程師Sophie Wilson和Steve Furber看到論文后專(zhuān)門(mén)跑到美國(guó)去參觀實(shí)習(xí)了一把,回去后就說(shuō)服老板開(kāi)始設(shè)計(jì)ARM1。ARM十幾年磕磕碰碰走來(lái),從ARM1一直做到現(xiàn)在的Cortex,其中有幾個(gè)系列取得了巨大的商業(yè)成功:ARM7、ARM9、ARM11和Cortex。
一直到2000年前后,ARM和MIPS兩個(gè)公司在業(yè)務(wù)規(guī)模上還是基本旗鼓相當(dāng)?shù)?,差距出現(xiàn)在之后的IT泡沫破滅,MIPS的地盤(pán)在電信和網(wǎng)絡(luò)市場(chǎng),受到了慘重的打擊。而手機(jī)日漸成為普通消費(fèi)品,因此ARM的市場(chǎng)風(fēng)生水起,從此這兩家公司的差距增大。
人們買(mǎi)東西都會(huì)有一個(gè)特點(diǎn):喜歡去人多的地方買(mǎi)。越擁擠,就會(huì)覺(jué)得店子越好,就越要擠進(jìn)去。股市也有類(lèi)似的一句話(huà),叫:追漲殺跌。ARM這幾年過(guò)的是越來(lái)越好,而MIPS的發(fā)展則相差甚遠(yuǎn)。
現(xiàn)在MIPS和ARM的市場(chǎng)定位有大量的重合,它們之間的競(jìng)爭(zhēng)將會(huì)更加激烈。
3.5 匯編語(yǔ)言格式——沒(méi)有規(guī)矩不成方圓
我對(duì)上帝說(shuō)西班牙語(yǔ),
對(duì)女人說(shuō)意大利語(yǔ),
對(duì)男人說(shuō)法語(yǔ),
對(duì)我的馬說(shuō)德語(yǔ)。
——查理五世,法國(guó)國(guó)王
有這樣一個(gè)笑話(huà):中國(guó)留學(xué)生在國(guó)外的高速公路出車(chē)禍了,連人帶車(chē)翻下懸崖,交警趕到后向下喊話(huà):“How are you?”留學(xué)生回答:“I’m fine, thank you.”然后交警就走了,留學(xué)生于是死了。
由此可見(jiàn),語(yǔ)言是很重要的,程序員學(xué)習(xí)處理器的語(yǔ)言也是很重要的,一來(lái)可以更了解處理器,二來(lái)在某些領(lǐng)域,如從事破解的,都需要知道一些匯編知識(shí)。、
3.5.1 機(jī)器字長(zhǎng)
機(jī)器字長(zhǎng)表示處理器一次處理數(shù)據(jù)的長(zhǎng)度,主要由運(yùn)算器、寄存器決定,如32位處理器,每個(gè)寄存器能存儲(chǔ)32bit數(shù)據(jù),加法器支持兩個(gè)32bit數(shù)進(jìn)行相加。
x86指令集的鼻祖是1978年出的16位處理器8086,現(xiàn)在Intel的處理器都是32位/64位的了,但是仍然能兼容傳統(tǒng)的16位匯編進(jìn)行編程。
32位處理器的地址總線(xiàn)通常都是32位,可尋址范圍是4Gbyte,地址總線(xiàn)越寬,可尋址范圍越大。通常數(shù)據(jù)總線(xiàn)的帶寬都要高于機(jī)器字長(zhǎng),32位處理器很多都采用64bit、128bit的數(shù)據(jù)帶寬,這樣可以一次讀取更多的數(shù)據(jù)。
目前嵌入式處理器大都以32位為主,而服務(wù)器和PC已經(jīng)進(jìn)入了64位時(shí)代。最早將x86擴(kuò)展到64位的并不是大哥Intel,而是小弟AMD。2003年,AMD 推出 Opteron(皓龍),這是第一款含 x86-64 技術(shù)的處理器。AMD x86-64完美的兼容性和不錯(cuò)的性能贏得了一片喝彩,Intel立即意識(shí)到了問(wèn)題的嚴(yán)重性,并迅速推出了自己的64位架構(gòu)——EM64T,總算是扳回了一局。
3.5.2 操作數(shù)個(gè)數(shù)
x86處理器由于設(shè)計(jì)時(shí)間很早,那個(gè)時(shí)候晶體管緊張,寄存器數(shù)目較少,因此指令集在設(shè)計(jì)時(shí),只使用了兩個(gè)寄存器:
ADD BX, AX;源和目的操作數(shù)共用一個(gè)寄存器。
Intel后來(lái)擴(kuò)充了一些SSE指令,有些SSE指令也使用3個(gè)操作數(shù),1個(gè)源操作數(shù),1個(gè)目的操作數(shù),還有1個(gè)操作數(shù)作為mask(掩碼)使用。
后來(lái)的RISC指令集,基本運(yùn)算都使用了3個(gè)操作數(shù),2個(gè)源操作數(shù),1個(gè)目的操作數(shù):
ADD A1, A2, A3
3.5.3 操作數(shù)順序
在x86處理器中,目的操作數(shù)放在前面,在C6000 DSP中,目的操作數(shù)放在最后。
x86指令格式:ADD BX, AX;表示將BX和AX的值相加,結(jié)果放到BX中。
C6000 DSP指令格式:ADD A1, A2, A3;表示將A1和A2的值相加,結(jié)果放到A3中。
MIPS指令集也是3個(gè)操作數(shù),不過(guò)和C6000 DSP不同的是:目的操作數(shù)是第一個(gè)操作數(shù)。