- •Программирование на языке Ассемблер
- •Классификация языков программирования
- •Поколения мп
- •Структура мп 8086
- •Регистры мп
- •Регистры общего назначения
- •Сегментные регистры
- •Регистры смещений
- •Регистр флагов
- •Структура и организация памяти
- •Сегментация памяти и формирование адреса
- •Особенности машинных команд
- •Основные команды мп
- •1.2 Перестановка (exchange):
- •1.3 Загрузка исполнительного адреса (load effective address):
- •3.1 Команды умножения
- •3.2 Команды деления
- •Переходы. Циклы
- •Команды сравнения и условного перехода
- •Команды условного перехода
- •3. Команды управления циклом
- •Язык Ассемблера ibm pc. Структура операторов и директив. Метки, переменные и их атрибуты
- •Команды
- •Директивы
- •Директивы определения данных
- •Конструкция повторения dup
- •Директива dd (define double word, определить двойное слово)
- •Директивы эквивалентности и присваивания
- •Структура программы. Логические сегменты
- •Побитовая обработка и ее основные виды
- •2. Команды сдвига
- •2.1. Логические сдвиги
- •2.2. Арифметические сдвиги
- •2.3. Циклические сдвиги
- •Стек и сегмент стека
- •Стековые команды
- •Пример использования стека
- •Модульное программирование
- •Типы объединения модулей
- •Связь Паскаль-Ассемблер
- •Параметры-значения
- •Параметры-переменные
- •Способы адресации
- •Команды строковых примитивов
- •Сканирование строки: scasb, scasw
- •Приемы обработки структурированной информации
- •Inc si ; к следующей оценке
- •Inc dx ; учет отличника
- •Составление и оформление программ на ассемблере
- •Префикс программного сегмента. Com- и exe-программы
- •Команда прерывания
- •Функции прерывания 21h
- •Процесс разработки программы на языке ассемблера
- •Трансляция программы
- •Компоновка программы
- •Макроповторения
- •Макрооператоры
- •Директива local
- •Директивы условного ассемблирования
- •Директивы if и ife
- •Директивы ifidn и ifdif
Язык Ассемблера ibm pc. Структура операторов и директив. Метки, переменные и их атрибуты
Программа на языке ассемблера – это последовательность операторов, каждый из которых записывается в отдельной строке.
Операторы на языке ассемблера делятся на три группы:
команды,
директивы,
комментарии.
Команды
Команды – это символьная форма записи машинных команд. Общий синтаксис:
[<метка>:] <мнемокод> [<операнды>] [;<комментарий>]
Пример:
L: ADD SI,2 ; изменение индекса
INC BL
CBW
Метка – это имя. После нее обязательно ставится двоеточие. Метка нужна для ссылок на команду из других мест программы, например, для перехода на эту команду.
Значением метки является адрес команды.
Метка имеет три атрибута:
Значение регистра CS;
Значение регистра IP;
Дистанция Near, Far;
Если к данной метке осуществляется ближний вызов, то ее атрибут Near. Ближний вызов осуществляется путем изменения регистра IP.
Если осуществляется межсегментный переход, то это дальний вызов (изменяется значение регистров CS и IP).
Мнемокод является обязательной частью команды. Это служебное слово, указывающее в символьной форме операцию, которую должна выполнить команда.
Операнды команды отделяются друг от друга запятыми.
Комментарии поясняют смысл программы, при трансляции ассемблер игнорирует их. Комментарием считается любая строка, начинающаяся со знака «точка с запятой», перед ним может быть любое число пробелов, либо пустая строка. В комментариях можно использовать любые символы.
Директивы
Директивы служат для описания констант и переменных, которые используются в программе. Синтаксис директив:
[<имя>] <название директивы> [<операнды>] [;<комментарий>]
Имя, указываемое в начале директивы, – это имя константы или переменной, описываемой данной директивой.
Названия директив – служебные слова.
Операнды и комментарии директивы записываются так же, как и в командах.
Значением переменной является адрес.
В этом случае переменная имеет три атрибута:
SEG (адрес сегмента, в котором она находится);
OFFSET (внутрисегментное смещение);
TYPE (тип).
Директивы определения данных
Используются в языке ассемблера для описания переменных, с которыми работает программа.
DB
[<имя>] DW <операнд> {, <операнд>} [;<комментарий>]
DD
Директива DB (define byte, определить байт)
По директиве DB определяются данные размером в байт. Ассемблер вычисляет операнды и записывает их значения в последовательные байты памяти. Первому из этих байтов присваивается указанное имя, по которому на этот байт можно ссылаться в программе.
Способы задания операндов:
? (знак неопределенного значения). Значение переменной можно не определять.
Пример: Х DB ?
Константное выражение со значением от –128 до 255.
Пример: А DB 254
Множественная инициализация
Пример: переменная – массив из 5 элементов
A DB 1, 2, 3, 4, 5
Конструкция повторения dup
Пример: байтовый массив А из 5 элементов с начальным значением 0 для каждого из них.
A DB 0, 0, 0, 0, 0
A DB 5 DUP (0)
Директива DW (define word, определить слово)
Директивой DW описываются переменные размером в слово. Аналогична директиве DB.
Способы задания операндов:
Операнд ?
Пример: A DW ?
Константное выражение со значением от -32768 до 65535
Пример: В DW 1234h
C DW -2
Адресное выражение
Пример: C DB ?
D DW С
Несколько операндов, конструкция повторения
Пример:
E DW 40000, 3 DUP (?) ; E DW 40000, ?, ?, ?