
- •Трансляция программы
- •Компоновка программы
- •Система команд микропроцессора
- •32 Разрядные регистры:
- •Целочисленные арифметические команды
- •Особенности реализации микропроцессоров
- •Регистры: пользовательские и системные
- •Программа на языке ассемблера
- •Цепочечные команды
- •Осуществление переходов
- •Счётчик адреса команд
- •Безусловные переходы
- •Команда безусловного перехода jmp
- •Защищённый режим работы микропроцессора
- •Регистры управления
- •Регистры системных адресов
- •Сложные структуры данных
- •Доступ к элементам массива
- •Двумерные массивы
- •Структура
- •Сложные структуры данных 2
- •Методы работы со структурой
- •Объединение
- •Модульное программирование -1
- •Технологии программирования
- •Процедуры в языке ассемблера
- •Модульное программирование – 2 Передача аргумента через регистр
- •Передача аргументов через общую область памяти
- •Передача аргументов через стек
- •Связь ассемблера с языками высокого уровня
- •Макросредства языка ассемблера
- •Создание Windows приложений на ассемблере
- •Процесс производства микропроцессора
Методы работы со структурой
Для того, чтобы сослаться в команде на поле некоторой структуры используется специальный оператор – символ «.».
Синтаксис:
Адресное_выражение.имя_поля_структуры
Здесь,
Адресное_выражение – это идентификатор переменной некоторого структурного типа
Имя_поля_структуры – это имя поля из шаблона структуры. Это тоже адрес(смещение поля от начала структур)
Получается, что оператор «.» вычисляет выражение: (адресное_выражение)+(имя_поля_структуры)
Аналогично другим идентификаторам, определённым в программе, транслятор назначает имени типа структуры и имени переменной с типом структуры атрибут типа. Значением этого атрибута является размеры в байтах, занимаемый полями структур. Извлечь это значение можно с помощью оператора type.
Объединение
Язык ассемблера представляет возможность переопределения области памяти для работы с объектом другого имени и типа. Для этого существует специальный тип данных, который называется объединение. Это тип позволяющий трактовать одну и ту же область памяти как имеющею разные типы и имена. Описание объединения в программе напоминает описание структур. Т.е. сначала описывается шаблон в котором с помощью директив описания данных перечисляются имена и типы полей.
Синтаксис:
Имя_объединения UNION
<описание_полей>
Имя_объединения ENDS
Отличие объединения от структур в том, что при определении типа объединения память выделяется в соответствии с размером максимального элемента. Обращение к элементам объединения происходит по их именам, но при этом нужно помнить, что все поля объединения накладываются друг на друга. Одновременно работать с элементами объединения невозможно.
В качестве элементов объединения можно использовать и структуры.
Записи
Запись – это структурный тип данных состоящий из фиксированного числа элементов длиной от 1 до нескольких бит.
При описании записи для каждого элемента указывается его длина в битах и, необязательно, некоторое значение. Суммарный размер записи определяется суммой размеров её полей и не может быть более 8, 16, или 32 бит. Если суммарный размер записи меньше указанных значений, то все поля записи прижимаются к младшим разрядам. Использование записей в программе, так же как и структур, организуется в 3 этапа:
Задание шаблона записи. Т.е. определение набора битовых полей, их длин и при необходимости их инициализации.
Определение экземпляра записи.
Организация обращения к элементам записи.
Описание записи:
Имя_записи RECORD<описание_элементов>
Для использования шаблона записи в программе необходимо определить переменную с типом данной записи.
Модульное программирование -1
Один из самых существенных недостатков программ на языке ассемблера – это недостаточная наглядность. Необходимо выполнять все элементарные действия. При этом необходимо учитывать большое количество информации.
Технологии программирования
К настоящему времени наиболее популярными и жизнеспособными оказались 2 технологии программирования: структурное программирование, объектно-ориентированное программирование.
Функциональное программирование – почитать.
Последние версии языка ассемблера поддерживают объектно-ориентированное программирование.
Типичному процессу написания программы на ассемблере более всего удовлетворяет концепции структурного программирования. Для микропроцессора intel эти концепции поддерживаются на аппаратном уровне с помощью сегментации памяти и команд передачи управления.
Структурное программирование – это методология программирования базирующиеся на системном подходе к анализу проектированию и реализации ПО. Основой этой технологии составляет следующие положения:
Сложная задача разбивается на более мелкие, функционально лучше управляемые задачи (Декомпозиция). Каждая задача имеет один вход и один выход. В этом случае управляющий поток программы состоит из совокупности элементарных подзадач с ясным функциональным назначением
Простота управляющих структур, используемых в задаче. Логически задача должна состоять из минимальной, функционально полной совокупности достаточно простых управляющих структур.
Разработка программы должна вестись поэтапно. На каждом этапе должно решатся ограниченное число чётко поставленных задач с ясным пониманием их значения и роли в контексте всей задачи. Если такое понимание не достигается, то это говорит о том, что этап слишком велик и его нужно разделить на более элементарные шаги.
Модульное программирование является частью общего структурного подхода.
Концепция модульного программирования:
Функциональная декомпозиция задачи – разбиение большой задачи на ряд более мелких функционально связанных между собой модулей. Модули связанны между собой входными и выходными данными.
Модуль – это основа концепции модульного программирования каждый модуль представляет собой чёрный ящик с одним входом и одним выходом. Модульный подход позволяет безболезненно производить модернизацию программы в процессе её эксплуатации и облегчает сопровождение. Дополнительно модульный подход позволяет разрабатывать части программ одного проекта на разных языках программирования, после чего с помощью компоновочных средств объединить их в единый загрузочный модуль.
Реализуемые решения должны быть простыми и ясными. Если назначение модуля непонятно это говорит о том, что декомпозиция начальной и промежуточной задачи недостаточна.
Назначение всех переменных модуля должно быть описано с помощью комментариев по мере описание переменных.
Исходный текст модуля должен иметь заголовок в котором отражены как назначение модуля, так и его внешние связи. Заголовок – интерфейсная часть модуля. В этой части с помощью комментариев помещается следующая информация: назначение модуля, особенности функционирования, описание входных аргументов, описание выходных аргументов, использование внешних модулей и переменных, сведения о разработчике для защиты авторских прав.
Ходе разработки программы следуют предусматривать специальные блоки, учитывающие реакции на возможные ошибки данных и действия пользователя. Этот момент означает отсутствие тупиковых ветвей в алгоритме программы. Любые непредусмотренные действия пользователя должны приводить к генерации ошибочной ситуации или предупреждению о возможности возникновения такой ситуации.
Применительно к ассемблеру рассматривают несколько форм организаций управляющих связей:
С использованием механизма макро-подстановок, позволяющего изменять исходный текст программы в соответствии с некоторыми предварительно описанными параметризованными объектами. Эти объекты имеют формальный аргумент, что позволяет производить их замещение фактическими аргументами в процессе макрогенерации.
Использование механизма подпрограмм (процедур), написанных на ассемблере и структурно входящих в одну программу. В отличие от макро –команд взаимодействие процедур осуществляется на этапе выполнения программы.
Использование механизма подпрограмм написанных на разных языках программирования и соединяемых в единый модуль на этапе компоновки. Эта возможность реализуется благодаря унифицированному формату объектного модуля, однозначным соглашением о передаче аргумента и единым схемам организации памяти на этапе выполнения.
Использование механизма динамического вызова исполняемых модулей и подключение их к windows.
Основные информационные связи
Использование общих областей памяти и общих аппаратно-программных ресурсов процессора для связи модулей
Унифицированная передача аргумента при вызове модуля. Унификацию можно представить, как на уровне пользователя, так и на уровне конкретного компилятора.
Унифицированная передача аргумента при возврате управления из модуля.