- •Архитектура пэвм
- •Пользовательские регистры
- •Регистры общего назначения
- •Сегментные регистры
- •Регистры состояния и управления
- •Регистры защищенного режима:
- •Организация памяти (реальный режим)
- •Элементы синтаксиса Ассемблера
- •Операторы
- •Директивы сегментации
- •Модели памяти
- •Идентификаторы, создаваемые директивой Model:
- •Этапы создания программы на ассемблере
- •2. Создание объектного модуля (трансляция программы)
- •3. Создание загрузочного модуля (компоновка программы)
- •4. Отладка программы
- •Определение простых типов данных:
- •Способы адресации Регистровая адресация
- •Непосредственная адресация
- •Способы адресации памяти
- •Переопределение сегмента
- •Особенности пересылки данных
- •Xch ax, bx ; команда двунаправленного обмена
- •Команды работы с адресами и указателями
- •Команды сдвига
- •Команды линейного сдвига
- •Команды циклического сдвига
- •Команды сдвига двойной точности
- •Примеры работы с битовыми полями
- •Команды преобразования данных
- •Xor ax, ax ; очистка регистра ax
- •Int 21h ;ожидание вода с клавиатуры
- •Команды обработки строк
- •Команды пересылки строк
- •Команды сравнения строк
- •Пример.
- •Сканирование строки
- •Загрузка элемента строки в аккумулятор
- •Перенос элемента из аккумулятора в строку
- •Ввод элемента цепочки из порта в строку
- •Вывод элемента цепочки в порт
- •Пример использования вложенных циклов
- •Массивы
- •Логические команды
- •Xor операнд1,операнд2
- •Логические команды поиска
- •Структуры
- •Описание шаблона структуры:
- •Заполнение шаблона:
- •Работа с полями структуры
- •Пример:
- •Шаблон записи:
- •Xor bl, mask i2 ; обнуление
- •Команды передачи управления
- •Безусловные переходы
- •Межсегментные переходы
- •Второй сегмент
- •Команды условного перехода
- •Команды условного перехода и флаги
- •Процедуры
- •Процедура в начале кодового сегмента
- •Процедура в конце кодового сегмента
- •Процедура в теле сегмента
- •Вызов процедуры
- •Ret [число]
- •Способы вызова процедуры
- •Прямой ближний вызов
- •Прямой дальний вызов
- •Косвенный ближний вызов
- •Косвенный дальний вызов процедуры
- •Организация интерфейса между процедурами, расположенными в разных модулях
- •Передачи параметров в процедуру через регистры
- •Фрагмент модуля 2
- •Возврат результата из процедуры
- •Макрокоманды и макроопределения
- •Особенности трансляции при получении объектного модуля
- •Где можно разместить макроопределение?
- •Связь Assembler с языками высокого уровня
- •Операторы типа inline
- •Ассемблерные вставки
- •Внешние процедуры Операторы типа inline
- •Ассемблерные вставки
- •Требования к программе на языке Assembler
- •Требования к программе на языке Pascal
- •Передача параметров из Pascal-программы в программу на ассемблере
- •Использование директивы model для организации взаимодействия программ
- •Int 10h; вывод символа
- •Возврат данных в вызывающую программу
- •Пример взаимодействия программ
- •Особенности com-программы
- •Пример программы типа .Com
- •Резидентные программы
- •Формат резидентной программы
- •Собственно программу.
- •Функцию записи в оп адреса точки входа программы для последующего вызова.
- •Функцию, которая оставляет программу резидентной.
- •Пример резидентной программы типа .Com
- •Iret ;возврат из процедуры
- •Int 27h ; оставляем программу резидентной
- •Вызов резидентной программы
- •Запись адреса резидентной программы в область межзадачных связей
- •Iret ;возврат из процедуры
- •Int 27h ; оставляем программу резидентной
- •Вызов резидентной программы через область межзадачных связей
- •Передача параметров в резидентную программу
- •Замена существующего вектора прерывания
- •Динамическое распределение памяти
- •Пример выделения и освобождения блока памяти
- •Int 21h ;блока памяти
- •Дочерние процессы
- •Особенности структуры материнской программы
- •Активизация дочернего процесса
- •Пример материнской программы
- •; Запуск дочернего процесса
- •Int 21h ; запуск дочернего процесса
- •Int 21h ; выход в ос (завершение программы)
- •Получение и анализ кода возврата в материнской программе
- •Int 21h ; код возврата передается через регистр al
- •Передача кода возврата из дочерней программы
- •Прерывания
- •Программируемый контроллер прерываний
- •Прохождение запроса на прерывание через контроллер
- •Программирование контроллера прерываний
- •Формат приказов icw
- •Формат приказов ocw
- •И f спользование таймера в программах на Assembler
- •Формирование задержки
- •Использование прерываний 8h для управления запуском программ
- •Программирование коммуникационного порта (com)
- •Микросхема uart 8250
- •Инициализация порта
- •Пример программы инициализации порта
- •Регистр статуса линии (порта)
- •Работа порта без использования механизма прерываний
- •Получение данных
- •Передача данных
- •Алгоритм работы программы приема /передачи без прерываний
- •Текст программы
- •Работа com – порта в режиме прерываний
- •Регистр разрешения прерываний
- •Регистр идентификации прерывания
- •Вызов обработчика прерывания
- •Управление модемом через порт
- •Пример установления связи через порт и модем
- •Защищенный режим микропроцессора
- •2. Регистры отладки
- •3. Регистры управления Регистры системных адресов
- •Структура дескрипторных таблиц
- •Локальная дескрипторная таблица (ldt)
- •Структура дескриптора:
- •Структура байта ar
- •Обработка прерываний в защищенном режиме
- •Особенности обработки ловушек
- •Шлюз задачи
- •Дескриптор tss
- •Структура шлюза вызова
-
Определение простых типов данных:
Формат директивы определения типа данных:
[имя] Dx выражение
х – определяет тип данных
[имя] – не обязательно
В качестве директив используются:
db (1байт)
dw (2 байта)
dd (4 байта)
dq (5 байт)
df (6 байт)
dt (10 байт)
Примеры:
db ?
db ‘PERSONAL’
db 32
db 20h
db 0010000B
db 10 dup (0) ; в память будет записано десять нулей
db 0ffh, 0f0h ; в памяти будет записано: FF F0
Для объявления константы используется 2 директивы:
KILO EQU 1024 ; килобайт представляет собой 1024
Константу объявленную EQU переопределять нельзя.
KILO=1024 ; можно по ходу программы переопределять константу
Часто в программе требуется найти длину массива:
mes DB ‘ЖДИТЕ’
meslen EQU $-mes ; вычисление константы
$ - возвращает адрес последнего байта, а метка mes – адрес начала массива
-
Способы адресации Регистровая адресация
Регистры могут быть 8-битовые, 16-битовые или 32-битовые
Примеры:
mov ah, bh ; пересылка байта
mov di, bx ; пересылка слова
mov edx, ebx ; пересылка двойного слова
mov ax, bl ; ошибка (смещение типов)
Непосредственная адресация
В качестве операнда выступает константа.
Примеры:
mov eax,-2 ;расширение 2 до 32 разрядов
mov ds,60h ; ошибка (прямая загрузка запрещена)
.
Способы адресации памяти
В следующих примерах используем объявленный ниже сегмент данных:
.data
b1 db 1
w1 dw 0
dw1 dd 3
ab db 1,2,3
aw2 dw 10, 20
Прямая адресация– это адресация с использованием имени.
-
Регистровая и прямая адресация
mov dw1, ecx
mov сх, w1 ; сх обнуляется
-
Прямая и непосредственная адресация
mov w1, 23h
-
Косвенная адресация
Адрес указывается в регистре. В качестве регистров можно использовать все индексные регистры.
mov [bx], al ; al загрузить по адресу, который находится в
:регистре bx
mov [si], ecx
mov dх, [ecx]
-
Прямая адресация с индексированием
mov ab[di],0 ;Обнулить байт по адресу ab+[di]
mov sp,aw2[ecx]
-
Косвенная адресация по базе
mov byte ptr [bx]+2, 12 ;записать по адресу [bx]+2 число 12
mov byte ptr 2[bx], 12 ;можно так
mov dx, [eax+2]
mov [ebp*4+2], esi
-
Косвенная по базе с индексированием
mov al, [bp] + [si]
mov word ptr [eax+esi], 4
mov ebp, [ecx+edi*4]
mov ab3 [ebx+edx+2], dh
mov cx, [eax] [ebp+4] ; операнд находится в стеке
Переопределение сегмента
Следует имя регистра сегментации в операнде указать явно
mov byte ptr es:[800h+di],20h
-
Особенности пересылки данных
-
Нельзя пересылать из одной области памяти в другую. Необходимо использовать буферный регистр:
mov al, mas
mov mas1, al
-
Нельзя загружать сегментный регистр непосредственно из памяти, следует использовать промежуточный регистр или стек:
mov ax, 0000h
mov ds, ax
push ax
pop ds
-
Нельзя пересылать из одного регистра сегментации в другой. Нужен либо промежуточный регистр, либо стек:
push cs
pop ds ; читает из стека и записывает в DS
-
При пересылке следует учитывать размер операнда
mov ax, word ptr [bx] ; пересылка слова
inc word ptr [bx]
mov byte ptr [mas+1], 0ffh ;записать байт (ff) по адресу