Skip to content

arch_mips_notes_ru

Serge Vakulenko edited this page Aug 26, 2015 · 1 revision

Особенности архитектуры MIPS

Особенности ассемблера GNU as для MIPS: http://sourceware.org/binutils/docs/as/MIPS_002dDependent.html

Распределение регистров MIPS: | Регистр | Номер | Применение | |:------------|:----------|:---------------| | $zero | 0 | Константа 0 | | $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 | Адрес возврата |

При вызове функции первые четыре параметра передаются в регистрах $a0...$a3. Остальные помещаются в стек в обратном порядке, последний параметр имеет больший адрес. Функция возвращает значение в регистре $v0 или регистрах $v0...$v1 (в случае long long или double).

Параметры оператора asm: | Символ | Режим MIPS | |:-----------|:-----------------------------------| | r | Целочисленный регистр | | f | Регистр с плавающей точкой | | i | Константа целого типа | | I | Знаковая 16-битная константа | | K | Беззнаковая 16-битная константа | | L | Знаковая 32-битная константа, в которой младшие 16 бит равны 0 (для lui) | | N | Константа в диапазоне -65535...-1 | | O | Знаковая 15-битная константа | | P | Константа в диапазоне 1...65535 |

Подробнее здесь: http://gcc.gnu.org/onlinedocs/gcc/Constraints.html

При прерывании, состояние регистров сохраняется в стеке текущей задачи. Всего 36 слов или 144 байта: | Стек | |:---------| | --- | | --- | <--- Значение $sp до прерывания | | EPC | | STATUS | | HI | | LO | | $ra | | $fp | | $gp | | $25 | | $24 | | ... | | $1 | | arg4 | Стандартный фрейм MIPS API... | | arg3 | ...место для аргументов... | | arg2 | ...передаваемых в регистрах | | arg1 | <--- Новое значение $sp | | --- |

Преобразование виртуального адреса в физический

В процессорах "Элвис" имеется режим FM (fixed mapping), когда виртуальный адрес отображается в физический по фиксированному алгоритму.

Виртуальный адрес Физический адрес Сегмент
0xxx xxxx 4xxx xxxx kuseg
1xxx xxxx 5xxx xxxx kuseg
2xxx xxxx 6xxx xxxx kuseg
3xxx xxxx 7xxx xxxx kuseg
4xxx xxxx 8xxx xxxx kuseg
5xxx xxxx 9xxx xxxx kuseg
6xxx xxxx Axxx xxxx kuseg
7xxx xxxx Bxxx xxxx kuseg
8xxx xxxx 0xxx xxxx kseg0
9xxx xxxx 1xxx xxxx kseg0
Axxx xxxx 0xxx xxxx kseg1
Bxxx xxxx 1xxx xxxx kseg1
Cxxx xxxx Cxxx xxxx kseg2
Dxxx xxxx Dxxx xxxx kseg2
Exxx xxxx Exxx xxxx kseg3
Fxxx xxxx Fxxx xxxx kseg3

Время входа в прерывание

Показана латентность прерываний, измеренная тестом test_latency.c на платах MC-24R_EM и NVCom_EM, без использования FPU.

Процессор, частота Без кэша команд С кэшом команд
MC-24RT3, 60 МГц 15.68 - 15.81 мксек 3.08 - 3.18 мксек
NVCom-01, 60 МГц 14.85 - 15.26 мксек 3.00 - 3.01 мксек
NVCom-01, 290 МГц 9.58 - 9.88 мксек 0.82 - 0.83 мксек

Время переключения задач

Показано время переключения задач, измеренное тестом test_tswitch.c на платах MC-24R_EM и NVCom_EM, без использования FPU.

Процессор, частота Без кэша команд С кэшом команд
MC-24RT3, 60 МГц 31.66 мксек 6.36 - 6.55 мксек
NVCom-01, 60 МГц 33.08 - 33.35 мксек 6.31 мксек
NVCom-01, 290 МГц 21.49 - 21.60 мксек 1.34 мксек
You can’t perform that action at this time.