MIPS — архитектура и система команд
MIPS (англ. Microprocessor without Interlocked Pipeline Stages) — микропроцессор, разработанный компанией MIPS Computer Systems в соответствии с концепцией проектирования процессоров RISC.
- Схема 
  - Цикл работы процессора 
- Загрузка инструкции (IF = Instruction Fetch)
 - Декодирование инструкции, выделение команды и операндов, чтение регистров (ID = Instruction Decode)
 - Фактическое выполнение инструкции (Ex = Execute)
 - Сохранение регистра в память, Загрузка регистра из памяти (MEM = Memory access)
 - Запись результата регистр (WB = Writeback)
 
- Инструкция уровня языка ассемблера может быть разбита на отдельные микрокоманды. Программа интерпретирующая машинные инструкции называется микропрограммой. Микропрограмма позволяет на одном и том же наборе аппаратуры реализовать разные архитектуры.
 
 - MIPS 
- 4GB оперативной памяти.
 - Инструкции одинаковой длины 32 бита.
 - 32 регистра общего назначения размером 32 бита.
 - Регистр $0 всегда возвращает 0.
 - Регистры PC, Hi, Lo.
 
 - Типы и форматы инструкций. 
- Инструкции делятся на три типа: R, I и J. Каждая инструкция начинается с 6-битного кода. В дополнение к коду, инструкции R-типа определяют три регистра, область размера сдвига регистра, и область функции; инструкции I-типа определяют два регистра инепосредственное значение; инструкции J-типа состоят из кода операции и 26-битного адреса перехода.
 
Тип
−31− формат (в битах) −0−
R
код (6)
rs (5)
rt (5)
rd (5)
сдвиг (5)
функция (6)
I
код (6)
rs (5)
rt (5)
непосредственное значение (16)
J
код (6)
адрес (26)
 Инструкции типов I и R.
- Схема исполнения:
 
 - Арифметические: 
- add, addu, sub, subu, mult, multu, div, divu
 - addi, addiu
 
 - Логические: 
- and, or, xor, nor, slt
 - andi, ori, xori, slti
 
 - Сдвига: 
- sll, srl, sra
 
 - Передачи данных: 
- mfhi, mflo
 
 
- Пример программы:
 
   1 ## Program to assemble the instruction ori  $8,$9,0x004A
   2 ##
   3 
   4         or    $25,$0,$0        # clear $25
   5         ori   $11,$0,0xD       # opcode
   6         ori   $12,$0,0x9       # operand $s
   7         ori   $13,$0,0x8       # dest. $d
   8         ori   $14,$0,0x004A    # immediate operand
   9         
  10         sll   $11,$11,26       # shift opcode into position
  11         or    $25,$25,$11      # or it into the instruction
  12         
  13         sll   $12,$12,21       # shift operand $s into position
  14         or    $25,$25,$12      # or it into the instruction
  15         
  16         sll   $13,$13,16       # shift dest $d into position
  17         or    $25,$25,$13      # or it into the instruction
  18         
  19         or    $25,$25,$14      # or const into the instruction
  20         
  21         ori   $8,$9,0x004A     # The actual assembler
  22                                # should create the same machine
  23                                # instruction as we now have in $25
  24 
  25 ## end of file
   1 ## handMadeNeg.asm
   2 ## 
   3 ## Program to demonstrate two's complement negative
   4 ##
   5 ## The program adds +146 to -82, leaving the result in $10
   6 
   7         ori      $7, $0, 146        # put +146 into $7
   8         ori      $8, $0,  82        # put 82 into $8
   9         nor      $8, $8,  $0        # reflect
  10         ori      $9, $0,   1        # 
  11         addu     $8, $8,  $9        # add 1: $8 = -82
  12         addu    $10, $7,  $8        # (+146) + (-82)
  13 
  14 ## End of file
   1 ## Mult.asm
   2 ## 
   3 ## Program to calculate 5 * x - 74
   4 ##
   5 ## Register Use:
   6 ##  $8   x
   7 ##  $9   result
   8 ##
   9 ##  $10  5
  10 ##  $9,$10 result
  11 
  12         ori      $8, $0, 12        # put x into $8
  13         sll      $9, $8,  2        # $9 = 4x
  14         addu     $9, $9, $8        # $9 = 5x
  15         addiu    $9, $9,-74        # $9 = 5x - 74
  16 
  17         ori      $10, $0, 5        # $10 = 5
  18         multu     $8, $10
  19         mfhi     $9
  20         mflo     $10
  21         addiu    $10, $10, -74
  22         nop
  23 ## End of file
