Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессоры Лекции.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
65.84 Кб
Скачать

Методы работы со структурой

Для того, чтобы сослаться в команде на поле некоторой структуры используется специальный оператор – символ «.».

Синтаксис:

Адресное_выражение.имя_поля_структуры

Здесь,

Адресное_выражение – это идентификатор переменной некоторого структурного типа

Имя_поля_структуры – это имя поля из шаблона структуры. Это тоже адрес(смещение поля от начала структур)

Получается, что оператор «.» вычисляет выражение: (адресное_выражение)+(имя_поля_структуры)

Аналогично другим идентификаторам, определённым в программе, транслятор назначает имени типа структуры и имени переменной с типом структуры атрибут типа. Значением этого атрибута является размеры в байтах, занимаемый полями структур. Извлечь это значение можно с помощью оператора type.

Объединение

Язык ассемблера представляет возможность переопределения области памяти для работы с объектом другого имени и типа. Для этого существует специальный тип данных, который называется объединение. Это тип позволяющий трактовать одну и ту же область памяти как имеющею разные типы и имена. Описание объединения в программе напоминает описание структур. Т.е. сначала описывается шаблон в котором с помощью директив описания данных перечисляются имена и типы полей.

Синтаксис:

Имя_объединения UNION

<описание_полей>

Имя_объединения ENDS

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

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

Записи

Запись – это структурный тип данных состоящий из фиксированного числа элементов длиной от 1 до нескольких бит.

При описании записи для каждого элемента указывается его длина в битах и, необязательно, некоторое значение. Суммарный размер записи определяется суммой размеров её полей и не может быть более 8, 16, или 32 бит. Если суммарный размер записи меньше указанных значений, то все поля записи прижимаются к младшим разрядам. Использование записей в программе, так же как и структур, организуется в 3 этапа:

  1. Задание шаблона записи. Т.е. определение набора битовых полей, их длин и при необходимости их инициализации.

  2. Определение экземпляра записи.

  3. Организация обращения к элементам записи.

Описание записи:

Имя_записи RECORD<описание_элементов>

Для использования шаблона записи в программе необходимо определить переменную с типом данной записи.

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

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

Технологии программирования

К настоящему времени наиболее популярными и жизнеспособными оказались 2 технологии программирования: структурное программирование, объектно-ориентированное программирование.

Функциональное программирование – почитать.

Последние версии языка ассемблера поддерживают объектно-ориентированное программирование.

Типичному процессу написания программы на ассемблере более всего удовлетворяет концепции структурного программирования. Для микропроцессора intel эти концепции поддерживаются на аппаратном уровне с помощью сегментации памяти и команд передачи управления.

Структурное программирование – это методология программирования базирующиеся на системном подходе к анализу проектированию и реализации ПО. Основой этой технологии составляет следующие положения:

  1. Сложная задача разбивается на более мелкие, функционально лучше управляемые задачи (Декомпозиция). Каждая задача имеет один вход и один выход. В этом случае управляющий поток программы состоит из совокупности элементарных подзадач с ясным функциональным назначением

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

  3. Разработка программы должна вестись поэтапно. На каждом этапе должно решатся ограниченное число чётко поставленных задач с ясным пониманием их значения и роли в контексте всей задачи. Если такое понимание не достигается, то это говорит о том, что этап слишком велик и его нужно разделить на более элементарные шаги.

Модульное программирование является частью общего структурного подхода.

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

  1. Функциональная декомпозиция задачи – разбиение большой задачи на ряд более мелких функционально связанных между собой модулей. Модули связанны между собой входными и выходными данными.

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

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

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

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

  6. Ходе разработки программы следуют предусматривать специальные блоки, учитывающие реакции на возможные ошибки данных и действия пользователя. Этот момент означает отсутствие тупиковых ветвей в алгоритме программы. Любые непредусмотренные действия пользователя должны приводить к генерации ошибочной ситуации или предупреждению о возможности возникновения такой ситуации.

Применительно к ассемблеру рассматривают несколько форм организаций управляющих связей:

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

  2. Использование механизма подпрограмм (процедур), написанных на ассемблере и структурно входящих в одну программу. В отличие от макро –команд взаимодействие процедур осуществляется на этапе выполнения программы.

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

  4. Использование механизма динамического вызова исполняемых модулей и подключение их к windows.

Основные информационные связи

  1. Использование общих областей памяти и общих аппаратно-программных ресурсов процессора для связи модулей

  2. Унифицированная передача аргумента при вызове модуля. Унификацию можно представить, как на уровне пользователя, так и на уровне конкретного компилятора.

  3. Унифицированная передача аргумента при возврате управления из модуля.