Режимы адресации микропроцессора

Содержание

Слайд 2

Понятие режима адресации

Команды микропроцессора оперируют данными, которые указаны в операндах команд.
Данные могут

Понятие режима адресации Команды микропроцессора оперируют данными, которые указаны в операндах команд.
находиться:
- в самой команде
- в регистре, который явно или неявно указан в команде
- в ячейке памяти, адрес которой явно или неявно указан в команде
Под режимом адресации будем понимать способ, который использует микропроцессор для определения месторасположения данных, которые необходимо обработать в команде
Микропроцессор автоматически определяет метод адресации по тому, как записана команда

Слайд 3

Режимы адресации

Непосредственная
Регистровая
Прямая
Косвенная регистровая
Прямая по базе
Прямая с индексированием
Прямая по базе с индексированием.
Режимы

Режимы адресации Непосредственная Регистровая Прямая Косвенная регистровая Прямая по базе Прямая с
(3 -7) режимы адресации памяти.

Слайд 4

Непосредственная адресация

Применяется , когда в качестве операнда команды используется константа (может использоваться

Непосредственная адресация Применяется , когда в качестве операнда команды используется константа (может
только во втором операнде команды).
В этом случае данное извлекается непосредственно из команды.

Слайд 5

Пример

Mov cx, 500 ; переслать значение 500 в ; регистр cx
K equ

Пример Mov cx, 500 ; переслать значение 500 в ; регистр cx
500; определить константу к=500
mov cx,к ; переслать значение ; константы к регистр cx

Слайд 6

Особенности непосредственной адресации

Длина непосредственного операнда зависит от длины первого операнда.
mov ah, 0123h ;

Особенности непосредственной адресации Длина непосредственного операнда зависит от длины первого операнда. mov
ошибка
2. Если длина первого операнда превышает длину непосредственного операнда, то МП увеличивает длину непосредственного операнда до длины первого
Mov cx,500 ; сх=0000 0001 1111 0100
3. В программе на ассемблере допустимо указывать отрицательные значения
Mov cl,-30 ; cx= 0000 0000 1110 0010 в ;дополнительном коде

Слайд 7

Регистровая адресация

Применяется, когда в команде указаны регистры МП.
В этом случае МП выбирает

Регистровая адресация Применяется, когда в команде указаны регистры МП. В этом случае
данные из регистра или помещает данные в регистр
Mov ax,cx ; переслать ;содержимое ; регистра cx в ;регистр ax
Длина регистров должна быть одинаковой.
Mov ax,cl ; ошибка

Слайд 8

Режимы адресации памяти

Применяются для выборки данных из оперативной памяти (пересылки данных в

Режимы адресации памяти Применяются для выборки данных из оперативной памяти (пересылки данных
оперативную память).
При этом способе адресации в команде ассемблера указывается исполнительный адрес месторасположения данных в памяти.
Исполнительный адрес данных определяет адрес первого байта обрабатываемых данных.
Длина обрабатываемых данных определяется записью команды.
Исполнительный адрес может быть задан:
либо в виде указателя на ячейку памяти
Сегментный адрес:смещение
либо указанием только смещения ячейки памяти. В этом случае используется сегментный адрес по умолчанию (в разных случаях – разный).

Слайд 9

Прямая адресация

Применяется в том случае, когда исполнительный адрес ячейки задан непосредственно в

Прямая адресация Применяется в том случае, когда исполнительный адрес ячейки задан непосредственно
команде.
Основной способ - указание имени ячейки памяти и, возможно, сдвига.
В этом случае исполнительный адрес ячейки интерпретируется как смещение внутри текущего сегмента данных. Смещение нужной ячейки памяти вычисляется как сумма смещения имени внутри сегмента, в котором расположена ячейка памяти и, если задан, сдвига.
Сдвиг измеряется в байтах.

Слайд 10

Пример

Field dw ? ;Определить имя field как ;ячейку памяти длиной слово в ;сегменте
Mov ax,field+3

Пример Field dw ? ;Определить имя field как ;ячейку памяти длиной слово
; занести в регистр ax ; содержимое ячейки ; памяти из текущего ; сегмента данных, смещение ; которой равно смещению ; ячейки field+3 байта.

Слайд 11

Пример

A dw 0001h
dw 0002h
Mov ax, a+1 ; ax=?
Mov bx, a+2 ; bx=?

Пример A dw 0001h dw 0002h Mov ax, a+1 ; ax=? Mov bx, a+2 ; bx=?

Слайд 12

Результат

Содержимое памяти (шестнадцатеричный вид)
01000200
A+1=0002, ax=0200
Bx=0002

Результат Содержимое памяти (шестнадцатеричный вид) 01000200 A+1=0002, ax=0200 Bx=0002

Слайд 13

Косвенная регистровая адресация

Применяется, когда исполнительный адрес ячейки памяти является смещением и

Косвенная регистровая адресация Применяется, когда исполнительный адрес ячейки памяти является смещением и
записан в регистрах bx, bp, si, di, или вычисляется как сумма содержимого одного из базовых (Bx, bp) и одного из индексных (si, di) регистров.
Если используется регистр bx и явно не указано иное, то считается, что ячейка памяти находится в текущем сегменте данных.
Если используется регистр bp и явно не указано иное, то считается, что ячейка памяти находится в текущем сегменте стека.
Длина ячейки памяти определяется из записи команды

Слайд 14

Правила записи

Mov ax, [bx]
Занести в регистр ax содержимое ячейки памяти длиной слово

Правила записи Mov ax, [bx] Занести в регистр ax содержимое ячейки памяти
из текущего сегмента данных. Величина смещения (в байтах) находится в регистре bx.
Mov ax, [bx+si]
Mov ah, [si] ; используется ячейка памяти длиной байт
Не допускается совместное использование двух базовых и двух индексных регистров.

Слайд 15

Как получить смещения?

Командой Lea
2. Операцией Offset
Field db ‘1234’ ; определение переменной в

Как получить смещения? Командой Lea 2. Операцией Offset Field db ‘1234’ ;
сегменте данных и присвоение ей значения ‘1234’
Lea bx, field ; В регистр bx занести ;смещение имени field в ;текущем сегменте данных
Mov ax, [bx] ; ax=‘1234’

Слайд 16

Операция offset

Mov bx, offset field ; bx=смещению field
Mov ax,0
Mov [bx], ax ;

Операция offset Mov bx, offset field ; bx=смещению field Mov ax,0 Mov
Что сделает эта команда?

Слайд 17

Прямая адресация с базированием

Применяется в том случае, если исполнительный адрес задан в

Прямая адресация с базированием Применяется в том случае, если исполнительный адрес задан
виде смещения и определяется:
Суммой содержимого базового регистра (bx,bp) и сдвига (в байтах);
Суммой содержимого базового регистра (bx,bp) и смещения ячейки памяти, заданной символическим именем;
Суммой содержимого базового регистра (bx,bp), смещения ячейки памяти, заданной символическим именем, и сдвига (в байтах);

Слайд 18

Пример

Lea bx, field ; занести в bx смещение ; ячейки field
Mov bp,bx
Mov dx,

Пример Lea bx, field ; занести в bx смещение ; ячейки field
[bx+1]
Mov ax, table[bp+1] ; операция в ;сегменте данных
Mov table[bx+1], ax
Занести в ячейку памяти длиной слово и со смещением, равным сумме смещения ячейки table, содержимого регистра bx и 1 в сегменте данных, значение, содержащееся в регистре ax.

Слайд 19

Прямая адресация с индексированием

Применяется в том случае, если исполнительный адрес задан в

Прямая адресация с индексированием Применяется в том случае, если исполнительный адрес задан
виде смещения и определяется:
Суммой содержимого индексного регистра (si,di) и сдвига (в байтах);
Суммой содержимого индексного регистра (si,dip) и смещения ячейки памяти, заданной символическим именем;
Суммой содержимого индексного регистра (si,di), смещения ячейки памяти, заданной символическим именем, и сдвига (в байтах);

Слайд 20

Пример

Lea si, field ; занести в si смещение ; ячейки field
Mov dx, [si+1]
Mov

Пример Lea si, field ; занести в si смещение ; ячейки field
ax, table[si+1] ;
Mov table[si+1], ax
Занести в ячейку памяти длиной слово и со смещением, равным сумме смещения ячейки table, содержимого регистра si и 1 в сегменте данных, значение, содержащееся в регистре ax.

Слайд 21

Эти методы адресации удобны для доступа к последовательно расположенным ячейкам памяти (элементам

Эти методы адресации удобны для доступа к последовательно расположенным ячейкам памяти (элементам
таблицы)
Table db 100 dup(0) ; Задать байтовую ; область ;памяти (таблицу) ;длиной 100 байт
mov si, 1
Mov ah,table[si] ; занести в ah первый ; байт таблицы
Mov si,2
Mov ah,table[si] ; 2 элемент

Слайд 22

Прямая адресация с базированием и индексированием

Применяется в том случае, если исполнительный адрес

Прямая адресация с базированием и индексированием Применяется в том случае, если исполнительный
задан в виде смещения и определяется:
Суммой содержимого индексного регистра (si,di), базового регистра (bx,bp) и сдвига (в байтах);
Суммой содержимого индексного регистра (si,di), базового регистра (bx,bp и смещения ячейки памяти, заданной символическим именем;
Суммой содержимого индексного регистра (si,di), базового регистра (bx,bp , смещения ячейки памяти, заданной символическим именем, и сдвига (в байтах);

Слайд 23

Пример

Mov dx, [bx+si+1]
Mov ax, table[si+bx] ;
Mov table[bx+si+1], ax
Mov table[bp+si+1],ax
Занести в ячейку

Пример Mov dx, [bx+si+1] Mov ax, table[si+bx] ; Mov table[bx+si+1], ax Mov
памяти длиной слово и со смещением, равным сумме смещения ячейки table, содержимого регистра si, содержимого регистра bx (bp) и 1 в сегменте данных, значение, содержащееся в регистре ax.
Удобно применять для доступа к элементам двумерных массивов

Слайд 24

Важное замечание

Правила определения сегмента, в котором находится ячейка памяти.
Если исполнительный адрес формируется

Важное замечание Правила определения сегмента, в котором находится ячейка памяти. Если исполнительный
с использованием регистра bp без использования имен ячеек памяти, то сегментный адрес ячейки памяти извлекается из регистра SS (текущий сегмент стека)
В командах обработки строк регистр di адресует текущий дополнительный сегмент (сегментный адрес извлекается из регистра es)
В остальных случаях ячейка памяти находится в текущем сегменте данных (сегментный адрес извлекается из регистра ds)

Слайд 25

Явное указание сегмента

Для явного указания сегмента используется имя сегментного регистра.
Mov bp, es:[bx] ;

Явное указание сегмента Для явного указания сегмента используется имя сегментного регистра. Mov
операция в текущем ; дополнительном ; сегменте
Mov cs:[bp], dx