Разница между MIPS и языком ассемблера
В чем разница между ISA (например, MIPS) и языком ассемблера? Я вижу некоторые контексты, где они используются как синонимы.
3 ответа
Архитектура набора инструкций (ISA) физически соответствует операциям машины в конкретном процессоре. Это означает, что ISA перечисляет все инструкции, а также коды операций, которые могут выполняться конкретными процессорами.
Ассемблер обычно имеет отношение 1-1 с ISA, но может быть реализовано различными способами. Иногда ассемблерный код может выполнять весь набор инструкций уровня ISA.
Языки ассемблера - это абстрагированный набор кодов операций, логики и инструкций ISA, которые допускают переменные / макросы / функции / методы / и т. Д. Они могут быть очень простыми (что означает почти 1-1 отображение) или они могут поддерживать более сложные операции, такие как структурные блоки программирования.
ISA означает архитектуру набора команд. Поскольку эти слова подразумевают, что это архитектура на основе инструкций, для которой был разработан какой-то конкретный процессор. Кто-то где-то знает, что делает эта архитектура, и инструкции (машинный код), чтобы заставить ее делать то, что она делает.
Язык ассемблера - это термин для языка программирования. В отличие от Java или Python, нет единого стандартного тела, которое бы определяло один язык ассемблера. В идеале для каждого ISA существует язык ассемблера, но нередко бывает, что между языками ассемблера для конкретного ISA могут существовать более одного или тонкие различия. Язык ассемблера по существу определяется ассемблером, иногда слово ассемблер также используется для обозначения самого языка, я пытаюсь разделить язык ассемблера, язык программирования и ассемблер для утилиты программистов, которая берет язык ассемблера и анализирует его и преобразует его в Машинный код.
Язык ассемблера в идеале - это язык программирования, в котором между мнемоникой языка ассемблера и инструкцией в наборе инструкций (ISA) существует отношение один к одному. Но это не всегда так, есть вещи, которые сделают вашу жизнь проще, например ярлыки для ветвления. Часто существует ряд директив, в которые вы, например, можете вставить некоторые данные (возможно, строку, которую вы хотите напечатать). И есть макросы, которые не похожи на макросы в Си, так как вы можете написать некоторый код, который хотите повторно использовать один раз в одном месте, а затем просто использовать макрос.
MIPS - это компания, которая производит процессоры и название ISA, а также язык ассемблера, и все процессоры будут носить имя MIPS. Как и в случае с процессорами Intel, язык ассемблера и набор инструкций можно правильно назвать Intel (хотя мы также видим x86 и другие варианты). ARM, та же сделка, процессор, архитектура, набор команд, язык ассемблера.
Обычно изобретатель набора инструкций (как в группе людей, работающих вместе, не обязательно один отдельный чип-инженер), создает документацию для этого набора инструкций, обычно включая машинный код. Наряду с этим существует обычный синтаксис ассемблера. Часто синтаксис в справочном руководстве является отправной точкой для Ассемблера. Не так часто встречаются определенные здесь инструкции, которые на самом деле являются псевдо-инструкциями, nop является обычным явлением, некоторые наборы команд не хотят тратить код операции, и вместо этого ассемблер кодирует add r0+0 или и r0,r0 или что-то подобное, что в основном делает ничего, кроме настоящих инструкций alu. MIPS имеет некоторые часто используемые инструкции / мнемонику на языке ассемблера, которые являются псевдо-инструкциями, которые генерирует ассемблер для вас, вы должны помнить, что не следует использовать их в тени ветви (отсрочка отсрочки, какой бы термин вы ни хотели использовать), или вы должны или должны имейте в виду.
Я сомневаюсь, что существуют какие-либо "авторитетные" определения этих терминов, но вот некоторые значения, в которых они могут не полностью совпадать:
- В то время как "ISA" стандартизирует общедоступный интерфейс с процессором, который должен использоваться в качестве основы для написания программ, совместимых в двоичном формате с несколькими процессорами, которые реализуют ISA, "язык ассемблера" также может относиться к тому, что реализуется конкретный процессор, не обязательно совместимый с другими реализациями.
- В более общем смысле "ISA" - это стандартный документ, а "язык ассемблера" - это язык программирования.
- ISA обычно указывает не только инструкции и их имена, но и двоичную кодировку для них (например, коды операций и кодировки аргументов). Термин "язык ассемблера" относится только к текстовой форме инструкций без ссылки на их кодировку.
Тем не менее, они явно имеют много общего, поэтому в ненормативных текстах было бы вполне понятно, если бы они использовались взаимозаменяемо в некоторых контекстах.