Низкий уровень языка программирования не означает плохой уровень.
Имеется ввиду, что операторы языка близки к машинному коду и ориентированы на конкретные команды процессора.
Языком самого низкого уровня является язык ассемблера, который представляет каждую команду машинного кода с помощью удобных для восприятия человеком символических условных обозначений, называемых мнемокодами.
Язык ассемблера дает возможность составлять программы в терминах команд машинного языка, но с использованием более удобной системы обозначений.
Использование языка ассемблера, как правило, ограничивается областью системного программирования, т.е. разработкой операционных систем или их компонентов, разработкой драйверов и т.д.
Так как наборы команд для каждой модели процессора отличаются между собой, то конкретной компьютерной архитектуре соответствует свой язык ассемблера.
Для перевода программы с языка ассемблера в понимаемый процессором машинный код требуется специальная программа, которая также называется ассемблером.
Lisp: побеждая посредственность (Пол Грэм)
В общем случае программу, которая переводит программу, написанную на языке высокого уровня в машинный код, называют компилятором.
С помощью языков низкого уровня создаются очень эффективные и быстро выполняемые программы, так как разработчик получает доступ ко всем возможностям процессора. С другой стороны, при этом требуется очень хорошо понимать устройство компьютера, требуется больше времени для программирования и результирующая программа не может быть перенесена на компьютер с другим типом процессора.
Языки низкого уровня часто применяют для написания системных приложений, например драйверов устройств, когда важнейшими требованиями становятся быстродействие и возможность прямого доступа к аппаратным ресурсам.
Языки программирования высокого уровня значительно ближе и понятнее человеку. Особенности конкретных компьютерных архитектур в них не учитываются, поэтому создаваемые программы на уровне исходных текстов легко переносятся на другие платформы, для которых создан транслятор этого языка. Разрабатывать программы на языках высокого уровня значительно проще, а ошибок при этом допускается гораздо меньше.
Для перевода отдельных инструкций программы, написанной на языке высокого уровня, в двоичный код, с которым может работать процессор, служат специальные программы, которые называются трансляторами.
Иногда рассматривают три уровня языков программирования:
- машинные (самого низкого уровня);
- машинно-ориентированные (ассемблеры);
- машинно-независимые (высокого уровня).
Машинные и машинно-ориентированные языки требуют подробного описания самых мелких деталей процесса обработки данных.
При программировании на машинном языке можно держать под контролем каждую команду процессора и использование каждой ячейки памяти, тем самым максимально использовать все возможности компьютера. Но процесс этот очень трудоемкий и утомительный, а программы получаются громоздкими.
Преобразование программ в машинный код с LLVM
Поэтому, если нужно разработать эффективную программу, в максимальной степени учитывающую специфику конкретного компьютера, то вместо машинных языков используют близкие к ним машинно-ориентированные языки (ассемблеры). Во всех остальных случаях используют, как правило, языки высокого уровня.
Языки высокого уровня были созданы для того, чтобы освободить программиста от учета технических особенностей конкретных компьютеров.
Уровень языка характеризуется степенью его близости к обычной человеческой речи. Машинный язык радикально от нее отличается.
Важным преимуществом языков высокого уровня является их универсальность, независимость от аппаратуры. Программа, написанная на таком языке, может выполняться на разных компьютерах.
Транслятор — это программа, предназначенная для автоматического перевода описания алгоритма решения задачи с одного формального языка на другой. Причем исходным языком является язык высокого уровня, а конечным – машинный язык (машинный код).
Если трансляция сопровождается выполнением каждой команды после ее перевода в машинный код, то такой транслятор называют интерпретатором.
Если же трансляция сопровождается только переводом программы с одного языка на другой (т.е. с языка высокого уровня на машинный язык) без выполнения каждой команды после ее перевода в машинный код, то такой транслятор называют компилятором.
В настоящее время в мире существует несколько тысяч языков программирования. Для программирования выбирают тот язык, который наилучшим образом подходит для решения той тли иной задачи.
Языки программирования, приспособленные для каких-то специфических задач, называют специальными.
Например, для решения инженерных задач раньше часто использовали ФОРТРАН (FORTRAN), программы для выполнения в сети Интернет пишут, например, на языках PHP, Perl, JavaScript и др.
Специальные языки имеют такие операторы, которые позволяют решать специальные задачи наиболее просто. Обычно эти языки изучают после устройства на работу. Изучать их заранее не имеет смысла.
Кроме специальных существуют универсальные языки программирования. Это языки, с помощью которых можно решать очень широкий круг задач.
Источник: xn--d1acjinvhdf.xn--p1ai
Также существуют компиляторы, переводящие программу с языка высокого уровня на язык ассемблера
Некоторые компиляторы (например, Java) переводят программу не в машинный код, а в программу на некотором специально созданном низкоуровневом языке. Такой язык — байт-код — также можно считать языком машинных команд, поскольку он подлежит интерпретации виртуальной машиной. Байт-код не является машинным кодом какого-либо компьютера и может портироваться на различные компьютерные архитектуры. Байт-код интерпретируется (исполняется) виртуальной машиной.
Основы
Условная. Компиляция, при которой транслируемый текст зависит от условий, заданных в исходной программе. Так, в зависимости от значения некоторой константы, можно включать или выключать трансляцию части текста программы.
Построчная. То же, что и интерпретация.
Виды компиляции
Самокомпилируемый. Написан на том же языке, с которого осуществляется трансляция.
Отладочный. Устраняет отдельные виды синтаксических ошибок.
Компилятор компиляторов. Транслятор, воспринимающий формальное описание языка программирования и генерирующий компилятор для этого языка.
Интерпретирующий (пошаговый). Последовательно выполняет независимую компиляцию каждого отдельного оператора (команды) исходной программы.
Инкрементальный. Повторно транслирует фрагменты программы и дополнения к ней без перекомпиляции всей программы.
Компилировать — проводить трансляцию машинной программы с проблемно-ориентированного языка на машинно-ориентированный язык.
Трансляция программы, составленной на исходном языке, в объектный модуль. Осуществляется компилятором.
Программа, переводящая текст программы на языке высокого уровня в эквивалентную программу на машинном языке.
Транслятор, выполняющий преобразование программы, составленной на исходном языке, в объектный модуль.
Машинная программа, используемая для компиляции.
Программа, предназначенная для трансляции высокоуровневого языка в абсолютный код или, иногда, в язык ассемблера. Входной информацией для компилятора (исходный код) является описание алгоритма или программа на проблемно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код).
Компиляция — трансляция программы на язык, близкий к машинному.[
Виды компиляторов[2]
Векторизующий. Транслирует исходный код в машинный код компьютеров, оснащённых векторным процессором.
Гибкий. Составлен по модульному принципу, управляется таблицами и запрограммирован на языке высокого уровня или реализован с помощью компилятора компиляторов.
Диалоговый. См.: диалоговый транслятор.
Резидентный. Постоянно находится в основной памяти и доступен для повторного использования многими задачами.
Универсальный. Основан на формальном описании синтаксиса и семантики входного языка. Составными частями такого компилятора являются: ядро, синтаксический и семантический загрузчики.
Пакетная. Компиляция нескольких исходных модулей в одном пункте задания.
Большинство компиляторов переводит программу с некоторого высокоуровневого языка программирования в машинный код, который может быть непосредственно выполнен центральным процессором. Как правило, этот код также ориентирован на исполнение в среде конкретной операционной системы, поскольку использует предоставляемые ею возможности (системные вызовы, библиотеки функций). Архитектура (набор программно-аппаратных средств), для которой производится компиляция, называется целевой машиной.
Например, для языка Java это JVM (язык виртуальной машины Java), или так называемый байт-код Java (вслед за ним все промежуточные низкоуровневые языки стали называть байт-кодами). Для языков программирования на платформе.NET Framework (C#, Managed C++, Visual Basic.NET и другие) — это MSIL (Microsoft Intermediate Language).
Программа на байт-коде подлежит интерпретации виртуальной машиной, либо ещё одной компиляции уже в машинный код непосредственно перед исполнением. Последнее называется «Just-In-Time компиляция» (JIT), по названию подобного компилятора для Java. MSIL-код компилируется в код целевой машины также JIT-компилятором, а библиотеки.NET Framework компилируются заранее).
Для каждой целевой машины (IBM, Apple и т. д.) и каждой операционной системы или семейства операционных систем, работающих на целевой машине, требуется написание своего компилятора. Существуют также так называемые кросс-компиляторы, позволяющие на одной машине и в среде одной ОС получать код, предназначенный для выполнения на другой целевой машине и/или в среде другой ОС. Кроме того, компиляторы могут быть оптимизированы под разные типы процессоров из одного семейства (путём использования специфичных для этих процессоров инструкций). Например, код, скомпилированный под процессоры семейства Pentium, может использовать специфичные для этих процессоров наборы инструкций — MMX, SSE, SSE2.
Существуют программы, которые решают обратную задачу — перевод программы с низкоуровневого языка на высокоуровневый. Этот процесс называют декомпиляцией, а программы — декомпиляторами. Но поскольку компиляция — это процесс с потерями, точно восстановить исходный код, скажем, на C++, в общем случае невозможно.
Более эффективно декомпилируются программы в байт-кодах — например, существует довольно надёжный декомпилятор для Flash. Сходным процессом является дизассемблирование машинного кода в код на языке ассемблера, который всегда выполняется успешно. Связано это с тем, что между кодами машинных команд и командами ассемблера имеется практически однозначное соответствие.
Источник: studopedia.su
Программа, которая переводит машинные коды на язык ассемблера, 12 букв
Ответ на вопрос в сканворде (кроссворде) «Программа, которая переводит машинные коды на язык ассемблера», 12 букв (первая — д, последняя — р):
д и з а с с е м б л е р
(ДИЗАССЕМБЛЕР) 0 0
Другие определения (вопросы) к слову «дизассемблер» (1)
- Транслятор, преобразующий машинный код в текст программы на языке низкого уровня
- комп. (компьютерное) программа, преобразующая машинный код в текст программы на языке ассемблера
Дизассе́мблер (от английского disassembler [ ˌdɪsəˈsɛmblə(r) ]) — транслятор, преобразующий машинный код, объектный файл или библиотечные модули в текст программы на языке ассемблера.
По режиму работы с пользователем делятся на автоматические и интерактивные. Такие дизассемблеры генерируют готовый листинг, который можно затем править в текстовом редакторе. Пример интерактивного — IDA. Он позволяет изменять правила дизассемблирования и является весьма удобным инструментом для исследования программ.
Дизассемблеры бывают однопроходные и многопроходные. Основная трудность при работе дизассемблера — отличить данные от машинного кода, поэтому на первых проходах автоматически или интерактивно собирается информация о границах процедур и функций, а на последнем проходе формируется итоговый листинг. Интерактивность позволяет улучшить этот процесс, так как просматривая дамп дизассемблируемой области памяти, программист может сразу выделить строковые константы, дать содержательные имена известным точкам входа, прокомментировать разобранные им фрагменты программы. Обычно однопроходный дизассемблер (как и построчный ассемблер) является составной частью отладчика.
Чаще всего дизассемблер используют для анализа программы (или её части), исходный текст которой неизвестен — с целью модификации, копирования или взлома. Реже — для поиска ошибок (багов) в программах и компиляторах, а также для анализа и оптимизации создаваемого компилятором машинного кода.
При работе с исполняемым кодом или байт-кодом, созданным на некоторых языках высокого уровня (например, java) имеется возможность восстановить не только текст на языке ассемблера, но даже и структуру классов программы, а если при компиляции исполняемого файла не была отключена отладочная информация — то и исходный текст программы. Для исключения таких возможностей используется обфускация.
Что искали другие
- Тринитротолуол короче
- Греческая буква
- Купец из «комедии масок»
- Умник наоборот
- Знак на лбу индианки
Случайное
- Пластина (пленка), покрытая люминофором, для преобразования невидимого рентгеновского изображения в видимое
- Талант из глубинки
- Старание женщины нравиться мужчинам
- Наполеоновский сторонник
- Киллер по приказу Воланда
- Поиск занял 0.009 сек. Вспомните, как часто вы ищете ответы? Добавьте sinonim.org в закладки, чтобы быстро искать их, а также синонимы, антонимы, ассоциации и предложения.
Источник: sinonim.org