Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Язык машины - это "Бит-кодирование" кодов операций процессора.

Сборка langauge - это "Символическое кодирование" кодов операций процессора.

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

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 году, когда сборка использовалась, значительно расширила исходный код более "высокого уровня". Я лично написал макросы сборки, которые выглядели как "график 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.

Ответ 3

Я нашел действительно хорошее объяснение, подумал разместить его здесь, чтобы другие могли его прочитать:

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

Язык ассемблера более человечный читаемый вид машинного языка. Вместо представления машины язык как цифры, инструкции и регистрам присваиваются имена (обычно сокращенные слова или Мнемоника, например, ld означает "нагрузка" ). В отличие от язык высокого уровня, ассемблер очень близко к машинному языку. Основные абстракции (кроме мнемоника) - использование меток вместо фиксированных адресов памяти и Комментарии.

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

Источник: В чем разница между машинным языком и языком ассемблера?

Ответ 4

В сборке инструкции являются более понятными представлениями инструкций CPU.

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

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

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

Ответ 5

машинный язык это то, что чип понимает сборка это то, что вы понимаете

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

 machine code bytes |   x86 assembly language
8D B0 00 36 65 C4    lea    esi, [eax - 1000000000]     
BB 00 FC FF FF       mov    ebx, -1024
43                   inc    ebx
41                   inc    eax
3B CA                cmp    ecx,edx
C3                   ret

C5 F5 72 D2 01       vpsrld ymm1,ymm2,0x1        ; AVX2
C5 F5 D4 6D 88       vpaddq ymm5,ymm1,YMMWORD PTR [ebp-0x78]
C5 CD D4 AD 68 ff ff ff vpaddq ymm5,ymm6,YMMWORD PTR [ebp-0x98]

Ответ 6

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

Ответ 7

Машинный язык:

  1. Это язык программирования первого поколения
  2. Это намного сложнее, чем на ассемблере
  3. Трудно понять человеку
  4. Это в форме 0 и 1
  5. Машинный язык зависит от платформы
  6. Его нельзя легко изменить
  7. Не поддерживает модификацию
  8. Высокий риск возникновения ошибки
  9. Двоичный код трудно запомнить
  10. Нет необходимости в компиляторе

Язык ассемблера:

  1. Это язык программирования второго поколения
  2. Это менее сложно, чем машинный язык
  3. Легко понять человеку
  4. Он использует символические инструкции, описательные имена для элементов данных и места в памяти
  5. Язык ассемблера зависит от платформы
  6. Это легко модифицируется
  7. Изменения в его поддержке
  8. Риск возникновения ошибки уменьшается
  9. Высокая запоминаемость
  10. Нужен компилятор и знает как ассемблер

Ответ 8

Ассемблер сначала переводит ассемблер на язык ассемблера. который хранится в памяти (RAM), процессор/чашка извлекает его и сохраняет в памяти для регистрации и следования инструкциям, установленным один за другим.

Ответ 9

Машинный язык

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

Язык ассемблера

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

Ответ 10

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