- •Конспект лекций по дисциплине «Программные средства аппаратно-программных комплексов»
- •Содержание
- •Архитектура пэвм
- •Пользовательские регистры
- •Организация памяти (реальный режим)
- •Элементы синтаксиса Ассемблера
- •Операторы
- •Директивы сегментации
- •Модели памяти
- •Идентификаторы, создаваемые директивой 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
- •Структура шлюза вызова
Использование прерываний 8h для управления запуском программ
Импульс от таймера поступает на вход irq0 контроллера прерываний. Контроллер вырабатывает прерывание int 8h , которое вызывает резидентную программу. Обработчик прерывания добавляет 1 в счетчик текущего времени, вызывает пустое прерывание 1Ch и прекращает работу.



В составе операционной системы имеется пустое прерывание, которое можно заполнить нужной процедурой. Например, реализовать запуск внешних программ в определенные моменты времени.
Пример.
Прерывание 1Ch выполняет запуск задачи в определенный момент времени.
alarm proc far
push ax ; сохранение регистров ax, cx, dx, так как
push cx ; после выполнения они могут быть затерты
push dx
mov ax, 0
int 1Ah ; считывание текущего счетчика времени
mov cx, count ; в cx записывается время запуска программы
cmp dx, cx ; в dx записано текущее время
jne exit ; если не равно, то выход из процедуры
int xxh ; если равно. то запуск другой резидентной программы
exit:
pop dx ; восстановление сохраненных регистров
pop cx
pop ax
iret
alarm endp
Программирование коммуникационного порта (com)
Команда записи в порт
out <порт>, al
Команда чтения порта
in al, <порт>
Порт (номер порта) может быть указан непосредственно в формате числа или загружен в регистр dx (если число превышает 255).
Регистр al должен быть загружен параметром при передаче в порт или быть приемником при чтении порта
Микросхема uart 8250
|
Относительный адрес |
Регистры |
Адрес |
In/Out |
Бит 7 |
|
0 |
|
3F8h |
Out |
0 |
|
0 |
Регистр данных приемника |
3F8h |
In |
0 |
|
0 |
Регистр делителя скорости (мл.разр) |
3F8h |
Out |
1 |
|
1 |
Регистр делителя скорости (ст.разр) |
3F9h |
Out |
1 |
|
1 |
Регистр разрешения прерываний |
3F9h |
Out |
0 |
|
2 |
Регистр идентификации прерываний |
3FAh |
In |
0 |
|
3 |
Регистр управления |
3FBh |
Out |
0 |
|
4 |
Регистр управления модемом |
3FCh |
Out |
0 |
|
5 |
Регистр статуса линии |
3FDh |
In |
0 |
|
6 |
Регистр статуса модема |
3FEh |
In |
0 |
Базовый адрес порта COM1 записан в оперативной памяти по адресу 40h:00h
Инициализация порта
Установка скорости работы порта
В таблице даны коды для установки скорости работы порта
Таблица
|
Скорость бит/с |
Порт 3F9h старший |
Порт 3F8h младший |
|
100 |
04h |
17h |
|
300 |
01h |
80h |
|
600 |
00h |
C0h |
|
1200 |
00h |
60h |
|
1800 |
00h |
40h |
|
2400 |
00h |
30h |
|
3600 |
00h |
20h |
|
4800 |
00h |
18h |
|
9600 |
00h |
0Ch |
Определение параметров сигнала (байта)

Порт позволяет сформировать 5, 6, 7, 8 – разрядный “байт”.
Для установки параметров байта используется регистр управления. Он имеет следующую структуру:

Для определения числа бит в старт-стопном сигнале используются биты 0 и 1 регистра управления:
«0 0» 5 разрядов
«0 1» 6 разрядов
«1 0» 7 разрядов
«1 1» 8 разрядов
Бит 2 – определяет количество разрядов в стоповом сигнале
«0» один стоповый бит
«1» два стоповых бита
Бит 3 – устанавливает формат сигнала на выходе порта
«0» нет бита контроля четности (9-й бит в сигнале отсутствует)
«1» есть бит контроля четности
Бит 4 – определяет правило контроля
«0» контроль на нечетность (нечетное количество единиц в байте)
«1» контроль на четность (четный паритет)
Бит 5 – может быть применен на усмотрение программиста
«0» отмена фиксации четности (нормальный режим)
«1» фиксация четности.
При установки бита 5=1 состояние бита четности зависит от бита 4:
|
Состояние бита 4 |
Бит четности в сигнале |
|
1 |
0 |
|
0 |
1 |
Бит 6 – установка перерыва связи
Бит 7 – меняет доступ к портам, имеющим одинаковые адреса (см таблицу)
