- •Конспект лекций по дисциплине «Программные средства аппаратно-программных комплексов»
- •Содержание
- •Архитектура пэвм
- •Пользовательские регистры
- •Организация памяти (реальный режим)
- •Элементы синтаксиса Ассемблера
- •Операторы
- •Директивы сегментации
- •Модели памяти
- •Идентификаторы, создаваемые директивой 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
- •Структура шлюза вызова
Команды сравнения строк
cmps <адрес приемника>, <адрес источника>
cmpsb
cmpsw
cmpsd
Алгоритм работы команды заключается в последовательном выполнении команды вычитания (элемент источника – элемент приемника) элементов цепочек. По результатам вычитания устанавливаются флаги zf. Адрес источника записывается в ds:si, адрес приемника в es:di. В cx указывается количество сравниваемых элементов.
Перед командой сравнения можно использовать префиксы повторения.
REP MOVS – пересылка происходит до тех пор, пока cx<>0
REPE MOVS – пересылка происходит при условии: cx<>0 и zf =1.
Применяется для поиска несовпадающих элементов.
REPNE MOVS – пересылка продолжается пока выполняется условие: cx<>0 и zf=0. Применяется для поиска совпадающих элементов в строках.
Пример.
Сравнить две строки и определить их совпадение
.data
string1 db “1 2 3 4 5 6 7 8 9”
string2 db “1 2 3 4 5 6 7 8 9”
.code
assume ds:data, es:data
main:
mov ax, @data
mov ds, ax
mov es, ax
cld
lea si, string1
lea di, string2
mov cx, 9
repe cmps string1, string2 ;сравнение пока CX<>0 и ZF=1
jcxz m1 ; вывести сообщение о совпадении если CX=0
jne m2 ; вывести сообщение о несовпадении если ZF=0
:
.
m1:
;вывод сообщения о совпадении строк
.
m2:
;вывод сообщения о несовпадении строк
Сканирование строки
Команда производит поиск некоторого значения в области памяти. Искомое значение предварительно должно быть загружено в регистр AL, AX либо в EAX. Выбор регистра должен быть согласован с размером элемента строки, в которой осуществляется поиск.
scas <адрес>
scasb
scasw
scasd
Строка должна располагаться в дополнительном сегменте по адресу ES:DI. В процессе поиска выполняется вычитание из аккумулятора очередного элемента строки и устанавливаются флаги (по результату вычитания). Можно использовать префиксы REPE и REPNE.
Пример:
.data
string db “строка”
.code
……….
……..
cld
lea di, string
mov ax, @data
mov es, ax
mov al, ‘a’
mov cx, 6
repne scas string
je mes ; zf=1 вывести сообщение о том, что символ найден
mes:
; вывод на экран сообщения
Загрузка элемента строки в аккумулятор
Команда загружает элемент строки в аккумулятор AL. Эту команду удобно использовать с помощью команд сканирования, сравнения, которые локализуют место искомого компонента строки. Строка должна быть помещена по адресу ES:SI
lods <адрес>
lodsb
lodsw
lodsd
Пример программы, которая сравнивает две строки и первый не совпавший элемент строки помещает в аккумулятор:
.data
string1 db ‘1 2 3 4 5 6,$’
string2 db ‘1 2 3 8 5 6,$’
mes db ‘элементы совпали, $’
.code
assume ds:data, es:data
main:
mov ax,@data
mov ds,ax
mov es,ax
cld
lea di, string1
lea si, string2
mov cx,6
repe cmps string1, string2 ; сравнение пока cx>0 и zf=1
jcxz m
dec si ;в регистре si адрес не совпавшего элемента строки
lods string2 ; (можно lodsb) загрузка байта 8 в аккумулятор
jmp m1
m:
mov dx, offset mes ; загрузить адрес в dx
mov ah, 9h
int 21h ; вывод сообщения «Элементы совпали»
m1:
mov ax, 4c00h
int 21h
end main
