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