Мой вопрос, хотя набор инструкций будет другим, синтаксис сборки (или сам язык) одинаков для любой архитектуры?
Нет!
Только для x86 существует дюжина различных ассемблеров, каждый из которых имеет свою уникальность, заставляя их принимать немного другой язык - есть GAS, MASM, NASM, TASM, FASM, ASM ... Мало программы будут собираться со всеми этими ассемблерами x86.
Синтаксис at & t против intel - цель первая против цели последняя.
Существуют различные требования к директивам: .pro c, .endp , et c ..
Существует прекрасный синтаксис Intel byte ptr
для определения размера / ширины операции, по сравнению с большинством других суффиксов .b
, .w
, .l
остального мира ( иногда без .
).
Некоторые ассемблеры, такие как: after label, другие не разрешают это (или вместо этого требуют a).
Некоторые требуют специальных символов, чтобы отличать имена регистров от других идентификаторов (например, префикс% для некоторые, префикс $ для других), другие нет.
Синтаксис для режимов адресации также значительно различается, например, в нотации ARM [] необычное расположение константы после скобок указывает на обновление переменной указателя.
И это без учета названий кодов операций.
В Intel мы используем call
для инструкции, которая вызывает функцию (передает p c в функцию при захвате адреса возврата), jal
на MIPS & RIS C V, bsr
, jsr
или bl
, jms
на других и т. Д. c ..
Термин для вызова системных вызовов, по-разному syscall
, ecall
, trap
, sc
, int
, swi
, svc
et c ..
Короче говоря, не существует стандартизации языка, грамматики, или синтаксис на ассемблерах.
Что касается simil Вообще говоря, есть понятия условного ветвления if-goto (и безусловного ветвления) как механизма для конструкций потока управления, понятия меток как целей ветвления и целей данных, одна инструкция на строку (как упоминает @Peter), mnemoni c код операции с отдельными операндами - но эти сходства являются скорее концептуальными, чем синтаксическими c.