- •Конспект лекций по дисциплине «Программные средства аппаратно-программных комплексов»
- •Содержание
- •Архитектура пэвм
- •Пользовательские регистры
- •Организация памяти (реальный режим)
- •Элементы синтаксиса Ассемблера
- •Операторы
- •Директивы сегментации
- •Модели памяти
- •Идентификаторы, создаваемые директивой 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
- •Структура шлюза вызова
Безусловные переходы
Синтаксис безусловного перехода:
jmp [модификатор]<адрес перехода>
Адрес перехода – это метка или адрес области памяти (имя регистра), где находится указатель перехода.
Безусловные переходы могут быть выполнены как внутри сегмента, так и между сегментами.
Внутрисегментные переходы.
Возможны варианты:
- прямой короткий;
- прямой;
- косвенный.
Прямой короткий внутрисегментный переход разрешает передавать управление только в определенном диапазоне, когда расстояние от адреса команды jmp до адреса перехода не превышает -128 или +127 байт.
Длина машинной команды при прямом коротком внутрисегментном переходе - 2 байта. Первый байт – код операции, второй - вычисляется транслятором как разность между значением смещения команды, следующей за jmp и значением адреса перехода.
Если метка расположена до команды jmp , то транслятор формирует короткую команду перехода, которая вычитает из счетчика команд разность между адресами.
Если метка расположена ниже команды jmp , то транслятор не может сам определить, что переход короткий. В этом случае используется модификатор short ptr. Команда перехода прибавит к показанию счетчика команд разность между адресами.
Примеры:
Метка выше команды
m1:
………..
… 30-40 команд
……….
jmp m1
………..
Метка ниже команды
jmp short ptr m1
…….
…; 30-40 команд
……..
m1:
…….
Прямой внутрисегментный переход. Длина машинной команды - 3 байта, из которых 2 байта определяют диапазон адресов команд, на которые можно передать управление внутри сегмента. Это значит, команда позволяет передавать управление в пределах адресного пространства сегмента 64к.
Пример:
m1:
…..
mov ax, bx
…
jmp m1
Косвенный внутрисегментный переход. Адрес перехода должен быть записан либо в регистр, либо в области памяти.
Примеры
Адрес метки записан в регистре
lea bx,m1
jmp bx
…
m1:
…..
Адрес метки в области памяти
.code
……….
jmp addr ;косвенный переход на метку m1
…
m1:
mov ax,bx
…………
.data
addr dw m1 ; запись адреса метки в память
…
В сегменте данных выделено слово, в которое записывается адрес метки.
При косвенном переходе имеется возможность модификации указателя, что позволяет команде передавать управление на разные метки.
Пример
.data
addr dw m1
dw m2
.code
……..
mov si,0
jmp addr [si]
………..
mov si,2
jmp addr [si]
……….
m1:
………..
m2:
……….
Рассмотрим пример, когда следует применять модификатор при ближнем переходе.
.data
addr dw m1
…………..
.code
……..
lea si,addr
jmp near ptr [si]
………..
m1:
В данном примере адрес ячейки памяти с адресом метки передается транслятору неявно и он не может определить, какой следует выполнить переход – внутренний или внешний.D ‘njv ckexft
Межсегментные переходы
Прямой межсегментный переход.
Размер команды - 5 байт, из которых два байта составляют смещение в сегменте и два байта значение сегментной составляющей адреса.
Метки, которые участвуют в передаче управления, должны быть объявлены с помощью директивы label far.
Пример
Первый сегмент
seg1 segment
……………
jmp far ptr m2
…
m1 label far
…
seg1 ends
