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

Форматы команды inc

Inc mem/reg8 ;память или 8-разр. регистр

Inc reg16 ;16-разр. регистр

**Inc [BX+SI] – НЕВОЗМОЖНО, т.к. неизвестно байт это, или слово.

Inc word ptr [BX+SI]

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

│ kop │1│ │00│ кор │000│

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

w mod reg r/m

Inc BL

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

│ kop │0│ │11│ кор │011│

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

w mod reg r/m

Inc BX

7 3 2 0

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

│ kop │reg│ │ кор │011│ Команда однобайтовая

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

│ reg

└─ второй «укороченный» формат для 16-разр. Регистров без постбайта.

Аналогично построены форматы команды DEC.

Сокращают код программы и повышают ее эффективность.

Форматы команд pop и push

POP mem16

POP reg16

Команды работы со стеком всегда работают только со словами, поэтому запись команды:

POP AL – синтаксическая ошибка

POP AX

┌─────┬───┐

│ кор │000│ Команда однобайтовая

└─────┴───┘

reg

если используется память, то:

PUSH A[BX+SI] ; A – обязательно слово

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

│ kop │1│ │10│ кор │001│ │ адрес А │

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

w mod reg r/m disp16

Однобайтные команды без операндов

RET, CBW, CWD, CLI, STC и др. имеют только код операции:

7 0

┌─────┐

│ кор │

└─────┘

Команды передачи данных mov

Mov OP1,OP2

(1) Mov mem/reg,mem/reg

(2) Mov mem/reg,data

(3) Mov AC,data

Такие же форматы, как для двухоперандных арифметических команд.

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

Mov reg,data

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

│ KOP │W │reg│ │dataL│ dataH

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

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

Mov AC/mem,mem/AC

Пример:

Mov BP,-10

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

│ KOP │1 │101│ │FF F6│

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

Mov Sreg,mem/reg

Mov mem/reg,Sreg

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

│ KOP │ │mod│Sreg│ r/m │ dispL dispH

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

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

┌──┴┐ ┌─┴─┐ ┌─┴─┐ ┌┴──┐

000 001 010 011

ES CS SS DS

Сегментные регистры только 16 разрядные

Команда обмена xchg

XCHG OP1,OP2

XCHG reg,reg/mem

Команда загрузки исполнительного адреса lea

LEA OP1,OP2

LEA reg,mem

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

│ KOP │ │mod│reg│r/m│ │disp│

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

* d – нет, т. к. адрес всегда загружается в регистр МП

* w – нет, т. к. адрес загружается только в 16-ти разрядный регистр.

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

│ KOP │ │mod│reg│r/m│

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

└───────┴───── обозначают только память, поэтому mod <> 11

LEA BX,A

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

│a1│a2│..│..│..│..│aN│

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

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

│ kop │ │00│ 011 │110│ │ адрес А │

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

Поле disp прямого адреса А формируется на этапе трансляции, выполняется действие BX:=disp, при выполнении команды обращения к памяти не происходит, потому что поле disp можно считать НО.

Действие команды эквивалентно:

mov bx,offset A

bx:=адрес А