Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНСПЕКТ ЛЕКЦИЙ ПО АССЕМБЛЕРУ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
471.55 Кб
Скачать

Двухоперандные команды

7 0 7 6 5 3 2 0

┌────────────┬───┬───┐ ┌─────┼─────┼─────┐ ┌ ─ ─ ┐ ┌ ─ ─ ┐

│ КОП │ d │ w │ │ mod │ reg │ r/m │ displ disph

└────────────┴─┬─┴─┬─┘ └──┬──┴───┬─┴─┬───┘ └ ─ ─ ┘ └ ─ ─ ┘

бит направления │ │ режим │ │ │ смещение адреса

────────────────┘ │ ──────┘ │ │

бит слова │ поле определения │ │ поле определения

───────────┘ второго операнда │ │ первого операнда

─────────────────┘ └───────────────────

┌──────────────┐ d=0, условное направление ┌───────────────┐

│ │ из МП 1 │ │

│ 2-й ├───────────────────────────>│ 1-й │

│ операнд reg │ │ операнд r/m │

│ │ d=1, условное направление │ │

│ │ в МП │ │

│ │<───────────────────────────┤ │

└──────────────┘ 2 └───────────────┘

W=1, если операнд слово.

W=0, если байт.

d=1, - передача результата в МП.

d=0, - передача результата из МП.

Если оба операнда в регистрах процессора, то d=1, т.к. результат в на регистре процессора.

Пример:

ADD AX,B AX:=AX+B -> результат в МП - d=1

ADD B,BX B:=B+BX -> результат в память - d=0

ADD AX,BX AX:=AX+BX -> результат в МП - d=1

Условное обозначение ОР1 и ОР2 не согласуются с мнемоникой:

Мнемоника: КОП ОР1 , ОР2

/ \

может быть 1-й или 2-й операнд

Таблица. Определение первого операнда в постбайте.

┌─────┬────────────────────────────────────────────────────────┐

│ r/m │ mod │

│ ├───────────┬──────────────┬───────────────┬─────────────┤

│ │ 00 │ 01 │ 10 │ 11 │

│ │ │ │ ├───────┬─────┤

│ │ │ │ │ w=0 │ w=1 │

├─────┼───────────┼──────────────┼───────────────┼───────┼─────┤

│ 000 │ (BX)+(SI) │ (BX)+(SI)+D8 │ (BX)+(SI)+D16 │ AL │ AX │

│ 001 │ (BX)+(DI) │ (BX)+(DI)+D8 │ (BX)+(DI)+D16 │ CL │ CX │

│ 010 │ (BP)+(SI) │ (BP)+(SI)+D8 │ (BP)+(SI)+D16 │ DL │ DX │

│ 011 │ (BP)+(DI) │ (BP)+(DI)+D8 │ (BP)+(DI)+D16 │ BL │ BX │

│ 100 │ (SI) │ (SI)+D8 │ (SI)+D16 │ AH │ SP │

│ 101 │ (DI) │ (DI)+D8 │ (DI)+D16 │ CH │ BP │

│ 110 │ (D16) * │ (BP)+D8 │ (BP)+D16 │ DH │ SI │

│ 111 │ (BX) │ (BX)+D8 │ (BX)+D16 │ BH │ DI │

└─────┴───────────┴──────────────┴───────────────┴───────┴─────┘

* исключение - прямая адресация.

Если MOD=11 то адресация регистровая.

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

Каждому регистру можно присвоен свой номер. Номера регистров определяются последними 2-мя колонками таблицы постбайта.

Если MOD<>11, то первый операнд находится в памяти и может задаваться одним из 24 способов адресации. Если MOD = 11, то первый операнд находится в регистре процессора и может задаваться одним из 16-ти способами адресации.

Т.о. каждая клетка таблицы (всего 40 клеток) определяет способ вычисления исполнительного адреса, например, ЕА=(BX)+(DI)+d16, строка r/m=001, столбец mod=10.

ЕА – исполнительный адрес - беззнаковая величина. Составляющие ЕА являются в общем случае величинами знаковыми. Однако после их сложения значение ЕА получается беззнаковой величиной, иначе – ошибка.

D8 или D16 это знаковое смещение адреса, которое содержится в команде и как компонент участвует в вычислении исполнительного адреса EA.

С другой стороны, EA является смещением относительно начала сегмента и используется для вычисления физического адреса памяти.

Колонки MOD = 00,01,10 имеют регулярную структуру. Нарушение только в одном квадрате:

r/m = 110

MOD = 00, что соответствует прямой адресации.

Код команды MOV X,BP

d w mod reg r/m

┌───────┬───┬───┐ ┌───┬───┬───┐┌─────────┐ - прямой исполнительный

│ KOП │ 0 │ 1 │ │ 00│101│110││ disp16 │ адрес переменной Х

└───────┴───┴───┘ └───┴───┴───┘└─────────┘

ЕА = disp16. Номер регистра BP определяется reg=101.