- •Программирование на языке Ассемблер
- •Классификация языков программирования
- •Поколения мп
- •Структура мп 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
Директива dd (define double word, определить двойное слово)
По директиве DD описываются переменные, под которые отводятся двойные слова. Директива похожа на две предыдущие.
Способы задания операндов:
Операнд ?
Целое число со значением от -231 до 232-1
Константное выражение (со значением от -215 до 216-1)
Адресное выражение (операнд задает абсолютный адрес)
Несколько операндов, конструкция повторения
Директивы эквивалентности и присваивания
Описывают константы.
Директива EQU (equal, равно) – директива эквивалентности.
Синтаксис:
<имя> EQU <операнд>
Операнд – имя
Пример: Если используется регистр АХ для вычисления суммы, то его можно обозначить SUM и далее использовать имя SUM:
SUM EQU AX
Операнд – константное выражение
N EQU 100
K EQU 2*N-1
X DB N DUP (?)
X DB 100 DUP (?)
Операнд – текст
S EQU ‘Ошибка’
Директива присваивания
<имя> = <константное выражение>
K=10
A DW K ; A DW 10
K=K+4
B DB K ; B DB 14
Структура программы. Логические сегменты
и их параметры
Логический сегмент – именованная область памяти, адресуемая с неизменным значением одного из сегментных регистров.
Программный сегмент имеет следующую структуру:
<имя сегмента> SEGMENT <параметры>
<предложение>
…
<предложение>
<имя сегмента> ENDS
Пример программного сегмента:
A SEGMENT
X DW ?
A ENDS
Директива ASSUME
ASSUME <пара> {, <пара>}
где <пара> - это <сегментный регистр>:<имя сегмента>
Пример:
ASSUME ES: A, DS: B, CS: C
Начальная загрузка сегментных регистров
Пусть требуется регистр DS установить на начало сегмента В.
MOV AX, B
MOV DS, AX
Аналогично загружается регистр ЕS.
Регистр CS загружать не надо.
Регистр SS, который должен указывать на начало стека, можно загрузить двумя способами: в самой программе (также как регистры DS и ЕS), либо загрузку поручить операционной системе. Для этого в директиве SEGMENT, открывающей описание сегмента стека, указывают специальный параметр SТACK.
Структура программы
STACK SEGMENT STACK ; сегмент стека
DB 128 DUP (?)
STACK ENDS
DATA SEGMENT ; сегмент данных
<описания переменных и т.п.>
DATA ENDS
CODE SEGMENT ; сегмент команд
ASSUME CS: CODE, DS: DATA, SS: STACK
START: MOV AX, DATA
MOV DS, AX ; загрузка DS
<остальные команды программы>
CODE ENDS
END START ; конец программы, точка входа
Побитовая обработка и ее основные виды
Логические команды
Выполняют логические операции – отрицание, конъюнкцию и дизъюнкцию.
Отрицание: NOT op
Допустимые типы операнда: r8, m8, r16, m16.
MOV AL,1100b ; AL=00001100b
NOT AL ; AL=11110011b
Конъюнкция (логическое умножение): AND op1,op2
В этой команде допустимы следующие комбинации операндов:
op1 op2
r8 i8, r8, m8
m8 i8, r8
r16 i16, r16, m16
m16 i16, r16
x |
y |
x and y |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
MOV AL,1100b ; AL=00001100b
AND AL,1010b ; AL=00001000b
Проверка: TEST op1,op2
MOV BH,1100b
TEST BH,0011b ; =00000000->ZF=1
TEST BH,1010b ; =00001000->ZF=0
Дизъюнкция (логическое сложение): OR op1,op2
Допустимые типы операндов – как в команде AND.
x |
y |
x or y |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
MOV CL,1100b
OR CL,1010b ; CL=00001110b
Исключающее ИЛИ (eXclusive OR): XOR op1,op2
Допустимые типы операндов – как в команде AND.
x |
y |
x хor y |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
MOV CL,1100b
OR CL,1010b ; CL=00000110b
XOR АХ,АХ ; АХ:=0