- •Содержание
- •Введение
- •Архитектура микропроцессоров Intel 8086
- •Общие принципы работы мп 8086 при выполнении прикладных программ
- •Регистры
- •Адресация
- •Непосредственная адресация
- •Прямая адресация
- •Регистровая адресация
- •Косвенная регистровая адресация
- •Адресация no базе
- •Индексная адресация
- •Индексная адресация со смещением
- •Система команд
- •Команды пересылки данных
- •Арифметические команды
- •Битовые команды
- •Строковые команды
- •Команды передачи управления
- •Команды перехода
- •Условные
- •Безусловные
- •Команды условного перехода
- •Команды управления циклом
- •Тело цикла
- •Команды прерываний
- •Структура программы на языке ассемблера
- •Основные понятия языка ассемблера
- •Написание сегмента данных
- •Написание сегмента стека
- •Написание сегмента кода
- •Написание головной подпрограммы
- •Подготовка программ к выполнению
- •Отладка программ в Turbo Debugger
- •Специфика встроенного ассемблера
- •Оператор asm
- •Синтаксис ассемблерных команд
- •Коды инструкций
- •Операнды
- •Константы
- •Выражения
- •Операции
- •Бинарная операция -
- •Побитовые операции not, and, or, xor
- •Директивы ассемблера
Адресация no базе
Базовый регистр BX (или ВР) содержит базу (адрес начала некоторого фрагмента памяти), относительно которой ассемблер вычисляет смещение, например:
mov ах,[Ьх]+10 {Загружаем в АХ 10-й по счету байт от начала базы памяти по адресу DS:BX);
Регистры
Поле операнда
в команде Операнд
Оп
Опер. память
Индексная адресация
Индексная адресация часто применяется для обработки двумерных массивов. Смещение операнда вычисляется процессором как сумма содержимого базового и индексного регистра. При этом базовыми являются регистры BX, BP, а индексными SI, DI. Применение других регистров недопустимо. Примеры такой адресации: [BX][SI], [BP][DI].
Индексная адресация с базовым регистром BX обращается в сегмент данных, а с BP – в стек. Возможна замена сегмента, она выполняется аналогично косвенной адресации.
Рассмотрим методику работы с двумерным массивом. В BX (или BP) заносится адрес начала строки массива, а в SI (DI) – смещение операнда внутри строки.
Общий вид: {<сегмент>:}[<Баз. рег>][<Инд. регистр>].
Регистры
Поле операнда
в команде Операнд
Опер. память
Один из индексных регистров SI или DI указывает положение элемента относительно начала некоторой области памяти. Пусть, например, АОВ - имя массива значений типа Byte. Тогда можно использовать такие фрагменты:
mov si,15 {Помещаем в SI константу 15}
mov ah,AОB[si] {Пересылаем в АН 16-й по порядку байт от начала массива}
mov si,0
mov AOB[si],ah {Пересылаем полученное в самый первый элемент массива}
Индексная адресация со смещением
Эта адресация более удобна для обработки двумерных массивов. К смещению, полученному с помощью индексной адресации, добавляется дополнительное смещение. По аналогии с косвенной адресацией со смещением, ее можно записать как {<сегмент>:}[<Баз. рег>][<Инд. регистр> + <смещение>].
Например:
mov ax,[bx][si]
Регистры
Поле операнда
в команде Операнд
Операнд
Опер. память
Если, например, АОВ есть массив из 10x10 байт вида
var
АОВ: array [ 0..9,0..9] of Byte;
то для доступа к элементу АОВ [2,3] можно использовать такой фрагмент
mov bx,20 {База строки 2}
mov si,2 {Номер 3-го элемента}
mov ax,AOB[bxj [si] {Доступ к элементу}