Машинный язык - это «битовая кодировка» кодов операций процессора.
Язык ассемблера - это "символическая кодировка" кодов операций процессора.
Так, например, Символически:
loop: dec R1 # Decrement register R1
bnq loop # Branch if not equal to zero to
# address "loop"
Становится битовой кодировкой:
# Mythical CPU Machine code 4 bits operation,
# 4 bit "option"
0x41 # 4 is a "dec" and represents r1;
0x7E # 7 is bnq and E means PC -2;
Как правило, это отношение один к одному, однако некоторые языки ассемблера будут иметь дополнительные инструкции по сборке, которые сопоставляются либо с несколькими инструкциями машинного кода, либо повторно используют другой код операции. Например, использование машинного кода «xor R1, R1» в качестве «clr R1» или что-то очень похожее.
Кроме того, языки ассемблера будут склонны поддерживать «макропрограммирование», которое в 80-х годах, когда ассемблер широко использовался, придало исходному коду более «высокий уровень». Я лично написал макросы сборки, которые выглядели как «plot x, y» и «Hex Val», чтобы упростить общие операции.
Например:
# Mythically CPU Macro
.macro spinSleep x,y
ld #x,y
localLoop: dec y
brq localLoop
.endmacro
# Macro invocation
spinSleep 100,R1
# Macro expantion
ld #100,R1
localLoopM: dec R1
brq localLoopM # localLoopM is "Mangled" for localization.