MIPS - это важно?

Мой вопрос: полезно ли знать язык программирования MIPS?

Я студент CS и беру уроки сборки, посвященные MIPS. Мне очень удобно писать на языках высокого уровня, но Mips меня немного смущает.

Является ли MIPS чем-то, на чем я действительно должен сосредоточиться и попытаться полностью понять это? Поможет ли это мне в будущем?


person user17083    schedule 19.09.2008    source источник
comment
В частности, MIPS менее важен, чем понимание asm в целом. MIPS — довольно приятный язык ассемблера для изучения. Это просто и ортогонально, и прекрасно ведет к обсуждению конвейерных процессоров.   -  person Peter Cordes    schedule 12.04.2018


Ответы (12)


В какой-то момент (в 90-е годы) процессоры на основе MIPS были самыми продаваемыми процессорами в мире, затмевая продажи процессоров Intel x86. Это произошло из-за их огромного присутствия на рынке встраиваемых систем. Я думаю, что теперь процессоры на базе ARM, возможно, взяли на себя этот титул, но все еще существует множество встроенных систем, использующих MIPS.

Даже если вы никогда в своей карьере не программировали микросхему MIPS на ассемблере, изучение ассемблера может оказаться полезным. Это может помочь вам написать более эффективный высокоуровневый код, если вы имеете некоторое представление о том, что компилятор собирается выдать. Другие области, где он все еще используется, включают компиляторы (написание собственных), драйверы устройств и мультимедийное программирование (где код, требующий MMX или SSE, обычно все еще пишется вручную на ассемблере).

Каждый тип ЦП имеет свой набор инструкций, но общего достаточно, чтобы после изучения одного диалекта ассемблера (в вашем случае MIPS) остальные несложно было освоить.

person sk.    schedule 19.09.2008

Полезно понимать очень низкие уровни компьютера. Например, есть разработчики, которые говорят, что ЦП выполняет какую-то инструкцию «нового объекта». Такой инструкции конечно нет, управление объектами происходит несколькими уровнями абстракции выше. Полезно понимать различие, чтобы вы могли понять, почему создание объектов может быть дорогим (или нет) или почему защищенные адресные пространства могут сделать систему более надежной.

Когда я учился в школе, курс сборки преподавался на мейнфрейме IBM с использованием набора инструкций System/360. Я никогда в своей карьере не работал на такой машине, но знание того, как выглядит ЦП, было ценным.

В настоящее время я работаю над встроенными системами с использованием процессоров MIPS. На самом деле я трачу разумное количество времени на изучение списков сборок MIPS и пишу сборку MIPS для векторов загрузки и примитивов синхронизации. Тем не менее, даже если вы никогда ничего не пишете на ассемблере, понимание работы процессора все равно будет ценным.

person DGentry    schedule 19.09.2008

Около двух лет назад я взял урок сборки, делая мипы. Я обнаружил, что пишу игры для GameBoy Advance на языке ассемблера, похожем на mips. Не могу сказать, что мне понравилось.

Хотя я думаю, что хорошо иметь представление о внутренней работе собранного кода (от высокого уровня до низкого уровня). Я чувствую, что это помогло мне лучше понять, как на самом деле работает компьютер. Кроме того, вскоре после этого я не удержался и сделал несколько виртуальных машин, разработав свой собственный язык ассемблера :)

person Statement    schedule 19.09.2008

MIPS — отличный язык для изучения ассемблера. У вас есть много регистров общего назначения, чтобы сделать написание ваших программ менее утомительным, и это архитектура RISC, поэтому вам нужно запомнить меньше инструкций.

Некоторые из основных применений, о которых мало кто упоминает, это то, что N64, Playstation 1, Playstation 2 и PSP использовали процессоры MIPS.

person mmcdole    schedule 04.05.2009
comment
Я почти уверен, что у N64 также был процессор MIPS. - person Ibrahim; 26.06.2009

