3.4.3 ARM、MIPS之戰(zhàn)
由于ARM公司和MIPS公司的商業(yè)模式相同,因此它們也經常被人們拿來作對比。很長一段時間內,在處理器本身的技術路線上,MIPS要強于ARM,但是在商業(yè)上,ARM要更強一些。
設計ARM的原始想法完全來自于MIPS研究小組發(fā)表的論文,兩位優(yōu)秀并敏感的英國工程師Sophie Wilson和Steve Furber看到論文后專門跑到美國去參觀實習了一把,回去后就說服老板開始設計ARM1。ARM十幾年磕磕碰碰走來,從ARM1一直做到現在的Cortex,其中有幾個系列取得了巨大的商業(yè)成功:ARM7、ARM9、ARM11和Cortex。
一直到2000年前后,ARM和MIPS兩個公司在業(yè)務規(guī)模上還是基本旗鼓相當的,差距出現在之后的IT泡沫破滅,MIPS的地盤在電信和網絡市場,受到了慘重的打擊。而手機日漸成為普通消費品,因此ARM的市場風生水起,從此這兩家公司的差距增大。
人們買東西都會有一個特點:喜歡去人多的地方買。越擁擠,就會覺得店子越好,就越要擠進去。股市也有類似的一句話,叫:追漲殺跌。ARM這幾年過的是越來越好,而MIPS的發(fā)展則相差甚遠。
現在MIPS和ARM的市場定位有大量的重合,它們之間的競爭將會更加激烈。
3.5 匯編語言格式——沒有規(guī)矩不成方圓
我對上帝說西班牙語,
對女人說意大利語,
對男人說法語,
對我的馬說德語。
——查理五世,法國國王
有這樣一個笑話:中國留學生在國外的高速公路出車禍了,連人帶車翻下懸崖,交警趕到后向下喊話:“How are you?”留學生回答:“I’m fine, thank you.”然后交警就走了,留學生于是死了。
由此可見,語言是很重要的,程序員學習處理器的語言也是很重要的,一來可以更了解處理器,二來在某些領域,如從事破解的,都需要知道一些匯編知識。、
3.5.1 機器字長
機器字長表示處理器一次處理數據的長度,主要由運算器、寄存器決定,如32位處理器,每個寄存器能存儲32bit數據,加法器支持兩個32bit數進行相加。
x86指令集的鼻祖是1978年出的16位處理器8086,現在Intel的處理器都是32位/64位的了,但是仍然能兼容傳統(tǒng)的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不同的是:目的操作數是第一個操作數。