Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskie_ukazania.doc
Скачиваний:
14
Добавлен:
03.03.2016
Размер:
6.75 Mб
Скачать

Разбор внутреннего представления командк содержанию

Общая структура двухоперандных команд с прямой, регистровой и косвенной адресацией:

7 0 7 6 5 3 2 0

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

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

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

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

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

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

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

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

КОР – код операции

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

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

d=1, - передача результата в МП (т.е. результат запоминается в регистре)

d=0, - передача результата из МП (т.е. результат запоминается в памяти)

Пример:

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-й операнд

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

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

│ 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 то адресация регистровая.

Каждому регистру можно присвоить свой номер. Второй операнд задается полем REG, т. е. это всегда номер регистра. Значение этого поля определяется последними 2-мя колонками.

Если MOD<>11, то первый операнд находится в памяти.

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

ЕА – исполнительный адрес, беззнаковая величина.

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

EA = (BP) + (DI) + D16

Компоненты адреса – BX,DI,d16 – знаковые величины, однако после их сложения с ЕА получается беззнаковая величина, иначе – ошибка.

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

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

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

Двухоперандная команда, в которой второй операнд непосредственный

7 0 7 0

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

│ KOP │S │W│ │mod│ kop│ r/m │ dispL dispH │dataL│ dataH

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

Бит направления d в данной команде не нужен, т.к. результат помещается только на место первого операнда. Поэтому биты s,w определяют формат второго операнда.

┌──

│ *0, один байт данных dataL

sw=│ 01, два байта данных dataL dataH

│ 11, один байт данных, при выполнении команд расширяется до слова

Add bx,5h

│ └────────────────┐

└─────────┐ │

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

│ kop │0│1│ │11│ кор │011│ │00 05│

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

│ s w mod │ r/m data

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

код операции

Команда MOV наиболее часто используется в программах, и специально для нее предложены дополнительные форматы (без пост-байта):

Mov reg,data

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

│ KOP │W │reg│ │dataL│ dataH

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

└ любые 8,16 разрядные

Формат двухоперандных команд с аккумулятором

Аккумулятор целесообразно использовать чаще при записи программы, т.к. для него реализован спец. укороченный формат без post-байта

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

│ KOP │W│ │dataL│ dataH

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

Формат команд перехода (условный, безусловный переход, loop, call)

┌───────┐ ┌───────┐

│ KOП │ │ disp │

disp – смещение метки относительно следующей команды. Различные команды перехода отличаются только величиной disp. Условные переходы и loop могут иметь только disp8 – короткие переходы. Безусловный переход будем рассматривать disp8 (короткий) или disp16 (внутрисегментный), хотя существуют еще 3 типа безусловного перехода. call может иметь disp16 или disp32 (межсегментный переход – вызов дальней процедуры).

адрес М2 033Fh

адрес команды -0325h

--------------------

disp = 001Ah - в disp заносится мл. байт

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]