Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Макуха Ответы МПТ.docx
Скачиваний:
17
Добавлен:
03.08.2019
Размер:
276.57 Кб
Скачать
  1. Программирование на машинном языке.

Здесь рассмотреть любой алгоритм и привести выполнение команд на машинном языке.

  1. Программирование на языке ассемблер.

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

Приведем еще пару определений. Если используется ассемблер, работающий на том же компьютере, для которого разрабатывается программа, то его называют собственным (или резидентным) ассемблером.

Но можно составлять программы и для микропроцессорных систем, где ассемблера нет, а использовать ассемблер, имеющийся на PC IBM и предназначенный для микропроцессора, используемого в микропроцессорной системе. Тогда в универсальной ЭВМ произойдет перевод исходной программы в объектную, которую перенесут в микропроцессорную систему. В этом случае ассемблер называют кросс-ассемблером

Что делает программа ассемблер? Она должна просмотреть исходную программу и сделать таблицу адресов – узнать, какие метки какой команде соответствуют, какой объем памяти будет задействован, и распределить адреса памяти. Затем, если все метки проставлены и не используются 2 раза (иначе появится сообщение об ошибке), ассемблер переходит к переводу мнемонических обозначений команд в объектный код и должен завершать свою работу выдачей распечатки.

На самом деле реальная процедура для получения кодов выглядит несколько сложнее. Чтобы понять почему, рассмотрим такую ситуацию. Предположим, что в нашей программе потребуется вычислять значения функции Sin(x). Можно, конечно, попытаться самому реализовать эту функцию, но тут случайно узнаешь, что такая функция уже есть в библиотеке стандартных функций. Чтобы можно было объединять такие модуль ассемблер на выходе формирует файлы в специальном «объектном» формате. Потом, в соответствии с указаниями в Вашей программе, объектные модули объединяются. Для этого используется специальная программа – редактор связей (между модулями). В английском языке используется термин link – связь, соединение. Иногда редактор связей на жаргоне называют линковщиком, а процесс объединения – линковкой. Таким образом, кроме ассемблера, формирующего объектные файлы, в создании машинных кодов принимает участие и редактор связей. Причем, для микроконтроллеров выходные файлы часто в формате, «понятным» программаторами. Чаще всего используется hex формат, предложенный фирмой Intel и mot формат, предложенный фирмой Motorola.

Подчеркнем одно из достоинств ассемблера – он устраняет необходимость перевычисления адресов, если мы вставляем или удаляем куски программ, меняем адреса переходов – ассемблер просто изменяет таблицу адресов. То же самое относится и к случаю, если нам необходимо программу расположить в другой области памяти.

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

Программа записывается в виде таблицы

Одной команде соответствует одна ассемблерная строка (или одно предложение на ассемблере)

Предложение (строка) состоит из 4 полей: Метка, Код, Операнды, Комментарий.

В поле метки может находиться символическое имя (символическое имя = мнемокод) константы или метка (имя метки, идентификатор метки). Символическое имя константы определяется от поля кодов пробелом. Метка отделяется двоеточием.

В поле кода располагается символическое имя (мнемокод) команды (оператора).

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

Поле комментария начинается с ; и при трансляции оно не воспринимается.

  • Язык ассемблера позволяет писать самый быстрый и компактный код, как минимум не хуже, чем генерируемый трансляторами языков более высокого уровня, всё зависит от способностей программиста.

  • Если код программы достаточно большой, данные, которыми он оперирует, не помещаются целиком в регистрах процессора, т.е. частично или полностью находятся в оперативной памяти, то искусный программист, как правило, способен значительно оптимизировать программу по сравнению с высокоуровневыми трансляторами по одному или нескольким параметрам: скорость работы (за счёт оптимизации вычислений и/или более рационального обращения к ОП, перераспределения данных), объём кода (в том числе за счёт эффективного использования промежуточных результатов).

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

  • При программировании на ассемблере возможен непосредственный доступ к аппаратуре, в том числе портам ввода-вывода, регистрам процессора, и др.

  • Язык ассемблера применяется для создания драйверов оборудования и ядра операционной системы

  • Язык ассемблера используется для создания «прошивок» BIOS.

  • С помощью языка ассемблера создаются компиляторы и интерпретаторы языков высокого уровня, а также реализуется совместимость платформ.

  • Существует возможность исследования других программ с отсутствующим исходным кодом с помощью дизассемблера.