
- •Содержание
- •Введение
- •Архитектура микропроцессоров Intel 8086
- •Общие принципы работы мп 8086 при выполнении прикладных программ
- •Регистры
- •Адресация
- •Непосредственная адресация
- •Прямая адресация
- •Регистровая адресация
- •Косвенная регистровая адресация
- •Адресация no базе
- •Индексная адресация
- •Индексная адресация со смещением
- •Система команд
- •Команды пересылки данных
- •Арифметические команды
- •Битовые команды
- •Строковые команды
- •Команды передачи управления
- •Команды перехода
- •Условные
- •Безусловные
- •Команды условного перехода
- •Команды управления циклом
- •Тело цикла
- •Команды прерываний
- •Структура программы на языке ассемблера
- •Основные понятия языка ассемблера
- •Написание сегмента данных
- •Написание сегмента стека
- •Написание сегмента кода
- •Написание головной подпрограммы
- •Подготовка программ к выполнению
- •Отладка программ в Turbo Debugger
- •Специфика встроенного ассемблера
- •Оператор asm
- •Синтаксис ассемблерных команд
- •Коды инструкций
- •Операнды
- •Константы
- •Выражения
- •Операции
- •Бинарная операция -
- •Побитовые операции not, and, or, xor
- •Директивы ассемблера
-
Адресация
Для адресации данных в процессоре 8086 можно использовать несколько способов. Данные хранятся в сегменте данных. Сегмент данных определяется программистом, а адреса данных задаются им с помощью меток.
Адрес любого байта задается двумя 16-битовыми словами - сегментом и смещением. При формировании 20-разрядного полного адреса, необходимого для адресации в пределах 1 Мбайт, сегмент сдвигается влево на 4 разряда (т.е. умножается на 16) и складывается со смещением. Поскольку емкость 16-разрядного смещения составляет 65536 значений, в пределах одного сегмента можно адресовать до 64 Кбайт.
Архитектура МП позволяет использовать семь различных способов адресации.
Непосредственная адресация
Это самый простой способ адресации – вместо адреса в поле операнда команды указывается сам операнд, например: 25, -6, 100. В общем виде операнд записывается как числовая константа.
Регистры
Поле операнда
в команде Операнд
Опер. память
Примеры:
mov ax,100 {Загружаем в АХ значение 100}
add ax, 5 {К содержимому АХ прибавляем 5}
mov cx,$FFFF {Помещаем в СХ значение 65535}
Прямая адресация
Адрес операнда задается в явном виде меткой. В общем виде адрес записывается как <метка><константа>.
Регистры
Поле операнда
в команде Операнд
Опер. память
Смещение операнда задается в теле программы и складывается с регистром DS, например:
var
X: Word; В: Byte;
mоv ах,Х {Пересылаем значение переменной X регистр АХ}
add ah,В {К содержимому регистра АН прибавляем значение переменной В}
mov X,ax {Пересылаем содержимое регистра АХ в область памяти переменной X}
Регистровая адресация
В поле операнда указывается имя регистра. Общий вид: <имя регистра>.
Регистры
Поле операнда
в команде Операнд
Опер. память
Примеры:
mov ax,bx {Извлекаем из ВХ и помещаем в АХ}
add сх,ах {Содержимое АХ прибавляем к СХ}
push сx {Заталкиваем в стек содержимое СХ}
Косвенная регистровая адресация
Исполнительный адрес операнда (точнее, его смещение) содержится в одном из регистров ВХ, ВР, SI или DI. Для указания косвенной адресации этот регистр должен заключаться в квадратные скобки, например: [SI], [DI], [BX]. Другие регистры при косвенной адресации недопустимы.
Каждый из регистров BX...DI по умолчанию работает со своим сегментным регистром:
DS:BX, SS:BP, DS:SI, ES:DI
Если необходимо обратиться к данным из другого сегмента, например ES, необходимо использовать так называемую замену сегмента. Для этого перед [Рег] указывают имя сегментного регистра и ставят двоеточие, например, так: mov ax,es:[bx]
Регистры
Поле операнда
в команде Операнд
Опер. память
Пример:
mov ax,[bx] {Содержимое 16-разрядного слова, хранящегося в памяти по адресу DS:BX, пересылаем в регистр АХ}