Каковы отношения между ассемблером и машинным языком?

Являются ассемблер и машинный язык (для той же базовой системы) действительно тем же? Есть ли какие-либо различия между этими двумя понятиями?

31
задан Peter Cordes 26 July 2019 в 00:30
поделиться

4 ответа

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

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

40
ответ дан 27 November 2019 в 21:56
поделиться

На ассемблере инструкции - это более понятные представления инструкций ЦП.

Но ассемблер также упрощает, например, адресацию:

  • Вы должны знать машинный язык. расстояние (в адресном пространстве) между тем местом, где вы находитесь, и местом, куда вы хотите перейти
  • . На языке ассемблера вы вызываете один адрес «iWantToJumpHere», а затем можете сказать «перейти на iWantToJumpHere»

. Это значительно упрощает поддержку сборки , особенно при изменении расстояния между адресами.

5
ответ дан 27 November 2019 в 21:56
поделиться

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

0
ответ дан 27 November 2019 в 21:56
поделиться

Машинный язык - это «Битовая кодировка» кодов операций ЦП.

Язык ассемблера - «Символьная кодировка» кодов операций ЦП.

Итак, для примера символически:

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.
19
ответ дан 27 November 2019 в 21:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: