MIPS ()
MIPS (. Microprocessor without Interlocked Pipeline Stages) , MIPS Computer Systems ( MIPS Technologies) RISC ( ). 32- , 64- . , MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V, MIPS32 MIPS64, MIPS32 ( 32- ) MIPS64 ( 64- ). MIPS32 MIPS64 , .
, , , MIPS-3D, SIMD , 3D , MDMX (MaDMaX) SIMD 64- , MIPS16e, , , , MIPS MT, .
MIPS . RISC-, Alpha.
MIPS , , Windows CE, , , , Sony PlayStation 2 Sony PlayStation Portable. 2006 SGI. 1980 1990 , Digital Equipment Corporation, NEC, Pyramid Technology, Siemens Nixdorf Tandem Computers. 1990 MIPS.
|
|
[]
[] RISC
1981 (John L. Hennessy) , MIPS. , . (, IBM 801), . , , (- ), / ( ) . . ( ) , , ; . , , / .
, , , , , , , , . , , , , . , , . MIPS , , , .
, , , , . , , , (, , ). .
MIPS Berkley- Berkley-RISC . , Berkley-RISC , , , . , . . , «» , , . MIPS.
MIPS , , RISC. , RISC . MIPS 32 6 , 26- , 5 , 1 3 + . , , 2 16- . . , ( RISC), , MOS Technology 6502, .
, RISC. , , , RISC , (, ).
[]
1984 , , , MIPS Computer Systems. 1985 MIPS R2000, 1988 R3000. 32- 1980 SG- . , , .
1991 MIPS 64- , R4000. R4000 TLB, , . , (Pentium, PowerPC, Alpha) - TLB .
, MIPS . SGI ( MIPS), 1992 SGI , . , MIPS Computer Systems MIPS Technologies.
[]
1990 MIPS . - , , CISC-, (2 : , , ). Sun Microsystems SPARC, . 1990 MIPS , 1997 48- MIPS RISC- 68k. MIPS , 1998 SGI MIPS Technologies. MIPS , .
1999 MIPS 32- MIPS32 ( MIPS II MIPS III, IV MIPS MIPS V) 64- MIPS64 ( MIPS V). MIPS64 NEC, Toshiba SiByte ( Broadcom) . , Philips, LSI Logic IDT. , MIPS ( , . .), , .
, MIPS- , . Quantum Effect Devices (. ). , MIPS R4300i SandCraft, NEC R5432, R71000 . DEC StrongARM , MIPS: SiByte, SB-1250 , MIPS (SOC) Alchemy Semiconductor ( AMD), Au-1000 SOC . Lexra , MIPS, DSP , . Lexra MIPS, , . , Lexra , MIPS. ( MIPS 4814976 (unaligned) ) , MIPS Technologies Lexra .
, , MIPS. Raza Microelectronics SandCraft, . Cavium Networks, , , 32- . , , , MIPS.
[]
, MIPS , SGI, MIPS Computer Systems, Inc., Whitechapel Workstations, Olivetti, Siemens-Nixdorf, Acer, Digital Equipment Corporation, NEC, DeskStation. , MIPS: IRIX SGI, Windows NT ( 4.0) Microsoft, Windows CE, Linux, BSD, UNIX System V, SINIX, QNX, RISC MIPS Computer Systems.
1990 , MIPS RISC IA32 Intel. Windows NT Alpha, MIPS PowerPC Microsoft, , , Clipper SPARC. , Intel Pentium, Microsoft Windows NT v4.0 , Alpha Intel. SGI Itanium IA32, MIPS .
[]
1990 , MIPS- : , , , , , , , xDSL , .
MIPS-, .
[]
, MIPS, IP- ( ) . , 32 64 , 4K 6K. , FPU, SIMD, / . .
MIPS, . Cisco, Linksys MikroTik, ADSL , -, , , , , Sony PlayStation 2 Sony PlayStation Portable. , PDA MIPS ARM-.
MIPS : IDT RC32438; ATI Xilleon; Alchemy Au1000, 1100, 1200; Broadcom Sentry5; RMI XLR7xx, Cavium Octeon CN30xx, CN31xx, CN36xx, CN38xx and CN5xxx; Infineon Technologies EasyPort, Amazon, Danube, ADM5120, WildPass, INCA-IP, INCA-IP2; Microchip Technology PIC32; NEC EMMA and EMMA2, NEC VR4181A, VR4121, VR4122, VR4181A, VR5432, VR5500; Oak Technologies Generation; PMC-Sierra RM11200; QuickLogic QuickMIPS ESP; Toshiba Donau, Toshiba TMPR492x, TX4925, TX9956, TX7901.
[] MIPS
MIPS . 1990 Silicon Graphics (SGI) . ( , Challenge, R4400, R8000 R10000) SGI . R10000 Origin 2000, 1024 , cc-NUMA (NUMAlink). Origin 2000 Origin 3000, 1024 , R14000 R16000 700 . , 2005 , SGI Intel IA-64, , MIPS .
2007 SiCortex , MIPS. MIPS64 (. Kautz graph). . Ÿ , MIPS64, , , 1 PCI Express . , 10 , 6 . SC5832, 972 ( 5832 MIPS64) 8,2 .
[] Loongson
: Loongson
Loongson, MIPS, , MIPS Technologies Linux. Loongson , MIPS Loongson. ( Loongson MIPS . )
MIPS iUnika, Bestlink, Lemote Golden Delicious Computers.
[] MIPS IV
MIPS IV , MIPS III MIPS. MIPSIV 1994 R8000. MIPS IV :
- +
- FMA FMS
- : 8 .
[] MIPS V
MIPS V , 21 1996 1996. , 3D-. 1990 MIPS SGI. MIPS V MDMX (MIPS Digital Media Extensions), , MIPS V.
MIPS V . 1997 SGI «H1» («Beast») «H2» («Capitan»), 1999 . , 1998 .
MIPS V PS (pair-single), (32-), 64- . SIMD, , , . , PS-. , SIMD- .
[] MIPS
MIPS R2000, 1985 . , . , ; , .
R2000 big-endian, little-endian, 32- . AMD 29000 Alpha R2000 , « ». , .
R2000 , , (MMU). R2010, , 32- , 64- . R3000, 1988 . - 64 (R2000 32 ). , R3000 - . , R3000 , R3000 . R2000, R3000 : R3010. R3000 MIPS, . R3000, 40 , R3000A, 32 VUPs (VAX Unit of Performance). R3000A, R3051, 33,8688 Sony PlayStation. , R3000A: Performance Semiconductor R3400, IDT R3500, R3010. , MIPS, R3900 Toshiba; , Windows CE. - R3000 R3010, , Mongoose-V.
R4000, 1991 , MIPS 64 . (MIPS Technology 64- ) R4000 1,3 , ( 8 ). 50 , 100 . R4400 R4000, 2,2 , ( 16 ), 150 . ( MIPS II) 64- , , , , . R4000 R4400 64- 64- .
MIPS, SGI MTI, R4200, ( ) R4300i. , NEC VR4300, Nintendo 64.
Quantum Effect Devices (QED), , MIPS, R4600 Orion, R4700 Orion, R4650 R5000. R4000 , -, QED - ( 2 ), . R4600 R4700 SGI Indy, Cisco ( MIPS), , 360 700. R4650 WebTV ( Microsoft TV). R5000 FPU ( ) , R4000, , , SGI Indys, R5000 , R4400 . R5000 , SGI . QED RM7000 RM9000 . 2000 QED PMC-Sierra, MIPS-. RM7000 256 - 2 - 3 . RM9xx0 SOC-, ( ) : , PCI-, Ethernet, - (, HyperTransport).
R8000 ( 1994 ) MIPS, 2 ( ) 2 . 6 : (16 16 ), , - ( - + ), - ASIC. - ( ), 4 . 1990 R8000 SGI POWER Challenge, POWER Indigo2. FPU , , R8000 , .
1995 R10000. , , R8000, (32 ) - . , , . FPU, , R10000 .
R10000. R12000 0.25 . R14000 DDR SRAM -. R16000 R16000A, ; - , , .
MIPS R6000, -, Bipolar Integrated Technology. R6000 MIPS II. TLB - . R6000 , , Control Data, .
| () | (µm) | (.) | (²) | () | () | (K) | (K) | 2 | 3 | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| R2000 | 816.67 | 1985 | 2.0 | 0.11 | ? | ? | ? | ? | 32 | 64 | ||
| R3000 | 1240 | 1988 | 1.2 | 0.11 | 66.12 | 145 | 4 | ? | 64 | 64 | 0-256 K | |
| R4000 | 100 | 1991 | 0.8 | 1.35 | 213 | 179 | 15 | 5 | 8 | 8 | 1 M | |
| R4400 | 100250 | 1992 | 0.6 | 2.3 | 186 | 179 | 15 | 5 | 16 | 16 | 1-4 M | |
| R4600 | 100133 | 1994 | 0.64 | 2.2 | 77 | 179 | 4.6 | 5 | 16 | 16 | 512 K | |
| R4700 | 133 | 1996 | ? | ? | ? | 179 | ? | ? | 16 | 16 | ||
| R5000 | 150200 | 1996 | 0.35 | 3.7 | 84 | 223 | 10 | 3.3 | 32 | 32 | 1 M | |
| R8000 | 7590 | 1994 | 0.7 | 2.6 | 299 | 591+591 | 30 | 3.3 | 16 | 16 | 4 M | |
| R10000 | 150250 | 1996 | 0.35, 0.25 | 6.7 | 299 | 599 | 30 | 3.3 | 32 | 32 | 512 K16 M | |
| R12000 | 270400 | 1998 | 0.25, 0.18 | 6.9 | 204 | 600 | 20 | 4 | 32 | 32 | 512 K16 M | |
| RM7000 | 250600 | 1998 | 0.25, 0.18, 0.13 | 18 | 91 | 304 | 10, 6, 3 | 3.3, 2.5, 1.5 | 16 | 16 | 256 K | 1 M |
| R14000 | 500600 | 2001 | 0.13 | 7.2 | 204 | 527 | 17 | ? | 32 | 32 | 512 K16 M | |
| R16000 | 7001000 | 2002 | 0.11 | ? | ? | ? | 20 | ? | 64 | 64 | 512 K16 M | |
| R24K | 750+ | 2003 | 65 nm | ? | 0.83 | ? | ? | ? | 64 | 64 | 4-16 M |
[] MIPS I
: R, I J. 6- . , R- , , ; I- ; J- 26- .
:
| 31- ( ) 0- | ||||||
|---|---|---|---|---|---|---|
| R | (6) | rs (5) | rt (5) | rd (5) | shamt (5) | (6) |
| I | (6) | rs (5) | rt (5) | immediate (16) | ||
| J | (6) | (26) | ||||
[] MIPS
, , .
- , d, t, s .
- C .
- .
- .
- MIPS32 , , , . ( ), , , . , , .
[]
MIPS 32 . . $0 0, $1 ( ). . (-) .
| // | / | ||||||
|---|---|---|---|---|---|---|---|
| Add | add $d,$s,$t | $d = $s + $t | R | 0 | 2016 | , 000000ss sssttttt ddddd--- --100000 |
|
| Add unsigned | addu $d,$s,$t | $d = $s + $t | R | 0 | 2116 | , 000000ss sssttttt ddddd--- --100001 |
|
| Subtract | sub $d,$s,$t | $d = $s $t | R | 0 | 2216 | , 000000ss sssttttt ddddd--- --100010 |
|
| Subtract unsigned | subu $d,$s,$t | $d = $s $t | R | 0 | 2316 | , 000000ss sssttttt ddddd000 00100011 |
|
| Add immediate | addi $t,$s,C | $t = $s + C () | I | 816 | - | ( : addi $1, $2, 0), 001000ss sssttttt CCCCCCCC CCCCCCCC |
|
| Add immediate unsigned | addiu $t,$s,C | $t = $s + C () | I | 916 | - | , , 001001ss sssttttt CCCCCCCC CCCCCCCC |
|
| Multiply | mult $s,$t | LO = (($s * $t) << 32) >> 32; HI = ($s * $t) >> 32; |
R | 0 | 1816 | 64- LO and HI. , : (int HI,int LO) = (64-bit) $s * $t . . mfhi mflo LO HI . | |
| Divide | div $s, $t | LO = $s / $t HI = $s % $t | R | 0 | 1A16 | 32- LO, HI.[1] | |
| Divide unsigned | divu $s, $t | LO = $s / $t HI = $s % $t | R | 0 | 1B16 | 32- LO, HI. | |
| Load double word | ld $t,C($s) | $t = Memory[$s + C] | I | 2316 | - | double word : MEM[$s+C] 7 $t . | |
| Load word | lw $t,C($s) | $t = Memory[$s + C] | I | 2316 | - | word : MEM[$s+C] 3 . | |
| Load halfword | lh $t,C($s) | $t = Memory[$s + C] () | I | 2116 | - | halfword : MEM[$s+C] . . | |
| Load halfword unsigned | lhu $t,C($s) | $t = Memory[$s + C] () | I | 2516 | - | , . | |
| Load byte | lb $t,C($s) | $t = Memory[$s + C] (signed) | I | 2016 | - | byte : MEM[$s+C]. | |
| Load byte unsigned | lbu $t,C($s) | $t = Memory[$s + C] (unsigned) | I | 2416 | - | , . | |
| Store double word | sd $t,C($s) | Memory[$s + C] = $t | I | - | word $t : MEM[$s+C] 7 . . | ||
| Store word | sw $t,C($s) | Memory[$s + C] = $t | I | 2B16 | - | word : MEM[$s+C] 3 . . | |
| Store half | sh $t,C($s) | Memory[$s + C] = $t | I | 2916 | - | (halfword) : MEM[$s+C] . | |
| Store byte | sb $t,C($s) | Memory[$s + C] = $t | I | 2816 | - | (byte) : MEM[$s+C]. | |
| Load upper immediate | lui $t,C | $t = C << 16 | I | F16 | - | 16- 16 . 2161 | |
| Move from high | mfhi $d | $d = HI | R | 0 | 1016 | HI . mfhi ( - MIPS). | |
| Move from low | mflo $d | $d = LO | R | 0 | 1216 | LO . mflo ( - MIPS). | |
| Move from Control Register | mfcZ $t, $s | $t = Coprocessor[Z].ControlRegister[$s] | R | 0 | 4- Z- . . | ||
| Move to Control Register | mtcZ $t, $s | Coprocessor[Z].ControlRegister[$s] = $t | R | 0 | 4- Z-. . | ||
| And | and $d,$s,$t | $d = $s & $t | R | 0 | 2416 | Bitwise000000ss sssttttt ddddd--- --100100 |
|
| And immediate | andi $t,$s,C | $t = $s & C | I | C16 | - |
001100ss sssttttt CCCCCCCC CCCCCCCC |
|
| Or | or $d,$s,$t | $d = $s | $t | R | 0 | 2516 | Bitwise | |
| Or immediate | ori $t,$s,C | $t = $s | C | I | D16 | - | ||
| Exclusive or | xor $d,$s,$t | $d = $s ^ $t | R | 0 | 2616 | ||
| Nor | nor $d,$s,$t | $d = ~ ($s | $t) | R | 0 | 2716 | Bitwise nor | |
| Set on less than | slt $d,$s,$t | $d = ($s < $t) | R | 0 | 2A16 | , . | |
| Set on less than immediate | slti $t,$s,C | $t = ($s < C) | I | A16 | - | , . | |
| Bitwise | Shift left logical | sll $t,$s,C | $t = $s << C | R | 0 | 0 | ( ) |
| Shift right logical | srl $t,$s,C | $t = $s >> C | R | 0 | 216 | ( ). , . |
|
| Shift right arithmetic | sra $t,$s,C | ![]() |
R | 0 | 316 | ( ) | |
| Branch on equal | beq $s,$t,C | if ($s == $t) go to PC+4+4 °C | I | 416 | - | , .000100ss sssttttt CCCCCCCC CCCCCCCC |
|
| Branch on not equal | bne $s,$t,C | if ($s != $t) go to PC+4+4 °C | I | 516 | - | , . | |
| Jump | j C | PC = PC+4[31:28] . C*4 | J | 216 | - | . | |
| Jump register | jr $s | goto address $s | R | 0 | 816 | , . | |
| Jump and link | jal C | $31 = PC + 8; PC = PC+4[31:28] . C*4 | J | 316 | - | , $31 ; jr $31. | |
: MIPS, .
: « » (load lower immediate); addi (add immediate) ori (or immediate) c $0. , addi $1, $0, 100 ori $1, $0, 100 $1 100.
[]
MIPS 32 . 2 . , .
| // | / | ||||||
|---|---|---|---|---|---|---|---|
| FP add single | add.s $x,$y,$z | $x = $y + $z | ( ) | ||||
| FP subtract single | sub.s $x,$y,$z | $x = $y $z | ( ) | ||||
| FP multiply single | mul.s $x,$y,$z | $x = $y * $z | ( ) | ||||
| FP divide single | div.s $x,$y,$z | $x = $y / $z | ( ) | ||||
| FP add double | add.d $x,$y,$z | $x = $y + $z | ( ) | ||||
| FP subtract double | sub.d $x,$y,$z | $x = $y $z | ( ) | ||||
| FP multiply double | mul.d $x,$y,$z | $x = $y * $z | ( ) | ||||
| FP divide double | div.d $x,$y,$z | $x = $y / $z | ( ) | ||||
| Load word coprocessor | lwcZ $x,CONST ($y) | Coprocessor[Z].DataRegister[$x] = Memory[$y + CONST] | I | 4 word : MEM[$2+CONST] . . | |||
| Store word coprocessor | swcZ $x,CONST ($y) | Memory[$y + CONST] = Coprocessor[Z].DataRegister[$x] | I | 4 MEM[$2+CONST]. . | |||
| FP compare single (eq, ne, lt, le, gt, ge) | c.lt.s $f2,$f4 | if ($f2 < $f4) cond=1; else cond=0 | . . | ||||
| FP compare double (eq, ne, lt, le, gt, ge) | c.lt.d $f2,$f4 | if ($f2 < $f4) cond=1; else cond=0 | . . | ||||
| branch on FP true | bc1t 100 | if (cond == 1) go to PC+4+100 | FP, . | ||||
| branch on FP false | bc1f 100 | if (cond == 0) go to PC+4+100 | FP, . | ||||
[]
MIPS, . .
| Load Address | la $1, LabelAddr | lui $1, LabelAddr[31:16]; ori $1,$1, LabelAddr[15:0] | $1 = |
| Load Immediate | li $1, IMMED[31:0] | lui $1, IMMED[31:16]; ori $1,$1, IMMED[15:0] | $1 = 32- |
| Branch if greater than | bgt $rs,$rt,Label | slt $at,$rt,$rs; bne $at,$zero,Label | if(R[rs]>R[rt]) PC=Label |
| Branch if less than | blt $rs,$rt,Label | slt $at,$rs,$rt; bne $at,$zero,Label | if(R[rs]<R[rt]) PC=Label |
| Branch if greater than or equal | bge | etc. | if(R[rs]>=R[rt]) PC=Label |
| Branch if less than or equal | ble | if(R[rs]<=R[rt]) PC=Label | |
| Branch if greater than unsigned | bgtu | if(R[rs]=>R[rt]) PC=Label | |
| Branch if greater than zero | bgtz | if(R[rs]>0) PC=Label | |
| Multiplies and returns only first 32 bits | mul $1, $2, $3 | mult $2, $3; mflo $1 | $1 = $2 * $3 |
[]
- NOP ( ) ( 0x00000000, sll $0, $0, 0)
- Break ( , )
- ( )
[]
:
- $0 0.
- $31 - .
- HI LO /, mfhi (move from high) mflo (move from low).
, .
MIPS , . , .
| ? | |||
|---|---|---|---|
| $zero | $0 | 0 | N/A |
| $at | $1 | ||
| $v0$v1 | $2-$3 | ||
| $a0$a3 | $4-$7 | ||
| $t0$t7 | $8-$15 | ||
| $s0$s7 | $16-$23 | ||
| $t8$t9 | $24-$25 | ||
| $k0$k1 | $26-$27 | ||
| $gp | $28 | ||
| $sp | $29 | ||
| $fp | $30 | ||
| $ra | $31 | N/A |
( ) (). , $s- , ; $sp $fp- , . $ra, . $t- ( , ).
[]
Open Virtual Platforms OVP-sim, , , API, . , , MIPS 4K, 24K 34K. Imperas, MIPS Tchnologies MIPS-Verified. , MIPS , Linux. - , , . OVPsim Imperas ( ), .
MIPS32 ( R2000/R3000), SPIM . EduMIPS64 MIPS64, Java/Swing. MIPS64 ISA , , . .
GUI- MIPS MARS, , Computer Organization and Design.
Gxemul ( mips64emul), QEMU. MIPS III MIPS IV ( , ).
MIPS, , Virtutech Simics (MIPS 4Kc 5Kc, PMC RM9000, QED RM7000), VaST Systems (R3000, R4000), CoWare (MIPS4KE, MIPS24K, MIPS25Kf MIPS34K).
[] MIPS
- Alchemy Au1000, 1100, 1200
- Atheros AR23xx, AR52xx, AR71xx, AR72xx
- ATI Xilleon
- Broadcom Sentry5
- IDT RC32438
- Infineon Technologies EasyPort, Amazon, Danube, ADM5120, WildPass, INCA-IP, INCA-IP2
- Ingenic JZ47xx
- Lemote Loongson I, Loongson II, Loongson III[2]
- Microchip Technology PIC32
- NEC EMMA and EMMA2, NEC VR4181A, VR4121, VR4122, VR4181A, VR5432, VR5500
- Oak Technologies Generation
- PMC-Sierra RM11200
- Realtek RTD1055, RTD1185, RTD1186[3]
- Sigma Designs SMP8640, SMP8650, SMP8910[4]
- QuickLogic QuickMIPS ESP
- RMI XLR7xx, Cavium Octeon CN30xx, CN31xx, CN36xx, CN38xx CN5xxx
- Toshiba Donau, Toshiba TMPR492x, TX4925, TX9956, TX7901.
[]
[]
- David A. Patterson Computer Organization and Design: The Hardware/Software Interface. Morgan Kaufmann Publishers. ISBN 1-55860-604-1
- Dominic Sweetman See MIPS Run, 2nd edition. Morgan Kaufmann Publishers. ISBN 0-12088-421-6
- Dominic Sweetman See MIPS Run. Morgan Kaufmann Publishers. ISBN 1-55860-410-3
- Erin Farquhar MIPS Programmer's Handbook. Morgan Kaufmann Publishers. ISBN 1-55860-297-6
[]
- Full overview of MIPS architecture
- Patterson & Hennessy Appendix A
- Summary of MIPS assembly language
- MIPS Instruction reference
- MARS (MIPS Assembler and Runtime Simulator)
- MIPS processor images and descriptions at cpu-collection.de
- A programmed introduction to MIPS assembly
- Mips bitshift operators
- MIPS software users manual
| . , . . |
| RISC- | |
|---|---|
)
). , .