Разница между MIPS и языком ассемблера

в чем разница между ISA (например, MIPS) и языком сборки? Я вижу некоторые контексты, где они, по-видимому, используются синонимично.

3 ответов


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

язык ассемблера обычно имеет отношение 1-1 с ISA, но может быть реализован по-разному. Иногда код сборки может выполнять весь набор инструкций уровня ISA.

языки Ассамблеи абстрактный набор кодов операций ISA, логики и инструкций, допускающих переменные/макросы/функции/методы/etc. Они могут быть очень простыми (что означает почти 1-1 отображение) или они могут поддерживать более сложные операции, такие как структурные блоки программирования.


Я сомневаюсь, что есть какие-либо" авторитетные " определения этих терминов, но вот некоторые смыслы, в которых они могут не полностью перекрываться:

  • В то время как" ISA "стандартизирует открытый интерфейс к процессору, который должен использоваться в качестве основы для написания программ, совместимых с двоичным кодом с несколькими процессорами, реализующими ISA, "язык сборки" может также ссылаться на то, что реализовано конкретным процессором, без необходимости быть совместимым с другими реализации.
  • в более общем плане " ISA "- это стандартный документ, а" assembly language " - язык программирования.
  • ISA обычно указывает не только инструкции и их имена, но и двоичную кодировку для них (например, opcodes и argument encodings). Термин "язык ассемблера" относится только к текстовой форме инструкций без ссылки на их кодировку.

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


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

Assembly Language-это термин для языка программирования. В отличие от Java или Python, нет ни одного стандартного тела, которое делает определение для одного языка сборки. В идеале для каждого ISA есть Язык ассемблера, но это не так уж редко, что может существовать более одного или тонкие вариации между языками ассемблера для конкретного ISA. Язык ассемблера по существу определяется ассемблером, иногда слово ассемблер также используется для обозначения самого языка, я пытаюсь отделить язык ассемблера, язык программирования и ассемблер от утилиты программистов, которая берет язык ассемблера и анализирует его и преобразует в машинный код.

Ассемблере в идеале это язык программирования, где у вас есть отношение один к одному между мнемоническим языком каждой сборки и инструкцией в наборе инструкций (ISA). Но это не всегда так, есть вещи, чтобы сделать вашу жизнь проще, как ярлыки для разветвления. Часто существует ряд директив, где вы можете, например, вставить некоторые данные (возможно, строку, которую вы хотите напечатать). И есть макросы, которые не отличаются от макросов в C способом, которым вы можете написать некоторый код, который хотите повторно использовать время в одном месте, а затем просто использовать макрос.

MIPS-это компания, которая делает процессоры, а имя ISA и имя языка сборки, и все процессоры будут иметь имя MIPS. Как и процессоры Intel, язык ассемблера и набор инструкций можно правильно назвать Intel (хотя мы также видим x86 и другие варианты). Рука, такое же дело, процессор, архитектура, набор инструкций, язык сборки.

обычно изобретатель набора инструкций (как в группе людей, работающих вместе, не обязательно один отдельный инженер чипа), создает документацию для этого набора инструкций, обычно включая машинный код. Наряду с этим существует обычный синтаксис языка ассемблера. Часто синтаксис в справочном руководстве является отправной точкой для ассемблера. Не так часто здесь определяются инструкции, которые на самом деле являются псевдо-инструкциями, NOP является общим, некоторые наборы инструкций не хотят тратить код операции и вместо этого ассемблер кодирует add r0+0 или и r0, r0 или какую-то такую вещь, которая в основном ничего не делает, но является реальной инструкцией alu. MIPS имеет некоторые часто используемые инструкции языка ассемблера / мнемоники, которые являются псевдо-инструкциями, которые ассемблер генерирует для вас, вы должны помнить, чтобы не использовать их в тени ветви (отложите слот, какой бы термин вы ни использовали), или вы будете или должны быть предупреждены.