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

1.Порядок

а) Инструкции для пользователя

б) К созданному описанию добавьте вслед за каждым абзацем блоки кода, реализующие функции, описанные в этом абзаце.

Работа программиста состоит из двух частей: разработать приложение и сделать возможным дальнейшее сопровождение программы.

2. Подходы при написании комментариев:

1) перед каждой функцией или методом размещается одно или два предложения со следующей информацией:

· что делает программа;

· возникающие предположения о программе;

· содержание входных параметров;

· содержание выходном параметров в случае успешного или неудачного завершения;

· все возможные выходные значения;

2) перед каждой не очевидной частью функции поместить объяснение действия;

3) любой алгоритм нужно подробно описать;

4) любая нетривиальная ошибка, устраненная в коде, должна комментироваться;

5) правильно размещенные операторы диагностики, проверки условий, а также соглашения об именах переменных являются комментариями сами по себе;

6) писать комментарии так, будто сами собираетесь заниматься его поддержкой через пять лет;

7) если возникла мысль «это хитро сделано» нужно переписать данную функцию;

3. Читайте код

4. Разлагайте сложные проблемы на задачи меньшего размера

5. Используйте язык ассемблера полностью

6. Проблема должна быть хорошо продумана перед тем, как она сможет быть решена

7. Программа должна писаться не менее двух раз

8. Оптимизация программ на языке ассемблера

· Подбор оптимального алгоритма

· Подстройка программы под конкретное оборудование;

· Замена ассемблерных команд на машинный код.

Стиль программирования - архитектура исходного кода, внешнее оформление, но и использование констант, разбиения кода на функции или процедуры, способы вызова функций и процедур, согласованность структур, их потенциал к расширению, гибкость алгоритмов и т.д.

9. Повышение читаемости, удобства и красоты программы.

a) После каждой строки, где меняется значение регистра, указывать в комментарии, что в этом регистре

b) Отступы делать не просто для циклов и ветвлений, но и для выделения любых ресурсов.

c) Подряд ищущих строк должно быть не более пяти-семи. Для таких блоков часто можно сделать резюмирующий комментарий.

d) В отдельные функции выделять логически связанные куски кода.

e) Давать осмысленные имена всему. Никогда не использовать числовые константы и безымянные метки

f) Структуризация проекта. Проект нужно делить на функции, модули (файлы), пакеты (папки) и подсистемы.

g) инкапсуляция

h) не использовать прописные буквы с мнемониками инструкций и именами регистров.

Комментарии в программе

Комментарии отделяются от исполняемой строки символом ; . При этом все, что записано после символа точка с запятой и до конца строки, является комментарием. Использование комментариев в программе улучшает ее ясность, особенно там, где назначение набора команд непонятно. Комментарий может содержать любые печатные символы, включая пробел. Комментарий может занимать всю строку или следовать за командой на той же строке.

Модульное программирование

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

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

Концепция модульного программирования

1. Принцип утаивания информации Парнаса. Внешней среде не имеет значения что и как работает внутри модуля.

2. Аксиома модульности Коуэна. Модуль должен удовлетворять следующим условиям:

· блочность организации

· синтаксическая обособленность

· семантическая независимость

· общность данных

· полнота определения

3. Сборочное программирование Цейтина. Модули — это программные кирпичи, из которых строится программа. Существуют три основные предпосылки к модульному программированию:

· стремление к выделению независимой единицы программного знания.

· потребность организационного расчленения крупных разработок;

· возможность параллельного исполнения модулей.

Модуль, спецификация модуля

Несколько определений модуля.

· Модуль — это совокупность команд, к которым можно обратиться по имени.

· Модуль — это совокупность операторов программы, имеющая граничные элементы и идентификатор (возможно агрегатный).

Функциональная спецификация модуля должна включать:

· синтаксическую спецификацию его входов, которая должна позволять построить на используемом языке программирования синтаксически правильное обращение к нему;

· описание семантики функций, выполняемых модулем по каждому из его входов.

Разновидность модулей

Существуют три основные разновидности модулей:

1) Функциональные модули - реализуют одну какую-либо функцию.

2) Информационные модули - реализующие несколько операций над одной и той же структурой данных

3) Логические модули – объединяют два предыдущих.

45. Характеристики модуля:

1) размера модуля;

В модуле должно быть 7 (+/-2) чанков.

Чанк — наборы фактов и связей между ними, запоминаемые и извлекаемые как единое целое.

2) прочность модуля;

Прочность - мера независимости его частей; чем выше - тем лучше.

Типы прочности (связности), приведенные ниже:

· Функциональная - реализует одну функцию и не может быть разбит на 2 модуля.

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

· Информационная – модули работают с одной структурой данных.

3) сцепление модуля с другими модулями;

Сцепление — мера относительной независимости модуля от других модулей.

Типы сцепления:

· Независимые модули (нулевое) — каждый модуль автономен.

· Сцепление по данным — это сцепление, когда данные передаются модулю, как значения его параметров.

4) рутинность - это независимость модуля от предыдущих обращений к нему

Модули бывают дополнительные и главные, только в главном модуле выполняется:

1. Инициализация сегментов стека директив. Stack

2. Инициализация сегментов данных

3. Только он имеет метку start – начало программы.

Исходный текст модуля должен иметь заголовок, в котором указывается:

· назначение и особенности функционирования модуля;

· описание входных данных;

· описание выходных данных.

Все имена, описанные в модуле, локализуются в нём.

Каждый модуль может оперировать двумя типами идентификаторов: внутренними и внешними, которые определены или инициализированы в другом модуле.

Extern <имя>:<тип>,…,<имя >:<тип>.

Для переменных: byte, word, dword, … tbyte

Для числовых констант: abs (определяются через директиву присваивания =)

Для меток: near,far

Для процедур: proc

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

Public <имя>, …,<имя>

Наши рекомендации