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