
- •Программирование на языке Ассемблер
- •Классификация языков программирования
- •Поколения мп
- •Структура мп 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
1.3 Загрузка исполнительного адреса (load effective address):
LEA r16,A
В качестве первого операнда может быть указан любой регистр общего назначения, а в качестве второго – любое адресное выражение.
Пример.
LEA BX,A ; BX:=адрес А
MOV BX,A ; BX:=содержимое А
В качестве второго операнда нельзя указывать константное выражение или имя регистра:
Пример.
LEA BX,88 ; ошибка
LEA BX,АХ ; ошибка
Команды сложения и вычитания
Сложение: ADD op1,op2
op1:=op1+op2
Вычитание: SUB op1,op2
op1:=op1-op2
В этих командах допустимы следующие комбинации операндов:
op1 op2
r8 i8, r8, m8 сложение/вычитание байтов
m8 i8, r8
r16 i16, r16, m16 сложение/вычитание слов
m16 i16, r16
Пример.
ADD BX,АХ ; BX:=BX+AX
SUB BX,AX : BX:=BX-AX
Увеличение на 1: INC op
ADD op,1
Уменьшение на 1: DEC op
SUB op,1
В этих командах допустимы следующие типы операнда:
r8, m8, r16, m16
Выгода от команд INC и DEC в том, что они занимают меньше места в памяти и выполняются быстрее, чем соответствующие команды ADD и SUB.
Команды умножения и деления
3.1 Команды умножения
Умножение целых чисел без знака: MUL op
Умножение целых чисел со знаком: IMUL op
Умножение байтов: AX:=AL*op (op: r8, m8)
Умножение слов: (DX,AX):=AX*op (op: r16, m16)
Пример.
N DB 10
…
MOV AL,2
MUL N ; AX=2*10=20=0014h: AH=00h, AL=14h
3.2 Команды деления
Деление целых чисел без знака: DIV op
Деление целых чисел со знаком: IDIV op
Деление слова на байт:
AH:=AX mod op, AL:=AX div op (op: r8, m8)
Деление двойного слова на слово:
DX:=(DX, AX) mod op, AX:=(DX, AX) div op (op: r16, m16)
Изменение размера числа
Расширение байта до слова (convert byte to word): CBW
У этой команды местонахождение операнда и результата фиксировано: операнд всегда берется из AL, а результат всегда записывается в AX. Команда записывает в регистр AH число 00h или 0FFh в зависимости от знака числа из регистра AL.
Расширение слова до двойного слова (convert word to double): CWD
При делении также возникает необходимость расширения слова, находящегося в регистре AX, до двойного слова, занимающего два регистра – DX и AX. Команда записывает в регистр DX число 0000h или 0FFFFh в зависимости от знака числа из регистра AX.
Переходы. Циклы
Безусловный переход (jump):
JMP op
Прямой переход
В данном случае в качестве операнда указывается метка той команды, на которую необходимо передать управление:
JMP <метка>
Пример.
JMP L ; следующей будет выполняться команда с меткой L
…
L: MOV AX, 0
Косвенный переход
JMP r16 или
JMP m16