Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
26
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

Глава 4

База + (индекс * масштаб) + смещение

Нет

Нет

ЕАХ

ЕАХ

ЕВХ

ЕВХ

1

ЕСХ

ЕСХ

2

Нет

EDX

+

EDX

*

4

+

8-битовое

ESI

ESI

g

32-битовое

EDI

EDI

L J

ЕВР

ЕВР

ESP

я

Рис. 4.2. Режимы косвенной адресации с использованием 32-разрядных регистров.

Прочерк во второй колонке подчеркивает, что регистр ESP нельзя использовать в качестве индексного. Это не означает, что ESP нельзя ука­зывать в качестве второго операнда:

mov EAX,[ECX][ESP]

Недопустима только конструкция, в которой содержимое ESP умно­ жается на масштабирующий множитель: ^

mov EAX,[ECX][ESP*8] J

fei Полезно также отметить, что смещение в команде вида ifil

mov EAX,[EBX][ECX]+20 **

может быть только или 8-битовым, или 32-битовым. 16-битовые смеще­ния не образуются. Если указанная в команде величина смещения поме­щается в байт, как это имеет место в приведенном выше примере коман­ды, то смещение в коде команды занимает 1 байт. Если же величина сме­щения больше 255, то под него в коде команды отводится сразу 32 бит.

Таким образом, понятия базовой и индексной адресации в 32-разряд­ных процессорах несколько размываются. Если регистр указывается с мас­штабирующим множителем, то это, конечно, индексная адресация. Если же множитель отсутствует, то адресацию и через ЕВХ, и через ESI с рав­ным успехом можно отнести как к базовой, так и к индексной.

Использование для адресации памяти 16-разрядных регистров резко сужает возможности адресации 32-разрядных процессоров (рис, 4.3). В этом случае мы фактически имеем дело с МП 86.

База

индекс

Г Нет ] Г Нет 1

ВХ + SI

[ ВР J [ D! J

смещение

Нет

8-битовое

16-битовое

Рис. 4.3. Режимы косвенной адресации с использованием 16-разрядных регистров.

Расширенные возможности современных микропроцессоров 165

Напомним, что в 16-разрядном режиме допустимы не все сочетания базовых и индексных регистров. В качестве базового регистра можно ис­пользовать только ВХ или ВР, а в качестве индексного только SI или DI.