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

Недостатки

  • Главное преимущество ассемблера практически полностью нивелируется хорошей оптимизацией в современных компиляторах языков высокого уровня

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

  • Как правило, меньшее количество доступных библиотек по сравнению с современными индустриальными языками программирования.

  • Отсутствует переносимость программ на компьютеры с другой архитектурой и системой команд (кроме двоично-совместимых).

  1. Директивы и макрокоманды ассемблера

Директи́вы ассе́мблера — параметры (ключевые слова) в тексте программы на языке ассемблера, влияющие на процесс ассемблирования или свойства выходного файла.Синтаксис задания зависит от ассемблера.

Программа на ассемблере может содержать директивы: инструкции, не переводящиеся непосредственно в машинные команды, а управляющие работой компилятора. Набор и синтаксис их значительно разнятся и зависят не от аппаратной платформы, а от используемого транслятора (порождая диалекты языков в пределах одного семейства архитектур). В качестве «джентельменского набора» директив можно выделить следующие:

  • определение данных (констант и переменных)

  • управление организацией программы в памяти и параметрами выходного файла

  • задание режима работы компилятора

  • всевозможные абстракции (то есть элементы языков высокого уровня) — от оформления процедур и функций (для упрощения реализации парадигмы процедурного программирования) до условных конструкций и циклов (для парадигмы структурного программирования)

  • макросы

Примером таких директив может является $INCLUDE, $NoList, $List

Макрос — символьное имя, заменяющее несколько команд языка ассемблера.

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

Большинство современных ассемблеров поддерживают передачу входных параметров макросу.

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

Макросы «разворачиваются» в последовательность кода и данных во время ассемблирования.

Перед тем как использовать макрос необходимо его объявить. Часто стандартные макросы уже находятся в готовом виде в стандартных подключаемых файлах. Для их использования в программе необходимо просто подключить нужный файл.

Начинается запись макроса с директивы MACRO заканчивается директивой ENDM.

Тут можно заметить некое сходство подпрограммами. Отметим особенности и того и этого способа повышения эффективности труда программиста.

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

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

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

Достоинства

  • упрощение и ускорение написания программы

  • повышение компактности

  • повышение наглядности текста программы

Недостатки

  • использование «шаблонного кода» в то время как для каждой конкретной ситуации код, возможно, можно улучшить

  • использование одной процедуры, вызываемой N раз часто выгоднее использования вставки одного и того же макроса (генерирующего один и тот же код) N раз в текст программы

  • теряется «контроль над каждым байтом программы», именно по этой причине многие программисты не используют макросы