Я предполагаю, что под «языком программирования mips» вы имеете в виду язык ассемблера MIPS.

Изучение языка ассемблера полезно знать, это помогает вам сопоставить код, который вы пишете, с тем, как он будет работать на оборудовании. Это может помочь вам столкнуться с более низкоуровневыми проблемами, такими как промахи кэша, ветвление, неупорядоченное выполнение и другие вещи, о которых вы не подумали бы при написании высокоуровневого кода.

Полезность изучения сборки MIPS зависит от того, какой карьерой вы планируете заниматься. Лично я думаю, что x86/x64 (популярны на ПК, напрямую применимы, если вы пишете на C++ или C# на ПК), PPC (набирает популярность, используется в игровых консолях, а также открывает доступ к RISC) или ARM (используется во многих встроенных устройствах). например, мобильные телефоны) могут быть лучшим выбором для изучения.

person redwyre    schedule 19.09.2008

Язык ассемблера всегда стоит изучать. Вас, вероятно, не учили и вы не видели, как компилятор превращает код языка высокого уровня в код ассемблера, но я бы сказал, что знание — это самое важное преимущество знания языка ассемблера. Удивительно, насколько неэффективны многие компиляторы даже на самом высоком уровне оптимизации. (Большинство компиляторов будут выдавать вам ассемблерный код по запросу вместо того, чтобы переходить к машинному коду и компоновке.)

Тем не менее, MIPS asm, вероятно, бесполезен, потому что MIPS сейчас почти никто не использует. (SGI раньше так делала, но теперь все их машины работают на чипах x86/IA-64.) Если вы находите язык ассемблера привлекательным и хотите продолжить работу на ассемблере, изучите набор инструкций ARM. ARM лишь немногим сложнее MIPS, и практически во всех мобильных телефонах, смартфонах и КПК теперь используются чипы ARM (производятся десятками производителей). iPod использует ARM, как и (я думаю) Zune.

person Michael Ratanapintha    schedule 19.09.2008

Мипы, кажется, возвращаются во встроенные системы. @[sk] дал лучшее резюме, чем я, но у меня есть недавний пример:

Похоже, что в наши дни Broadcom выпускает карты Wi-Fi с чипами MIPS или ARM (я не уверен, что именно, в документации указано одно, в прошивке - другое). Тем не менее, на более новых чипах мы все еще ожидаем рабочей поддержки Linux со всеми включенными функциями, поэтому я рад, что вы учитесь. (Теперь возьмите и напишите мне несколько драйверов :P)

person Kent Fredric    schedule 19.09.2008

В вашем случае, я думаю, MIPS используется в качестве учебного пособия. Это урок информатики, и вместо того, чтобы дать вам инструменты для работы с кодом, они пытаются научить вас широким концепциям, которые легче проиллюстрировать на более простой архитектуре, такой как MIPS, а не на x86.

Не ждите, что он войдет в ваш "инструментарий программиста". Для практических целей написания низкоуровневого кода вам лучше после этого изучить язык ассемблера x86.

person Ilya    schedule 09.01.2012

Я изучал MIPS в прошлом году. MIPS — важный язык, но, к сожалению, вы, вероятно, никогда не будете использовать MIPS. Вы изучите некоторые основы, но не тратьте время на попытки узнать больше, чем вам нужно, потому что в MIPS не так много заданий по сравнению с другими языками.

person Community    schedule 21.10.2013

Вот 3 веские причины для изучения ассемблера.

  1. Некоторые небольшие фрагменты программ лучше писать на ассемблере, чем на языке высокого уровня.
  2. Старые ассемблерные программы могут нуждаться в отладке или расширении.
  3. Обучение программированию на ассемблере поможет вам разработать точные модели того, что делает процессор и что делает компилятор.

Третья причина, безусловно, самая важная. Знание того, как работает ваше оборудование, значительно углубит ваше понимание компьютерных наук и, в свою очередь, поможет вам стать лучшим разработчиком.

person JeLLyB0x3r    schedule 17.02.2015

Я думаю, это зависит от того, в какой области CS вы хотите работать после выпуска. Если компьютерная архитектура — это то, чем вы хотите заниматься, то я считаю, что да. Я думаю, что хороший инженер-программист уходит с общей концепцией того, как работает язык ассемблера + обход и переадресация и, наконец, как ваш код может быть оптимизирован для производительности кэша. (пространственное местоположение/временное местоположение)

person user3124081    schedule 30.04.2014

В частности, MIPS менее важен, чем понимание asm в целом, поэтому у вас есть некоторое представление о том, что происходит, когда вы компилируете исходный код высокого уровня. Немного понимания ассемблера может помочь вам разобраться в симптомах ошибок в высокоуровневом коде. (например, перезапись неправильных данных с помощью фиктивного указателя или изменение других локальных переменных в стеке при записи вне массива).

Очевидно, что понять, как заставить C или C++ работать быстро, намного проще, если вы знаете, что фактически запускается ассемблер, генерируемый компилятором. Невозможно разработать хорошие микротесты для тестирования чего-либо, если вы еще не знаете, что происходит.

После того как вы изучите ассемблер MIPS, вам будет довольно легко выучить любой другой. Все остальные основные ЦП также являются регистровыми машинами, которые работают в основном одинаково:

  • Есть регистры и память
  • Все, включая указатели, представляет собой просто биты и байты в памяти или регистрах, то есть целые числа.
  • Каждая инструкция независима и обновляет архитектурное состояние (значения регистров) в соответствии со своими простыми правилами. Он заботится только о своих входах (обычно регистрах, иногда также памяти). Магии нет.
  • Выполнение продолжается от одной инструкции к другой по возрастанию адреса в памяти программы, за исключением инструкций перехода/ветвления.
  • Написание программ/функций — это вопрос построения серии шагов, которые машина должна выполнить, в результате чего данные будут перемещаться и обрабатываться так, как вы хотите. Это похоже на разработку шагов в алгоритме
  • ASM — это то, где отладчик действительно сияет: он может показать вам полное архитектурное состояние машины (поскольку существует конечное число регистров) и показать вам, какие значения регистров изменились при выполнении одной инструкции.

Каждая архитектура имеет свои дополнительные недостатки, но эти основы не меняются, и это то, чему вы действительно учитесь, когда изучаете свой первый язык ассемблера. Одним из основных недостатков MIPS является слот задержки перехода (который используется симуляторами MARS и SPIM). скрыть/отключить по умолчанию)


MIPS — довольно приятный язык ассемблера для изучения. Она проста и ортогональна и прекрасно ведет к обсуждению конвейерных процессоров, потому что именно для этого она и была разработана. (Никаких микрокодированных инструкций и очень обычный формат машинного кода, который легко декодировать.)

Также есть хорошие симуляторы MIPS, MARS и SPIM, у которых есть редактор/ассемблер/симулятор + отладчик в одном. И некоторые «системные вызовы», которые выполняют высокоуровневые действия, такие как чтение целого числа с клавиатуры пользователя в регистр. Обычные ОС имеют системные вызовы, которые просто позволяют вам читать/записывать символы, и вам нужно вызывать библиотечные функции или писать свои собственные целочисленные->строковые функции. Это и благословение, и проклятие: если вы не понимаете, что системные вызовы MARS — это в основном библиотечные функции со специальным соглашением о вызовах, вы можете не осознавать, что можете написать свой собственный код, который делает некоторые из этих вещей, или что это не так. «нормально», когда системные вызовы работают таким образом.

Однако вы можете изучить все это на x86, особенно если вы хотите провести эксперименты с производительностью на своем настольном компьютере / ноутбуке.

person Peter Cordes    schedule 12.04.2018