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