Являются ли языком ассемблера и машинным языком (для одной и той же базовой системы) то же самое? Существуют ли какие-либо различия между этими двумя понятиями?
Какая связь между языком ассемблера и машинным языком?
Ответ 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
Машинный язык:
- Это язык программирования первого поколения
- Это намного сложнее, чем на ассемблере
- Трудно понять человеку
- Это в форме 0 и 1
- Машинный язык зависит от платформы
- Его нельзя легко изменить
- Не поддерживает модификацию
- Высокий риск возникновения ошибки
- Двоичный код трудно запомнить
- Нет необходимости в компиляторе
Язык ассемблера:
- Это язык программирования второго поколения
- Это менее сложно, чем машинный язык
- Легко понять человеку
- Он использует символические инструкции, описательные имена для элементов данных и места в памяти
- Язык ассемблера зависит от платформы
- Это легко модифицируется
- Изменения в его поддержке
- Риск возникновения ошибки уменьшается
- Высокая запоминаемость
- Нужен компилятор и знает как ассемблер
Ответ 8
Ассемблер сначала переводит ассемблер на язык ассемблера. который хранится в памяти (RAM), процессор/чашка извлекает его и сохраняет в памяти для регистрации и следования инструкциям, установленным один за другим.
Ответ 9
Машинный язык
Машинный язык состоит из единиц и нулей. так трудно понять, глядя на это. так что если мы хотим изменить код, это будет огромной проблемой. Машинные языки также являются языком программирования (1-го поколения). Наш ЦП компьютера может напрямую выполнять этот машинный код без какого-либо ассемблера.
Язык ассемблера
ассемблер состоит из синтаксиса, числа и буквы. это легко изменить существующий код. наша машина не может понять эту программу. поэтому машина использует ассемблер для преобразования кода ассемблера в машинный код.
Ответ 10
Язык ассемблера - это символический код кода операции (код операции), который понимается людьми и используется только для указания компьютерному процессору (аппаратная операция) и роботу (роботизированная операция) для выполнения определенных задач. Это понятный язык для человека. Этот язык используется только для указания работы оборудования и определенно не используется для создания программного обеспечения. Ассемблер используется для преобразования этой символической части кода кода операции (кода операции) в машинный язык. Код операции (Opcode) является частью машинного языка.