- •Конспект лекций по дисциплине «Программные средства аппаратно-программных комплексов»
- •Содержание
- •Архитектура пэвм
- •Пользовательские регистры
- •Организация памяти (реальный режим)
- •Элементы синтаксиса Ассемблера
- •Операторы
- •Директивы сегментации
- •Модели памяти
- •Идентификаторы, создаваемые директивой 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
- •Структура шлюза вызова
Операторы
Операнд команды Ассемблера может быть выражением, представляющим комбинацию операндов и операторов Ассемблера
Во время трансляции программы значения выражения вычисляются по стандартным правилам, а результат в виде константы подставляется в объектный код программы.
Операторы, которые поддерживают транслятор:
Арифметические операторы:
унарные: + , - ;
бинарные: +, -, * , / , mod.
Пример
tab equ 50 ; имени tab присваивается константа 50
size equ 2
…….
mov cx,tab/size ; записать в регистр cx результат деления констант нацело.
Операторы сдвига – сдвиг выражения на указанное количество разрядов:
shl – влево,
shr – вправо.
Формат оператора:
<Выражение> <Оператор> <Число сдвигаемых разрядов>
Пример:
mask equ 10111011b
mov al, mask shr 3 ; Результат в регистре al = 00010111
Операторы сравнения – предназначены для формирования логических выражений.
Формат оператора:
<Выражение 1> <Оператор> <Выражение 2>
Операторы сравнения:
eq – равно
ne – не равно
le <=
gt > для операндов со знаками
ge >=
l
t
<
Результат сравнения «истина» соответствует логической единице, а «лож» - логическому нулю. Логическая единица отображается значением, все биты которого равны 1 (0FFh), логический ноль – значением, все биты которого равны нулю (00h).
Пример:
tab equ 30
mov al, tab ge 50 ; al = 00h – ложь
cmp al,0
je m1
….
m1:
В примере оператор проверяет константу tab (больше или равна числу 50). Т.к. результат сравнения – «лож», то управление с помощью команды условного перехода передается на метку m1.
Логические операторы not, and, or, xor выполняют над выражениями поразрядные операции.
Формат операторов:
not <Выражение>
and notxor

[not] <Выражение > < > [not] <Выражение >
Пример:
Flag equ 10010011b
mov al, Flag xor 01b ;Результат в al = 10010010b
Индексный оператор – используется при индексной адресации. Транслятор выполняет сложение операнда, указанного в скобках с операндом вне скобок (происходит обращение по вычисленному адресу).
Пример
mas dw 48, 56, 67
……………………
mov si,2
mov ax, mas[SI] ;Пересылка слова 56 по адресу mas+(si) в регистр ax
Оператор переопределения типа, ptr.
Тип может принимать значения:
байт (byte), word (слово), dword (двойное слово), qword (8 байт), tbyte (10 байт).
near и far – определяет близкий или дальний переход.
Форат оператора
<Тип> ptr <Выражение>
Пример.
var dd 0abcd1234h ; двойное слово в сегменте данных
mov al, byte ptr var+1 ;в регистр al загрузить байт (число cdh)
Оператор переопределения сегмента (двоеточие).
Когда в команде адресации используется сегмент не по умолчанию, требуется записать в явном виде имя сегмента, в котором загружен сегментный адрес.
Фрагмент программы:
.code
…….
jmp m1
ind db 5 ; поле данных в сегменте команд
m1:
mov al, cs:ind ;адрес начала сегмента кода в регистре cs
;в регистр al загрузить число 5.
Оператор получения сегментной составляющей адреса - seg.
Оператор возвращает сегментный адрес для выражения в качестве которого может выступать: метка, переменная, имя сегмента, имя группы сегментов, некоторое символическое имя.
Пример:
dataseg segment
mas dw 0
dataseg end
codeseg segment
mov ax, seg mas
mov ds, ax ; в ds загружается адрес начала сегмента данных
Оператор получения смещения в сегменте памяти некоторого выражения – offset.
Смещение – это адрес операнда относительно начала сегмента.
Пример
.data ; начало сегмента данных
mas dw 5 ; в сегменте данных число 5
.code ; начало сегмента кода
mov ax, seg mas ; запись в ax начало сегмента данных
mov es, ax
mov dx, offset mas ; в dx загружаем смещение
mov bx, es:[dx] ; загрузили в bx число 5
Типы данных, которые поддерживает ассемблер:
Байт (byte) – 8 разрядов, младший разряд справа
Слово (word) – 2 байта, 16 разрядов. Делится на 2 части: справа младший байт, слева – старший байт. Адресом слова в памяти является адрес младшего байта.
Двойное слово (dword). Состоит из младшего и старшего слов. Адресом является адрес младшего слова.
МП кроме разрядности поддерживает логическую интерпретацию типов:
Целый тип без знака
Байт: 0….255
Целый тип со знаком
Байт: -128….+127
Слово: -32768…+32768
Цепочка – непрерывный набор байтов, слов или двойных слов (максимальная длина до 4 Гбайт).
Битовое поле – непрерывная последовательность бит, в которой каждый бит является независимым и может рассматриваться как независимая переменная (максимальная длина 32 бита).
Ввод информации с клавиатуры и вывод ее на экран осуществляется в символьном виде. Кодирование этой информации производят согласно таблице. Каждый символ кодируется байтом.
При вводе чисел в программу необходимо преобразование кода символа в двоичный формат. При выводе результатов необходимо выполнить обратное преобразование (чисел в символьные коды).





Символ Код ASCII Двоичное представление Разность
0 30h 0000 30h
: : : :
9 39h 1001 30h

Д
ля
преобразования в двоичный код достаточно
вычесть из кодаASCII
30h
(для чисел от 0 до 9)





А(а) 41h(61h) 1010 37h(57h)
: : : :
F(f) 46h(66h) 1111 37h(57h)

П
рограмма
должна опознать, в каких границах
находится кодASCII
данного числа и в зависимости от принятого
решения, вычесть из кода ASCII
либо 37h,
либо 57h.
