- •Конспект лекций по дисциплине «Программные средства аппаратно-программных комплексов»
- •Содержание
- •Архитектура пэвм
- •Пользовательские регистры
- •Организация памяти (реальный режим)
- •Элементы синтаксиса Ассемблера
- •Операторы
- •Директивы сегментации
- •Модели памяти
- •Идентификаторы, создаваемые директивой 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
- •Структура шлюза вызова
Команды циклического сдвига
Команды циклического сдвига сохраняют значения сдвигаемых битов.
Два типа команд циклического сдвига:
команды простого циклического сдвига,
команды циклического сдвига через флаг переноса CF.
Команды простого циклического сдвига:
rol операнд, счетчик сдвигов. Циклический сдвиг влево. Сдвигаемые биты записываются в тот же операнд справа и в флаг переноса CF.




|
|
|
|
|
|
|
|
|
Флаг cf 7 6 5 4 3 2 1 0
Команды циклического сдвига могут быть полезны при взаимном обмене между младшими старшими разрядами регистра.
Например.
move eax, FFFF0000h
mov cl,16
rol eax,cl ;получим eax=0000FFFF
ror операнд, счетчик сдвигов. Циклический сдвиг вправо. Сдвигаемые биты записываются в тот же операнд слева и в флаг переноса CF.




|
|
|
|
|
|
|
|
|
7 6 5 4 3 2 1 0 Флаг cf
Пример использования команды простого циклического сдвига для подсчета числа единиц в операнде.
…………..
mov dx,0
mov cx,32 ;параметр цикла (число сдвигов)
cycl:
ror eax,1
jnc m1 ;если флаг cf=0, то на m1
inc dx ;иначе добавить в счетчик единиц
m1:
loop cycl
………..
Команды циклического сдвига через флаг переноса.
Отличие от команд простого циклического сдвига в том, что сдвигаемый бит не сразу попадает на вход операнда, а задерживается на один шаг во флаге переноса CF.
rcl операнд, счетчик_сдвигов – циклический сдвиг влево.
cf



|
|
|
|
|
|
|
|
|
7 6 5 4 3 2 1 0
rcr операнд, счетчик_команд – циклический сдвиг вправо.
cf

|
|
|
|
|
|
|
|
|
7 6 5 4 3 2 1 0 Флаг cf
Команды циклического сдвига через флаг переноса позволяют выполнить операцию рассогласования битовых последовательностей, под которой подразумевается локализация и извлечение нужного участка последовательности с записью ее в другое место.
Пример.
Извлечь из регистра EAX старшую половину с одновременным ее обнулением и записать извлеченные биты в регистр BX.
Исходное состояние: eax=f f f f a a a a
bx=0000
mov cx,16
m1:
clc ;сброс флага cf
rcl eax,1 ;в результате сдвигов получим: eax=a a a a 0000
rcl bx,1 ; bx=f f f f
loop m1
rol eax,16 ; eax=0000 a a a a

Команды сдвига двойной точности
shld операнд1, операнд2, счетчик_сдвигов – сдвиг влево двойной точности. Команда сдвигает влево биты первого операнда и заполняет его справа значениями битов из второго операнда. Значение счетчика сдвигов может быть указано непосредственно или в регистре CL. Максимальное число сдвигов-31. Значение второго операнда не меняется!













CF Операнд1 Операнд2
s

hrd
операнд1,операнд2, счетчик_сдвигов
– сдвиг вправо двойной точности. Сдвиг
происходит в первом операнде. Свободные
разряды заполняются битами из второго
операнда. Состояние операнда 2 при этом
не меняется.










Операнд2 Операнд1 CF
Пример двойного сдвига поля из 64 бит на 16 бит.
С помощью команд сдвига заместить в pole1 2 младших байта старшими байтами из pole2. (Пересылка из памяти в память запрещена!)
.data
pole1 dd 521187f5h
pole2 dd 45ff6711h
.code
…….
.386
mov cl,16
move eax, pole2
shld pole1,eax,cl ;pole1=87f545ff
shl pole2,cl ;pole2=67110000
………..




































