MIPS, в частности, менее важен, чем понимание asm в целом, поэтому у вас есть представление о том, что происходит, когда вы компилируете источник высокого уровня. Понимание небольшого количества asm может помочь вам понять симптомы ошибок в высокоуровневом коде. (например, перезаписать неверные данные с помощью фиктивного указателя или изменить другие локальные значения в стеке при записи вне массива).
Очевидно, что понимание того, как заставить C или C ++ работать быстро, намного легче, когда вы знаете, что на самом деле работает - это asm, генерируемый компилятором. Невозможно разработать хорошие микробенчмарки для проверки чего-либо, если вы еще не знаете, что происходит.
Как только вы изучите сборку MIPS, освоить любой другой будет довольно легко. Все остальные основные процессоры также являются зарегистрированными машинами, которые работают в основном так же:
- Есть регистры и память
- Все, включая указатели, - это просто биты и байты в памяти или регистрах, то есть целые числа.
- Каждая инструкция является независимой и обновляет архитектурное состояние (значения регистра) в соответствии со своими простыми правилами. Он заботится только о своих входах (обычно регистры, иногда также память). Там нет магии.
- Выполнение продолжается от одной инструкции к следующей при увеличении адреса в памяти программ, за исключением команд перехода / перехода.
- Написание программ / функций - это вопрос построения последовательности шагов, которые машина должна выполнить , что приведет к перемещению и обработке данных так, как вы хотите. Это похоже на разработку шагов в алгоритме
- ASM - это то место, где отладчик действительно сияет: он может показать вам полное архитектурное состояние машины (поскольку существует конечное число регистров) и показать, какие значения регистров изменились, когда вы выполняете пошаговую инструкцию на одну инструкцию.
У каждой архитектуры есть свои дополнительные складки, но эти основы не меняются и являются тем, что вы действительно изучаете, изучая свой первый язык ассемблера. Одним из основных недостатков MIPS является слот задержки ветвления (который симуляторы MARS и SPIM по умолчанию скрывают / отключают)
MIPS - довольно хороший язык ассемблера для изучения. Это просто и ортогонально, и приятно ведет к обсуждению конвейерных процессоров, потому что это то, для чего оно было разработано. (Нет микрокодированных инструкций и очень обычный формат машинного кода, который легко декодировать.)
Кроме того, есть хорошие симуляторы MIPS, MARS и SPIM, в которых есть редактор / ассемблер / симулятор + отладчик - все в одном. И некоторые «системные вызовы», которые делают высокоуровневые вещи, такие как чтение целого числа с клавиатуры пользователя в регистр. Нормальные ОС имеют системные вызовы, которые просто позволяют вам читать / писать символы, и вы должны вызывать библиотечные функции или писать свои собственные целочисленные-> строковые функции. Это благословение и проклятие: если вы не понимаете, что системные вызовы MARS - это в основном библиотечные функции со специальным соглашением о вызовах, вы можете не осознавать, что можете написать свой собственный код, который выполняет некоторые из этих вещей, или это не так. "нормально", чтобы системные вызовы работали таким образом.
Вы можете изучить все это на x86, особенно, если вы хотите провести эксперименты с производительностью на своем настольном компьютере / ноутбуке.