Similar presentations:
Режимы адресации микропроцессора
1. Режимы адресации микропроцессора i8088
Понятие режима адресации1.
2.
Команды микропроцессора оперируют данными,
которые указаны в операндах команд.
Данные могут находиться:
- в самой команде
- в регистре, который явно или неявно указан в
команде
- в ячейке памяти, адрес которой явно или неявно
указан в команде
Под режимом адресации будем понимать способ,
который использует микропроцессор для
определения месторасположения данных, которые
необходимо обработать в команде
Микропроцессор автоматически определяет метод
адресации по тому, как записана команда
2. Понятие режима адресации
Режимы адресации1.
2.
3.
4.
5.
6.
7.
Непосредственная
Регистровая
Прямая
Косвенная регистровая
Прямая по базе
Прямая с индексированием
Прямая по базе с индексированием.
Режимы (3 -7) режимы адресации памяти.
3. Режимы адресации
Непосредственная адресацияПрименяется , когда в качестве операнда
команды используется константа
(может использоваться только во
втором операнде команды).
В этом случае данное извлекается
непосредственно из команды.
4. Непосредственная адресация
ПримерMov cx, 500 ; переслать значение 500 в
; регистр cx
K equ 500; определить константу к=500
mov cx,к
; переслать значение
; константы к регистр
cx
5. Пример
Особенности непосредственнойадресации
1. Длина непосредственного операнда зависит
от длины первого операнда.
mov ah, 0123h
; ошибка
2. Если длина первого операнда превышает
длину непосредственного операнда, то МП
увеличивает длину непосредственного
операнда до длины первого
Mov cx,500
; сх=0000 0001 1111 0100
3. В программе на ассемблере допустимо
указывать отрицательные значения
Mov cl,-30 ; cx= 0000 0000 1110 0010 в
;дополнительном коде
6. Особенности непосредственной адресации
Регистровая адресацияПрименяется, когда в команде указаны
регистры МП.
В этом случае МП выбирает данные из
регистра или помещает данные в регистр
Mov ax,cx
; переслать
;содержимое
; регистра cx в
;регистр ax
Длина регистров должна быть одинаковой.
Mov ax,cl ; ошибка
7. Регистровая адресация
Режимы адресации памятиПрименяются для выборки данных из оперативной
памяти (пересылки данных в оперативную память).
При этом способе адресации в команде ассемблера
указывается исполнительный адрес
месторасположения данных в памяти.
Исполнительный адрес данных определяет адрес
первого байта обрабатываемых данных.
Длина обрабатываемых данных определяется записью
команды.
Исполнительный адрес может быть задан:
• либо в виде указателя на ячейку памяти
Сегментный адрес:смещение
• либо указанием только смещения ячейки памяти. В
этом случае используется сегментный адрес по
умолчанию (в разных случаях – разный).
8. Режимы адресации памяти
Прямая адресацияПрименяется в том случае, когда
исполнительный адрес ячейки задан
непосредственно в команде.
Основной способ - указание имени ячейки
памяти и, возможно, сдвига.
В этом случае исполнительный адрес ячейки
интерпретируется как смещение внутри
текущего сегмента данных. Смещение
нужной ячейки памяти вычисляется как
сумма смещения имени внутри сегмента, в
котором расположена ячейка памяти и, если
задан, сдвига.
Сдвиг измеряется в байтах.
9. Прямая адресация
ПримерField dw
?
;Определить имя field как
;ячейку памяти длиной слово в
;сегменте
Mov ax,field+3 ; занести в регистр ax
; содержимое ячейки
; памяти из текущего
; сегмента данных, смещение
; которой равно смещению
; ячейки field+3 байта.
10. Пример
A dw 0001hdw 0002h
Mov ax, a+1
Mov bx, a+2
; ax=?
; bx=?
11. Пример
РезультатСодержимое памяти
(шестнадцатеричный вид)
01000200
A+1=0002, ax=0200
Bx=0002
12. Результат
Косвенная регистроваяадресация
Применяется, когда исполнительный адрес ячейки памяти
является смещением и записан в регистрах bx, bp, si, di,
или вычисляется как сумма содержимого одного из
базовых (Bx, bp) и одного из индексных (si, di) регистров.
Если используется регистр bx и явно не указано иное, то
считается, что ячейка памяти находится в текущем
сегменте данных.
Если используется регистр bp и явно не указано иное, то
считается, что ячейка памяти находится в текущем
сегменте стека.
Длина ячейки памяти определяется из записи команды
13. Косвенная регистровая адресация
Правила записиMov ax, [bx]
Занести в регистр ax содержимое ячейки
памяти длиной слово из текущего сегмента
данных. Величина смещения (в байтах)
находится в регистре bx.
Mov ax, [bx+si]
Mov ah, [si] ; используется ячейка памяти
длиной байт
Не допускается совместное использование
двух базовых и двух индексных регистров.
14. Правила записи
Как получить смещения?1. Командой Lea
2. Операцией Offset
Field db ‘1234’ ; определение переменной
в сегменте данных и присвоение ей
значения ‘1234’
Lea bx, field ; В регистр bx занести
;смещение имени field в
;текущем сегменте данных
Mov ax, [bx] ; ax=‘1234’
15. Как получить смещения?
Операция offsetMov bx, offset field ; bx=смещению field
Mov ax,0
Mov [bx], ax ; Что сделает эта команда?
16. Операция offset
Прямая адресация сбазированием
Применяется в том случае, если
исполнительный адрес задан в виде
смещения и определяется:
- Суммой содержимого базового регистра
(bx,bp) и сдвига (в байтах);
- Суммой содержимого базового регистра
(bx,bp) и смещения ячейки памяти, заданной
символическим именем;
- Суммой содержимого базового регистра
(bx,bp), смещения ячейки памяти, заданной
символическим именем, и сдвига (в байтах);
17. Прямая адресация с базированием
Пример• Lea bx, field
; занести в bx смещение
; ячейки field
• Mov bp,bx
• Mov dx, [bx+1]
• Mov ax, table[bp+1] ; операция в
;сегменте данных
• Mov table[bx+1], ax
Занести в ячейку памяти длиной слово и со
смещением, равным сумме смещения ячейки table,
содержимого регистра bx и 1 в сегменте данных,
значение, содержащееся в регистре ax.
18. Пример
Прямая адресация синдексированием
Применяется в том случае, если
исполнительный адрес задан в виде
смещения и определяется:
- Суммой содержимого индексного регистра
(si,di) и сдвига (в байтах);
- Суммой содержимого индексного регистра
(si,dip) и смещения ячейки памяти, заданной
символическим именем;
- Суммой содержимого индексного регистра
(si,di), смещения ячейки памяти, заданной
символическим именем, и сдвига (в байтах);
19. Прямая адресация с индексированием
Пример• Lea si, field
; занести в si смещение
; ячейки field
• Mov dx, [si+1]
• Mov ax, table[si+1] ;
• Mov table[si+1], ax
Занести в ячейку памяти длиной слово и со
смещением, равным сумме смещения ячейки
table, содержимого регистра si и 1 в сегменте
данных, значение, содержащееся в регистре
ax.
20. Пример
Эти методы адресации удобны для доступа кпоследовательно расположенным ячейкам
памяти (элементам таблицы)
; Задать байтовую
; область
;памяти (таблицу)
;длиной 100 байт
Table db 100 dup(0)
mov si, 1
Mov ah,table[si] ; занести в ah первый
; байт таблицы
Mov si,2
Mov ah,table[si] ; 2 элемент
21.
Прямая адресация с базированием ииндексированием
Применяется в том случае, если исполнительный
адрес задан в виде смещения и определяется:
- Суммой содержимого индексного регистра (si,di),
базового регистра (bx,bp) и сдвига (в байтах);
- Суммой содержимого индексного регистра (si,di),
базового регистра (bx,bp и смещения ячейки
памяти, заданной символическим именем;
- Суммой содержимого индексного регистра (si,di),
базового регистра (bx,bp , смещения ячейки
памяти, заданной символическим именем, и сдвига
(в байтах);
22. Прямая адресация с базированием и индексированием
Пример• Mov dx, [bx+si+1]
• Mov ax, table[si+bx] ;
• Mov table[bx+si+1], ax
• Mov table[bp+si+1],ax
Занести в ячейку памяти длиной слово и со
смещением, равным сумме смещения ячейки
table, содержимого регистра si, содержимого
регистра bx (bp) и 1 в сегменте данных,
значение, содержащееся в регистре ax.
Удобно применять для доступа к элементам
двумерных массивов
23. Пример
Важное замечаниеПравила определения сегмента, в котором находится
ячейка памяти.
1. Если исполнительный адрес формируется с
использованием регистра bp без использования
имен ячеек памяти, то сегментный адрес ячейки
памяти извлекается из регистра SS (текущий
сегмент стека)
2. В командах обработки строк регистр di адресует
текущий дополнительный сегмент (сегментный
адрес извлекается из регистра es)
3. В остальных случаях ячейка памяти находится в
текущем сегменте данных (сегментный адрес
извлекается из регистра ds)
24. Важное замечание
Явное указание сегментаДля явного указания сегмента
используется имя сегментного
регистра.
Mov bp, es:[bx]
Mov cs:[bp], dx
; операция в текущем
; дополнительном
; сегменте
25. Явное указание сегмента
Возможные варианты написаниякоманд
Mov ax, [bx-1]
Mov ,ax, table[si]+1
Mov ax, table[bx][si+1]
Mov ax, table[bx][di]-1