MIPS是高效精簡指令集計算機(jī)(RISC)體系結(jié)構(gòu)中最優(yōu)雅的一種;即使連MIPS的競爭對手也這樣認(rèn)為,這可以從MIPS對于后來研制的新型體系結(jié)構(gòu)比如DEC的Alpha和HP的Precision產(chǎn)生的強(qiáng)烈影響看出來。雖然自身的優(yōu)雅設(shè)計并不能保證在充滿競爭的市場上長盛不衰,但是MIPS微處理器卻經(jīng)常能在處理器的每個技術(shù)發(fā)展階段保持速度最快的同時保持設(shè)計的簡潔。
? ? ? MIPS與MIPS指令集
指令集是存儲在CPU內(nèi)部,對CPU運(yùn)算進(jìn)行指導(dǎo)和優(yōu)化的硬程序。擁有這些指令集,CPU就可以更高效地運(yùn)行。MIPS指令集屬于精簡指令集,MIPS的所有指令都是32位,指令格式簡單,而X86的指令長度不是固定的。簡單的指令和格式易于譯碼和流水線操作,但是代碼密度不高,導(dǎo)致二進(jìn)制文件大。
低端的CPU物理面積只有1.5平方毫米(在SOC系統(tǒng)里面肉眼很難找到)。而高端的R10000處理器,第一次投放市場時可能是世界上最快的CPU,它的物理面積幾乎有1平方英寸,發(fā)熱近30瓦特。雖然MIPS看起來沒什么優(yōu)勢,但是足夠的銷售量使其能健康發(fā)展:1997年面市的44M的MIPS CPU,絕大多數(shù)使用于嵌入式應(yīng)用領(lǐng)域。
MIPS(Million Instructions Per Second):單字長定點指令平均執(zhí)行速度 Million Instructions Per Second的縮寫,每秒處理的百萬級的機(jī)器語言指令數(shù)。這是衡量CPU速度的一個指標(biāo)。像是一個Intel80386 電腦可以每秒處理3百萬到5百萬機(jī)器語言指令,即我們可以說80386是3到5MIPS的CPU。MIPS只是衡量CPU性能的指標(biāo)。
MIPS是世界上很流行的一種RISC處理器。MIPS的意思“無內(nèi)部互鎖流水級的微處理器”(Microprocessor without interlocked piped stages),其機(jī)制是盡量利用軟件辦法避免流水線中的數(shù)據(jù)相關(guān)問題。它最早是在80年代初期由斯坦福(Stanford)大學(xué)Hennessy教授領(lǐng)導(dǎo)的研究小組研制出來的。MIPS公司的R系列就是在此基礎(chǔ)上開發(fā)的RISC工業(yè)產(chǎn)品的微處理器。這些系列產(chǎn)品為很多計算機(jī)公司采用構(gòu)成各種工作站和計算機(jī)系統(tǒng)。
MIPS技術(shù)公司是美國著名的芯片設(shè)計公司,它采用精簡指令系統(tǒng)計算結(jié)構(gòu)(RISC)來設(shè)計芯片。和英特爾采用的復(fù)雜指令系統(tǒng)計算結(jié)構(gòu)(CISC)相比,RISC具有設(shè)計更簡單、設(shè)計周期更短等優(yōu)點,并可以應(yīng)用更多先進(jìn)的技術(shù),開發(fā)更快的下一代處理器。MIPS是出現(xiàn)最早的商業(yè)RISC架構(gòu)芯片之一,新的架構(gòu)集成了所有原來MIPS指令集,并增加了許多更強(qiáng)大的功能。
MIPS的指令格式只有3種:
1、R(register)類型的指令。該類型指令從寄存器堆(register file)中讀取兩個源操作數(shù),計算結(jié)果寫回寄存器堆。
2、I(immediate)類型的指令。該類型指令使用一個16位的立即數(shù)作為一個源操作數(shù)。
3、J(jump)類型的指令。該類型指令使用一個26位的立即數(shù)作為跳轉(zhuǎn)的目標(biāo)地址(target address)。
MIPS的指令種類有:
1、算術(shù)運(yùn)算。
2、邏輯運(yùn)算。
3、數(shù)據(jù)傳送。
4、條件轉(zhuǎn)移。
5、無條件跳轉(zhuǎn)。
6、特殊指令。
7、例外指令。
8、協(xié)處理器指令。
9、系統(tǒng)控制協(xié)處理器指令。
MIPS處理器是八十年代中期RISC CPU設(shè)計的一大熱點。MIPS是賣的最好的RISC CPU,可以從任何地方,如Sony,Nintendo的游戲機(jī),Cisco的路由器和SGI超級計算機(jī),看見MIPS產(chǎn)品在銷售。目前隨著RISC體系結(jié)構(gòu)遭到x86芯片的競爭,MIPS有可能是起初RISC CPU設(shè)計中唯一的一個在本世紀(jì)盈利的。和英特爾相比,MIPS的授權(quán)費(fèi)用比較低,也就為除英特爾外的大多數(shù)芯片廠商所采用。
MIPS的系統(tǒng)結(jié)構(gòu)及設(shè)計理念比較先進(jìn),其指令系統(tǒng)經(jīng)過通用處理器指令體系MIPS I、MIPS II、MIPS III、MIPS IV到MIPS V,嵌入式指令體系MIPS16、MIPS32到MIPS64的發(fā)展已經(jīng)十分成熟。在設(shè)計理念上MIPS強(qiáng)調(diào)軟硬件協(xié)同提高性能,同時簡化硬件設(shè)計。
中國龍芯2和前代產(chǎn)品采用的都是64位MIPS指令架構(gòu),它與大家平常所知道的X86指令架構(gòu)互不兼容,MIPS指令架構(gòu)由MIPS公司所創(chuàng),屬于RISC體系。過去,MIPS架構(gòu)的產(chǎn)品多見于工作站領(lǐng)域,索尼PS2游戲機(jī)所用的“Emotion Engine”也采用MIPS指令,這些MIPS處理器的性能都非常強(qiáng)勁,而龍芯2也屬于這個陣營,在軟件方面與上述產(chǎn)品完全兼容。
MIPS常用指令集
lb/lh/lw: 從存儲器中讀取一個byte/half word/word的數(shù)據(jù)到寄存器中。如lb $1, 0($2)
sb/sh/sw: 把一個byte/half word/word的數(shù)據(jù)從寄存器存儲到存儲器中。如 sb $1, 0($2)
add/addu:把兩個定點寄存器的內(nèi)容相加add $1,$2,$3($1=$2+$3);u為不帶符號加。
addi/addiu:把一個寄存器的內(nèi)容加上一個立即數(shù)add $1,$2,#3($1=$2+3);u為不帶符號加。
sub/subu:把兩個定點寄存器的內(nèi)容相減。
div/divu:兩個定點寄存器的內(nèi)容相除。
mul/mulu:兩個定點寄存器的內(nèi)容相乘。
and/andi:與運(yùn)算,兩個寄存器中的內(nèi)容相與and $1,$2,$3($1=$2 & $3);i為立即數(shù)。
or/ori:或運(yùn)算。
xor/xori:異或運(yùn)算。
beq/beqz/benz/bne:條件轉(zhuǎn)移eq相等,z零,ne不等。
j/jr/jal/jalr:j直接跳轉(zhuǎn);jr使用寄存器跳轉(zhuǎn);
lui:把一個16位的立即數(shù)填入到寄存器的高16位,低16位補(bǔ)零。
sll/srl:邏輯左移/右移sll $1,$2,#2。
slt/slti/sltui:如果$2的值小于$3,那么設(shè)置$1的值為1,否則設(shè)置$1的值為0。slt $1,$2,$3。
mov/movz/movn:復(fù)制,n為負(fù),z為零。mov $1,$2; movz $1,$2,$3($3為零則復(fù)制$2到$1)。
trap:根據(jù)地址向量轉(zhuǎn)入管態(tài)。
eret:從異常中返回到用戶態(tài)。
32個通用寄存器
0($zero): 永遠(yuǎn)返回值為0
1($at): 用做匯編器的暫時變量
2-3($v0-$v1): 子函數(shù)調(diào)用返回結(jié)果
4-7($a0-$a3): 子函數(shù)調(diào)用的參數(shù)
8-15($t0-$t7): 暫時變量,子函數(shù)使用時不需要保存與恢復(fù)
16-23($s0-$s7): 子函數(shù)寄存器變量。子函數(shù)必須保存和恢復(fù)使用過的變量在函數(shù)返回之前,從而調(diào)用函數(shù)知道這些寄存器的值沒有變化。
24-25($t8-$t9): 暫時變量,子函數(shù)使用時不需要保存與恢復(fù)
26-27($k0-$k1): 通常被中斷或異常處理程序使用作為保存一些系統(tǒng)參數(shù)
28($gp): 全局指針。一些運(yùn)行系統(tǒng)維護(hù)這個指針來更方便的存取“static“和”extern”變量。
29($sp): 堆棧指針
30($s8/$fp): 第9個寄存器變量。子函數(shù)可以用來做楨指針
31($ra): 子函數(shù)的返回地
cp0:協(xié)處理器0,MIPS對CPU的控制用cp0完成
評論
查看更多