Машинный код: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
Содержимое удалено Содержимое добавлено
Insolor (обсуждение | вклад) Возвращение до состояния на 14:28, 23 февраля 2014, причины см. обсуждение |
4th-otaku (обсуждение | вклад) дополнение, викификация, стилевые правки |
||
Строка 2:
'''Машинный код''' ('''платформенно-ориентированный код'''), '''машинный язык''' — [[система команд]] (набор кодов операций) конкретной [[компьютер|вычислительной машины]], которая [[интерпретатор|интерпретируется]] непосредственно [[процессор]]ом или [[микропрограмма]]ми этой вычислительной машины.<ref name="Dict">{{книга|заглавие=Толковый словарь по вычислительным системам|оригинал=Dictionary of Computing|ответственный=Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского|место={{М.}}|издательство=Машиностроение|год=1990|страниц=560|isbn=5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания)|тираж=70 000 (доп.)}}</ref>
[[Компьютерная программа]], записанная на машинном языке, состоит из '''машинных инструкций''', каждая из которых представлена в машинном коде в виде т. н. [[Код операции|опкода]] — [[Двоичный код|двоичного кода]] отдельной операции из системы команд машины. Для удобства [[Программирование|программирования]] вместо числовых опкодов, которые только и понимает процессор, обычно используют их условные буквенные [[Мнемоника|мнемоники]]. Набор таких мнемоник, вместе с некоторыми дополнительными возможностями, называется [[Язык ассемблера|языком ассемблера]].
Каждая инструкция выполняет определённое (обычное [[Элементарная операция|элементарное]]) действие, такое как операция с данными (например, сложение или копирование; в регистре или в памяти) или переход к другому участку кода (изменение порядка исполнения; при этом переход может быть [[Команда перехода|безусловным]] или [[Условный переход|условным]], зависящим от результатов предыдущих инструкций). Каждая [[Исполнимый модуль|исполнимая программа]] состоит из последовательности таких атомарных инструкций.▼
Каждая модель процессора имеет свой собственный набор команд, хотя во многих моделях эти наборы команд сильно перекрываются. Говорят, что процессор ''A'' ''совместим'' с процессором ''B'', если процессор ''A'' полностью «понимает» машинный код процессора ''B''. Если
Машинный код можно рассматривать как примитивный [[язык программирования]] или как самый низкий уровень представления [[компилятор|скомпилированных]] или [[ассемблер|ассемблированных]] компьютерных программ. Хотя вполне возможно создавать программы прямо в машинном коде, сейчас это делается редко в силу громоздкости кода и трудоёмкости управления ресурсами процессора, за исключением ситуаций, когда требуется экстремальная [[Оптимизация (информатика)|оптимизация]]. Поэтому подавляющее большинство программ пишется на языках более высокого уровня и транслируется в машинный код компиляторами. Машинный код иногда называют '''нативным кодом''' (также '''собственным''' или '''родным кодом''' — от {{lang-en|native code}}), когда говорят о платформенно-зависимых частях языка или библиотек.<ref>{{cite web|url=http://www.developer.com/net/cplus/print.php/2197621|title=Managed, Unmanaged, Native: What Kind of Code Is This?|author=Kate Gregory.|date=28 апреля 2003|accessdate=2012-03-27|archiveurl=http://www.webcitation.org/68313Lm0E|archivedate=2012-05-30}}</ref>▼
== Машинная инструкция ==
Программы на интерпретируемых языках (таких как [[Бейсик]] или [[Python]]) не транслируются в машинный код, вместо этого они либо исполняются непосредственно интерпретатором, либо транслируются в псевдокод ([[байт-код]]). Однако интерпретаторы этих языков (которые сами можно рассматривать как процессоры) как правило представлены в машинном коде.▼
{{main|Инструкция (информатика)}}
▲Каждая машинная инструкция выполняет определённое
Операции, записываемые в виде одной машинной инструкции, можно разделить на «простые» ([[элементарная операция|элементарные операции]]) и «сложные». Кроме того, большинство современных процессоров состоит из отдельных «исполнительных устройств» — вычислительных блоков, которые умеют исполнять лишь ограниченный набор простейших операций. При исполнении очередной инструкции специальный блок процессора — декодер — [[Транслятор|транслирует]] (декодирует) её в последовательность элементарных операций, понимаемых конкретными исполнительными устройствами.
▲Каждая модель процессора имеет свой собственный набор команд, хотя во многих моделях эти наборы команд сильно перекрываются. Говорят, что процессор ''A'' ''совместим'' с процессором ''B'', если процессор ''A'' полностью «понимает» машинный код процессора ''B''. Если процессор ''A'' знает несколько команд, которых не понимает процессор ''B'', то ''B'' несовместим с ''A''.
Раньше процессоры просто выполняли инструкции одну за другой, но новые [[Суперскалярный процессор|суперскалярные процессоры]] способны выполнять несколько инструкций за раз.▼
▲
▲Также инструкции бывают постоянной длины (у [[RISC]]-, [[MISC]]-архитектур) и диапазонной (у [[CISC]]-архитектур; например: для архитектуры [[x86]] команда имеет длину от 8 до 120 битов).
== Машинный код как язык программирования ==
{{seealso|Язык ассемблера}}
▲Машинный код можно рассматривать как примитивный [[язык программирования]] или как самый низкий уровень представления [[компилятор|скомпилированных]] или [[ассемблер|ассемблированных]] компьютерных программ. Хотя вполне возможно создавать программы прямо в машинном коде, сейчас это делается редко в силу громоздкости кода и трудоёмкости ручного управления ресурсами процессора, за исключением ситуаций, когда требуется экстремальная [[Оптимизация (информатика)|оптимизация]]. Поэтому подавляющее большинство программ пишется на [[Высокоуровневый язык программирования|языках более высокого уровня]] и транслируется в машинный код
▲Программы на [[Интерпретируемый язык программирования|интерпретируемых языках]] (таких как [[Бейсик]] или [[Python]]) не транслируются в машинный код
== Микрокод ==
|