- •Конспект лекций по дисциплине «Программные средства аппаратно-программных комплексов»
- •Содержание
- •Архитектура пэвм
- •Пользовательские регистры
- •Организация памяти (реальный режим)
- •Элементы синтаксиса Ассемблера
- •Операторы
- •Директивы сегментации
- •Модели памяти
- •Идентификаторы, создаваемые директивой 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
- •Структура шлюза вызова
Где можно разместить макроопределение?
В тексте модуля, но до объявления сегментов.
В отдельном файле, который создает программист. Этот файл должен быть вставлен транслятором с помощью директивы INCLUDE <имя>.
Использование макробиблиотек.
Пример программы, использующей макрокоманды
promt macro mes
lea dx, mes
mov ah, 09h
int 21h
endm
stack segment para stack 'stack'
dw 32 dup(?)
stack ends
data segment para 'data'
mes1 db 'test of macro', '$'
mes2 db 'assembler', '$'
data ends
cseg segment para 'code'
begin proc far
…
promt mes1 ; вывод первого сообщения
…
promt mes2 ; вывод второго сообщения
ret
begin endp
cseg ends
end begin
СвязьAssemblerс языками высокого уровня
Для взаимодействия программы на языке Assembler с программой на Паскале можно использовать:
Операторы типа inline
Ассемблерные вставки
Внешние процедуры
Операторы типа inline
Пример:
const
n=7;
massiv: array[1..n] of integer = (1,2,3,2,17,7,2);
function max(var mas, n:integer):integer;
inline ($59/ $5E/ … $8B/$C3); набор машинных команд
begin
writeln('Максимум', max(massiv,N) );
readln;
end.
Ассемблерные вставки
Пример:
…
asm
mov ah,0
int 16h
end;
…
Встроенный Assembler обладает ограниченными возможностями.
Требования к программе на языкеAssembler
Написать процедуру ближнего или дальнего типа.
Объявить эту процедуру с помощью директивы public.
Произвести компиляцию для получения объектного файла:
TASM/zi имя
Требования к программе на языкеPascal
Нужно объявить вызываемую процедуру как внешнюю
Procedure <имя> [пар]; external;
Необходимо указать путь к файлу, в котором содержится модуль программы на ассемблере: {$L <путь>}.
Чтобы программа могла работать под отладчиком, ввести в программу директиву {$D+}
Пример:
Program mxpas;
{$D+}
uses crt;
procedure asmproc (ch:char; x, y, kol:integer); external;
{$L <файл на ассемблере>}
begin
clrscr;
asmproc ('a',1,2,3);
end.
Передача параметров изPascal-программы в программу на ассемблере
При обращении к внешней процедуре на ассемблере фактические параметры записываются в стек в той последовательности, в какой они указаны в операторе. Программа на Assembler должна взять параметры, учитывая следующие соглашения:
Сохранить содержимое регистра BP в стеке.
Записать в регистр BP адрес вершины стека
Все обращения к стеку следует выполнять, используя базовый регистр BP
При возврате управления в программу на Pascal программа на Assembler должна выполнить очищение стека, а именно: восстановить содержимое регистра BP, удалить из стека переданные процедуре аргументы.
|
|
|
B |
|
CS |
|
IP |
|
PAR4 |
|
PAR3 |
|
PAR2 |
|
PAR1 |
[BP+12] – чтение PAR1
Использование директивыmodelдля организации взаимодействия программ
При использовании директивы программа на Assembler может использовать имена переменных, объявленных в Pascal-программе.
Пример программы на Assembler с директивой model:
masm
model large pascal
.stack 256
.code
main:
asmproc proc near chr:byte, x:word, y:word, kol:word
public asmproc
mov dh, byte ptr y
mov dl, byte ptr x
m
ov
ah, 02h
int 10h ; позиционирование курсора в нужное место
mov ah, 09h
mov al, chr
mov bl, 07h
xor bh, bh
mov cx, kol

P