Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 6 Способы_адресации.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
48.77 Кб
Скачать

Структура команд

• Формат регистр–регистр.

КОП

d

w

1

1

R1

R2

6 бит 1 бит 1 бит 1 бит 1 бит 3 бита 3 бита

Команды этого формата занимают 2 байта.

d – бит направления, задает направление выполнения команд

R1> := <R1> ⊗ <R2> при d = 0

<R2> := <R2> ⊗ <R1> при d = 1.

w – бит размера аргумента, задаёт размер регистров-операндов, имена которых можно определить по следующей схеме:

R1,2

w = 1

w = 0

000

AX

AL

001

CX

CL

010

DX

DL

011

BX

BL

100

SP

AH

101

BP

CH

110

SI

SI

111

DI

BH

Архитектурой не предусмотрены операции формата r8–r16, т.е. операции над регистрами разной длины запрещены. При возникает необходимость преобразования типов из короткого целого в длинное, и из длинного в сверхдлинное.

Беззнаковое число всегда расширяется слева нулями.

Для знакового числа размножается знаковый бит (для знаковых чисел незначащими двоичными цифрами будут 0 для неотрицательных и 1 для отрицательных значений).

Команды преобразования типов:

cbw (convert byte to word) – знаковое расширение AL до AX

cwd (convert word to double) – знаковое расширение AX до пары регистров <DX,AX>, которые в этом случае рассматриваются как один длинный 32 битный регистр.

Преобразование целого значения из более длинного формата в более короткий (усечение) производится путём отбрасывания соответствующего числа левых битов целого числа. Усечённое число получится правильным, если будут отброшены только незначащие биты. Для беззнаковых чисел это всегда нулевые биты. Для знаковых – биты, совпадающие со знаковым битом усечённого числа.

Формат регистр–память (и память-регистр).

КОП

R1

A2

Операнд A2 может иметь один из приведённых ниже трёх видов:

1. A2 = A

2. A2 = A[M1]

3. A2 = A[M1][M2],

где A — смещение (1 или 2 байта);

M1 и M2 — регистры-модификаторы.

(любой из регистров: BP, BX, SI, DI)

В случае 1 физический адрес (полный адрес ячейки) вычисляется центральным процессором по формуле:

Aфиз := (B*16 + A)mod 2 20 , где B – значение одного из сегментных регистров.

В случае 2 физический адрес вычисляется по формуле:

Aфиз := (B*16 + (A + <M1>)mod 216)mod 220 , где вместо <M1> подставляется содержимое регистра-модификатора (одного из четырёх указанных).

В случае 3 физический адрес вычисляется по формуле:

Aфиз := (B*16 + (A + <M1> + <M2>)mod 216)mod 220, где M1 - любой из

регистров BX или BP, а M2 – любой из регистров SI или DI.

Использование регистров BX и BP (как и SI и DI) одновременно в качестве модификаторов запрещено.

Внутреннее представление формата команды регистр–память: