- •Конспект лекций по дисциплине «Программные средства аппаратно-программных комплексов»
- •Содержание
- •Архитектура пэвм
- •Пользовательские регистры
- •Организация памяти (реальный режим)
- •Элементы синтаксиса Ассемблера
- •Операторы
- •Директивы сегментации
- •Модели памяти
- •Идентификаторы, создаваемые директивой 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
- •Структура шлюза вызова
Примеры работы с битовыми полями
Вставка битовой строки
Вставить в поле определенное число бит, начиная с некоторой позиции.
В примере выполняется вставка 16 бит, начиная с 8 разряда.
Фрагмент программы.
.data
pole1 dd 22000022h ; вместо нулей, начиная с 8 разряда
pole2 dd 55550000h ; вставить 5555 из pole2
.code
…….
mov eax,pole2
ror pole1,8 ; pole1=22220000
shr pole1,16 ; pole1=00002222
shld pole1,eax,16 ; pole1=22225555
rol pole1,8 pole1=22555522
…………
Извлечение битовой строки
Задача: извлечь из битовой строки 16 бит, начиная с позиции 8.
Пример фрагмента программы
.data
str dd 22555522h
.code
……….
rol str,8 ;str=55552222
mov ebx,str ;ebx=55552222
shld eax,ebx,16 ;eax=00005555
ror str,8 ;str=22555522
Команды преобразования данных
Применяются для ввода с клавиатуры цифровых данных.
xlat <адрес таблицы>
или
xlatb
Действие команды заключается в том, что она замещает значение в регистре AL байтом из таблицы, адрес которого указан операндом.
Адрес байта в таблице, который будет производить замещение содержимого AL, определяется операндом [BX+AL].
Перед выполнением команды замещения адрес строки (таблицы) должен быть загружен в регистр BX, а регистр AL – относительный адрес байта в строке. Операнд Адрес таблицы не является обязательным.
Рассмотрим пример программы, которая вместо кода ASCII числа, вводимого с клавиатуры компьютера, загружает в регистр AL само число. Код ASCII определяет место символа в таблице кодов. Он автоматически загружается в регистр AL при вводе числа с клавиатуры.
Фрагмент таблицы кодов ASCII
|
Символ |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
Дес. код символа |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
mes db “Введите число с клавиатуры”,$
tab db 48 dup (0), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
lea bx, tab ; в bx загружается адрес таблицы
mov dx, offset mes
mov ah, 9h ; вывод на экран сообщения
int 21h
Xor ax, ax ; очистка регистра ax
mov ah, 1h
Int 21h ;ожидание вода с клавиатуры
xlatb
Команды обработки строк
Команды пересылки строк
movs <адрес приемника>, <адрес источника>
movsb – пересылка байт
movsw – пересылка слов
movsd – пересылка двойных слов
Первая команда осуществляет копирование байт, слов, двойных слов в зависимости от атрибутов идентификаторов.
Число пересылаемых элементов должно быть загружено в регистр cx или ecx. Адрес источника должен быть загружен в пару DS:SI , а приемника – в регистры ES:DI.
Пример:
.data
source db “строка”
dest db 6 dup (“ “)
.code
assume ds:@data, es :@data
main:
mov ax, @data
mov ds, ax
mov es, ax
cld ; индексация адресов в сторону увеличения
lea si, source ; в si – адрес источника информации
lea di, dest ; в di – адрес приемника
mov cx, 6 ; переслать из источника в приемник 6 байт
rep movs dest, source
lea dx, dest
mov ah, 09h ;вывод на экран
int 21h
mov ax, 4с00h ; возврат в среду DOS
int 21h
end main
