- •Конспект лекций по дисциплине «Программные средства аппаратно-программных комплексов»
- •Содержание
- •Архитектура пэвм
- •Пользовательские регистры
- •Организация памяти (реальный режим)
- •Элементы синтаксиса Ассемблера
- •Операторы
- •Директивы сегментации
- •Модели памяти
- •Идентификаторы, создаваемые директивой Model:
- •Этапы создания программы на ассемблере
- •2. Создание объектного модуля (трансляция программы)
- •1 ;Программа преобразования двузначного шестнадцатеричного числа
- •3. Создание загрузочного модуля (компоновка программы)
- •4. Отладка программы
- •Определение простых типов данных:
- •Способы адресации Регистровая адресация
- •Непосредственная адресация
- •Способы адресации памяти
- •Переопределение сегмента
- •Особенности пересылки данных
- •Xch ax, bx ; команда двунаправленного обмена
- •Команды работы с адресами и указателями
- •Команды сдвига
- •Команды линейного сдвига
- •Команды циклического сдвига
- •Команды сдвига двойной точности
- •Примеры работы с битовыми полями
- •Команды преобразования данных
- •Xor ax, ax ; очистка регистра ax
- •Int 21h ;ожидание вода с клавиатуры
- •Команды обработки строк
- •Команды пересылки строк
- •Команды сравнения строк
- •Пример.
- •Сканирование строки
- •Загрузка элемента строки в аккумулятор
- •Перенос элемента из аккумулятора в строку
- •Ввод элемента цепочки из порта в строку
- •Вывод элемента цепочки в порт
- •Пример использования вложенных циклов
- •Массивы
- •Логические команды
- •Xor операнд1,операнд2
- •Логические команды поиска
- •Структуры
- •Описание шаблона структуры:
- •Заполнение шаблона:
- •Работа с полями структуры
- •Пример:
- •Шаблон записи:
- •Xor bl, mask i2 ; обнуление
- •Команды передачи управления
- •Безусловные переходы
- •Межсегментные переходы
- •Второй сегмент
- •Команды условного перехода
- •Команды условного перехода и флаги
- •Процедуры
- •Вызов процедуры
- •Ret [число]
- •Способы вызова процедуры
- •Прямой ближний вызов
- •Прямой дальний вызов
- •Косвенный ближний вызов
- •Косвенный дальний вызов процедуры
- •Организация интерфейса между процедурами, расположенными в разных модулях
- •Передачи параметров в процедуру через регистры
- •Передача параметров в процедуру через общую память
- •Макрокоманды и макроопределения
- •Особенности трансляции при получении объектного модуля
- •Где можно разместить макроопределение?
- •СвязьAssemblerс языками высокого уровня
- •Использование директивыmodelдля организации взаимодействия программ
- •Int 10h; вывод символа
- •Возврат данных в вызывающую программу
- •Пример взаимодействия программ
- •Особенностиcom-программы
- •Int 27h ; оставляем программу резидентной
- •Вызов резидентной программы
- •Запись адреса резидентной программы в область межзадачных связей
- •Iret ;возврат из процедуры
- •Int 27h ; оставляем программу резидентной
- •Вызов резидентной программы через область межзадачных связей
- •Передача параметров в резидентную программу
- •Замена существующего вектора прерывания
- •Динамическое распределение памяти
- •Пример выделения и освобождения блока памяти
- •Int 21h ;блока памяти
- •Дочерние процессы
- •Особенности структуры материнской программы
- •Активизация дочернего процесса
- •Пример материнской программы
- •Программируемый контроллер прерываний
- •Прохождение запроса на прерывание через контроллер
- •Программирование контроллера прерываний
- •Формат приказов icw
- •Формат приказов ocw
- •И fспользование таймера в программах на Assembler
- •Формирование задержки
- •Использование прерываний 8h для управления запуском программ
- •Программирование коммуникационного порта (com)
- •Микросхема uart 8250
- •Инициализация порта
- •Пример программы инициализации порта
- •Регистр статуса линии (порта)
- •Работа порта без использования механизма прерываний
- •Получение данных
- •Передача данных
- •Алгоритм работы программы приема /передачи без прерываний
- •Текст программы
- •РаботаCom– порта в режиме прерываний
- •Регистр разрешения прерываний
- •Регистр идентификации прерывания
- •Вызов обработчика прерывания
- •; Инициализация регистра разрешения прерывания (прием/передача)
- •Пример установления связи через порт и модем
- •Защищенный режим микропроцессора
- •Структура дескрипторных таблиц
- •Локальная дескрипторная таблица (ldt)
- •Структура дескриптора:
- •Структура байта ar
- •Обработкапрерываний в защищенном режиме
- •Особенности обработки ловушек
- •Шлюз задачи
- •Дескриптор tss
- •Структура шлюза вызова
Организация памяти (реальный режим)
Особенности организации памяти в реальном режиме
Память сегментирована. Каждый сегмент может занимать до 64 Кбайт оперативной памяти.
Весь диапазон оперативной памяти – 1Мбайт.
Для обращения к конкретному физическому адресу в ОП необходимо определить адрес начала сегмента и смещения внутри сегмента.
Недостатки такой адресации:
Сегменты не защищены
Программа может обращаться по любым адресам. Сегменты имеют максимальный размер 64 Кбайт.
Сегменты могут перекрываться с другими сегментами.
Формирование физического адреса:
Эффективный адрес Линейный адрес







