- •Конспект лекций по дисциплине «Программные средства аппаратно-программных комплексов»
- •Содержание
- •Архитектура пэвм
- •Пользовательские регистры
- •Организация памяти (реальный режим)
- •Элементы синтаксиса Ассемблера
- •Операторы
- •Директивы сегментации
- •Модели памяти
- •Идентификаторы, создаваемые директивой 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
- •Структура шлюза вызова
Int 27h ; оставляем программу резидентной
cseg ends
end begin
Вызов резидентной программы
Для вызова резидентной программы достаточно ввести в нужное место кода транзитной программы команду int 70h.
Размещение векторов прерывания в оперативной памяти
Таблица векторов прерываний Обработчик прерывания


Запись адреса резидентной программы в область межзадачных связей
Резидентную программу можно оформить так, что адрес её будет находиться в области межзадачных связей, начало которой 40h:0f0h.
Размер области 16 байт.
В резидентной программе следует предусмотреть:
Исполняемую часть надо закончить директивой RET
Вызов программы с помощью команды CALL
Для записи адреса процедуры в область межзадачных связей используются следующие команды:
Setup:
mov ax, 40h
mov es,ax
mov es:0f0h, offset routine ;смещение в сегменте
mov es:0f2h, cs ;адрес сегмента
mov dx, finish ; оставляем программу резидентной
int 27h
Шаблон резидентной программы в таком случае имеет вид:
cseg segment
org 100h
assume cs:cseg, ds:cseg, ss:cseg
begin: jmp short setup
routine proc far ;начало процедуры
push ds ; сохранение регистров
…; здесь тело процедуры
pop ds ; восстановление регистров
Iret ;возврат из процедуры
finish equ $ ; определение размера программы
routine endp
Setup:
mov ax, 40h
mov es,ax
mov es:0f0h, offset routine ;смещение в сегменте
mov es:0f2h, cs ;адрес сегмента
;оставляем программу резидентной
mov dx, finish ; размер программы
Int 27h ; оставляем программу резидентной
cseg ends
end begin
Вызов резидентной программы через область межзадачных связей
В вызывающей программе следует ввести команды:
mov ax, 40h
mov es,ax
call dword ptr es:0f0h
Передача параметров в резидентную программу
Если резидентной программе требуются параметры или адреса параметров, то они записываются транзитной программой в обусловленные ячейки области межзадачных связей.
Перед записью параметров транзитная программа должна загрузить в регистр es адрес области межзадачных связей, затем записать в выбранные ячейки области межзадачных связей адрес массива параметров и содержимое регистра ds (адрес сегмента данных).
Резидентная программа должна настроить регистр es на область межзадачных связей и взять параметры из обусловленных ячеек памяти.
Примеры
В транзитной программе:
mov ax, 40h
mov es, ax
mov es:0f4h, offset mas ; адрес массива
mov es:0f6h, ds ; адрес сегмента данных
В резидентной программе:
mov ax, 40h
mov es, ax
mov si, es:0f4h ; загружаем адрес массива
mov ds, es:0f6h ; загружаем адрес сегмента данных
mov ax, [si] ; в ax – первое слово массива
mov bx, [si+2]
…….
;и так далее
Замена существующего вектора прерывания
Программист должен обеспечить следующее:
выделить буфер для временного хранения существующего вектора прерывания
в установочной части резидентной программы записать вектор в эту буферную память
при выходе из процедуры предусмотреть восстановление старого вектора прерывания

Пример:
В примере рассмотрена замена существующего вектора прерывания с номером 1ch другим вектором с последующим восстановлением после вызова резидентной программы.
cseg segment
org 100h
assume cs:cseg, ds:cseg, ss:cseg
begin:
jmp setup
routine proc far
jmp m1
p_cs dw 0 ; буфер для хранения
p_ip dw 0 ; существующего вектора
m1:
push ds
…; здесь тело процедуры
cli ; запрещение прерываний на время выполнения операторов
; восстановление старого вектора прерывания
mov dx, p_ip ; загружаем старый вектор
mov ax, p_cs ; из памяти в регистры dx
mov ds,ax ; и ds
mov al,1ch ; прерывание 1ch в регистр al
mov ah, 25h ;
int 21h
sti ; разрешение прерываний
pop ds
iret
finish equ $
routine endp
setup:
mov al,1ch ; получение
mov ah,35h ; вектора
int 21h ; прерывания в регистры es и bx
mov p_ip, bx ; запоминаем старый
mov p_cs, es ; вектор 1ch
mov bx, offset routine
mov al, 1ch ; установка нового
mov ah, 25h ; вектора
int 21h ;1ch
mov dx, finish ; оставляем
int 27h ; программу резидентной
cseg ends
end begin
