
- •Лекции по предмету:
- •Системы счисления
- •Перевод целого числа
- •Перевод дробной части числа
- •Перевод числа из 8-ой и 16-ой сс в 2-ую сс
- •Арифметические операции в 2-ой сс
- •Представление чисел в эвм
- •Представление чисел с фиксированной точкой
- •Прямой код
- •Обратный код
- •Дополнительный код:
- •Правило сложения в дополнительном коде:
- •Представление чисел с плавающей точкой.
- •Понятие об архитектуре эвм
- •Структура эвм:
- •Устройство управления
- •Арифметико – логическое устройство (алу)
- •Классификация памяти. Операции с памятью.
- •Устройства ввода/вывода
- •Программная модель микропроцессора Intel 80/86
- •Адресация памяти
- •Адресация памяти в командах Ассемблера
- •Общий принцип косвенной адресации в процессоре 8086
- •Организация программы на языке ассемблер
Адресация памяти в командах Ассемблера
Существует 3 основных режима адресации:
Прямая – адрес операнда содержится непосредственно в команде
Косвенная – в команде указан регистр, в котором находится адрес операнда
Относительная – адрес, вычисляется относительно некоторого регистра
В микропроцессорах Intel принято следующее ограничение : в памяти может находиться не более одного операнда команды.
Способы адресации:
Регистровая прямая адресация – операнд находится в одном из регистров общего назначения
mov AH,BL
mov AX,BX

Непосредственная адресация – в команде указывается непосредственное значение одного из операндов.

mov AX,02486h
mov AL,025h

mov AX,025h
Прямая адресация – адрес операнда задан непосредственно в команде
mem dw 1
mem2 db 290
inc mem
mov DX,mem
Иногда в команде нужно использовать не значение ячейки памяти, а её смещение относительно начала сегмента. Для этого используется конструкция:
Offset Имя ячейки
Пример:
mov DX, offset mem1
При прямой адресации обращение к переменным или ячейкам происходит через их смещение, но адрес состоит не только из смещения, но и из адреса сегмента. По умолчанию адрес сегмента берётся из сегментного регистра связанного директивой assume. Эта директива имеет следующий вид:
Assume Сегментный регистр : имя сегмента
При необходимости обращения к другому сегменту можно непосредственно указать сегментный регистр.
mov AX,ES:0h
mov AX,ES:mem3
Косвенная регистровая адресация. В команде указывается регистр содержащий смещение операнда. В процессоре 80.86 для косвенной адресации допускается использовать только 4 регистра.
BX,BP,SI,DI
При использовании BX,SI,DI используется сегментный регистр DS
Через регистр BP используется сегментный регистр SS
mov [BX],AX

mov ES:[BX],AL
mov BX,[AX]-ошибка, т.к. AX – нет в перечне регистров
Не разрешается через AX косвенная адресация
Базовый режим адресации – смещение операнда равно сумме содержимого одного из базовых регистров BX или BP и некоторого значения заданного в команде
mov AX,[BX]10

Mov AX,[BP]10
Эта запись имеет различные варианты
mov AX,[BX]10 = [BX+10] = [BX]+10 = 10[BX]
Индексный режим адресации – исполнительный адрес операнда вычисляется как сумма содержимого одного из индексных регистров SI или DI и смещение.
mov AX, TEMP[SI]

Рисунок
Базово-индексная адресация со смещением или без – исполнительный адрес вычисляется как сумма, содержимого базового регистра, индексного регистра и ,возможно, смещения.

mov AX,[BX][SI]
mov
AX, TEMP [BX],[SI]
TEMP
BX
Общий принцип косвенной адресации в процессоре 8086
Можно описать схемой:
[ База ] + [ Индекс ] + Смещение
+
База – отсутствует или BX или BP
Индекс – отсутствует или SI или DI
Смещение – отсутствует или 8-бит или 32-бита
В 32 разрядных и последующих процессорах принципы косвенной адресации существенно расширены за счёт расширения участвующих в ней регистров, а также добавлены множители
В современных процессорах так:
[ База ] + [ Индекс ] * масштаб + Смещение
+
*
+
Вторая схема применяется только при использовании 32-разрядных и выше регистров.
Mov AX, [ECX][EDI * 2] TEMP
Mov AX, [CX][DI*2] TEMP - ошибка