Смещение












Страничное


BX
BP ∑
∑ преобразование.














SI
DI
x16



Физический
адрес


15 0

CS


DS





SS




(*)
FS




ES




GS

Каждый сегмент начинается на границе параграфа. При вычислении эффективного адреса участвует один из сегментных регистров. Каждый сегментный регистр имеет 16 разрядов. Умножение на 16 эквивалентно добавлению четырех младших разрядов к адресу сегмента. Таким образом, мы получим 20 разрядов и адресное пространство 1Мбайт. Если устройство страничного преобразования не используется, то физический адрес равен линейному.
Пример:
DS=015FH, Смещение=2845H
Эффективный адрес операнда в памяти:
015F0H
+
2845H
03E35H
Элементы синтаксиса Ассемблера
Ассемблер уникален для каждого типа МП. Программа может состоять из одного или нескольких сегментов. Каждая строка программы содержит одно предложение. Предложения бывают 4-х типов:
Команды МП
Макрокоманды
Директивы транслятору
Строки комментариев
Допустимые символы при написании программ:
Латинские буквы (большие и маленькие)
Цифры (от 0 до 9)
Знаки ? @ $ _ &
Разделители : , . [ ] ( ) < > { } + / * % ! “ “ \ = ≠ ^ ‘ ‘
Предложение Ассемблера формируется из лексема (- это последовательность символов имеющих смысл для транслятора).
Примеры лексем:
Идентификаторы – это последовательность допустимых символов, которые используются для обозначения имен переменных и меток (первый не должен быть цифрой);
Цепочка символов, заключенные в одинарные или двойные кавычки
Целые числа в определенной системе исчисления (если 16-ричное число начинается с буквы, то слева надо ставить 0).
Операнды – это объекты (некоторые значения, регистры или ячейки памяти), на которые действуют инструкции или директивы, либо это объекты, которые определяют или уточняют действия инструкций или директив.
Постоянные или непосредственные операнды – это число, строка, имя или выражение имеющее некоторое фиксированное значение (например, константа)
num equ 5
imd = num -2
mov al, num ; пересылка const в регистр al
add [SI], imd ; сложение, результат - по адресу SI
mov al, 5
Адресные операнды – задают физическое расположение операнда в памяти.
mov ax, es : 0025h
mov ax , [bx]
Перемещаемые операнды – это любые символьные адреса представляющие адреса в памяти
lea ax, mas ; загрузить адрес массива mas в ax
mas – перемещаемый операнд
Счетчик адреса обозначается $ - вместо знака $ транслятор подставляет текущее значение счетчика адреса, которое может быть использовано в командах МП. Счетчик адреса – значение смещения текущей машинной команды относительно начала сегмента кода.
Например:
jmp $+3 – перейти на команду, адрес которой увеличивается на 3 относительно адреса текущей команды.
Регистровый операнд – это имя регистра
mov al, 4
al – регистровый операнд
Структурные операнды – используются для доступа к конкретному Элементу структуры (записи).
Базовый и индексный регистры, которые используются для базовой/индексной адресации
Трансляторы TASM и MASM допускают использование выражений.
Выражение – это комбинация операндов и операторов, рассматриваемых как единое целое.
