Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASMMET.DOC
Скачиваний:
24
Добавлен:
27.03.2015
Размер:
339.46 Кб
Скачать

Загрузка в стек (с декрементом sp )

- Ячейки памяти или регистра

PUSH src

11111111

mod 110 r/m

- Регистра

PUSH reg

01011 reg

- Сегментного регистра

PUSH sreg

000 reg 110

reg – короткий номер сегм. Регистра

Извлечение из стека (с инкрементом SP)

- В память или регистр

POP dst

10001111

mod 000 r/m

- В регистр

POP reg

01011 reg

- В сегментный регистр

POP sreg

000 reg 111

reg – короткий номер сегм. Регистра

Перестановка (источник и приемник обмениваются содержимым)

- Между памятью или регистром и регистром

XCHG dst, reg

1000011 w

mod reg r/m

- Между регистром и аккумулятором

XCHG AX, RX

10010 reg

Преобразование из кода в код

- Загрузка из памяти по адресу (BX)+(AL) в регистрAL

XLAT

11010111

Удобно использовать для табличного преобразования кодов.

Загрузка регистра флагов в стек.

PUSHF

10011100

Пересылка слова из стека в регистр флагов

POPF

10011101

Загрузка регистра AH в младший байт регистра флагов

SAHF

10011110

Загрузка эффективного адреса операнда в регистр

LEA reg, src

10001101

mod reg r/m

Загрузка двойного слова, определяемого операндомsrc в гегистрыDS иreg

LES reg, src

11000101

mod reg r/m

Загрузка DS иPOH физическим адресом

LES reg, src

11000100

mod reg r/m

Загрузка младшего байта регистра флагов в AH

LAHF

10011111

Ввод из порта в AL илиAX

- Ввод из непосредственно адресуемого порта (не более 255 десятичн.)

IN A*, PORT

1110010 w

адр. порта

- Ввод из порта, адресуемого через DX

IN A*, DX

1110010 w

Вывод из аккумулятора

- Вывод в непосредственно адресуемый порт

OUT PIRT, A*

1110011 w

адр. порта

- Вывод в порт, адресуемый через DX

OUT DX, A*

1110111 w

Арифметические операции

Сложение ADD dst, src (dst = dst + src)

- Содержимого регистра или памяти с содержимым регистра

ADD dst, src

000100 d w

mod reg r/m

- Непосредственных данных с содержимым регистра или панели

ADD dst, data

100000 s w

mod 000 r/m

данные

Данные (w = 1)

- Непосредственные данные с АХ

ADD A*, data

0000010 w

данные

данные (w = 1)

Сложение с учетом переноса

- Регистра или памяти с регистром

ADS dst, src

000100 d w

mod reg r/m

- Непосредственных данных с содержимым регистра или памяти

ADC dst, data

100000 s w

mod reg r/m

данные

Данные (w = 1)

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

ADC A*, data

0001010 w

Данные

данные (w = 1)

Инкремент

- Регистра или памяти

INC dst

1111111 w

mod 000 r/m

- Регистра

INC reg

01000 reg

Коррекция аккумулятора AL при сложении распакованных двоично-десятичных чисел (в кодеASCII)

AAA

001100111

Коррекция аккумулятора AL при сложении упакованных двоично-десятичных чисел

DAA

00100111

Вычитание SUB dst, src (dst = dst - src)

- Регистра или памяти из регистра

SUB dst, src

001010 d w

mod reg r/m

- Непосредственных данных из регистра или памяти

SUB dst, data

100000 s w

mod reg r/m

данные

данные (w = 1)

- Непосредственных данных из аккумулятора

SUB A*, data

0010110 w

данные

данные (w = 1)

Вычитание с учетом заема

- Регистра или памяти из регистра

SBB dst, src

000110 d w

mod reg r/m

- Непосредственных данных из регистра или памяти

SBB dst, data

100000 s w

mod reg r/m

данные

данные (w = 1)

- Непосредственных данных из аккумулятора

SBB A*, data

0001110 w

Данные

данные (w = 1)

Декремент

- Регистра или памяти

DEC dst

1111111 w

mod 001 r/m

- Регистра

DEC reg

01001 reg

Изменение знака

NEG dst

1111011 w

mod 011 r/m

Сравнение CMP dst, src ( dst – src )

- Регистра или памяти и регистра

CMP dst, data

100000 s w

mod 111 r/m

данные

данные (w = 1)

- Непосредственных данных с регистром или памяти

CMP A*, data

0011110 w

Данные

данные (w = 1)

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

AAS

00101111

Десятичная коррекция распакованных чисел для вычитания

DAS

00101111

Умножение без знака AL илиAX на операндsrc

MUL src

1111011 w

mod 100 r/m

Умножение с учетом знака AL илиAX на операндsrc ( умножение целых чисел)

IMUL src

1111011 w

mod 101 r/m

Десятичная коррекция AX при умножении распакованных чисел (кодASCII)

AAM src

11010100

00001010

Беззнаковое деление содержимого DX, AX на операндsrc

DIV src

1111011 w

mod 110 r/m

Деление содержимого DX, AX наsrc с учетом знака (деление целых чисел )

IDIV src

1111011 m

mod 111 r/m

Десятичная коррекция AL при делении распакованных чисел (кодASCII)

AAD src

11010101

00001010

Преобразование байта в слово

CBW

10011001

Преобразование слова в двойное слово

CWD

10011001

Логические операции

Инвертирование

NOT dst

1111011 w

mod 010 r/m

Логическое «И» ( dst = (dst) and (src) )

- Регистра или памяти и регистра

AND dst, src

001000 d w

mod reg r/m

- Непосредственных данных и регистра или памяти

AND dst, data

1000000 w

mod 100 r/m

данные

данные (w = 1)

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

AND A*, data

0010010 w

Данные

данные (w = 1)

Логическое сравнение (установление регистра флагов)

- Регистра или памяти и регистра

TEST dst, src

1000010 w

mod reg r/m

- Непосредственных данных и регистра или памяти

TEST dst, data

1111011 w

mod 000 r/m

данные

данные (w = 1)

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

Логическое «ИЛИ»

- Регистром или памятью и регистром

TEST A*, data

1010100 w

данные

данные (w = 1)

- Непосредственными данными и регистром или памятью

OR dst, src

000010 d w

mod reg r/m

- Непосредственными данными и аккумулятором

OR dst, data

1000000 w

mod 001 r/m

данные

данные (w = 1)

Команды сдвигов

Логический арифметический сдвиг dst наcnt разрядов влево

XOR dst, src

001100 d w

mod reg r/m

Логический сдвиг вправо

XOR dst, data

1000000 w

mod 110 r/m

данные

данные (w = 1)

Циклический сдвиг влево

XOR A*, data

0011010 w

данные

данные (w = 1)

Циклический сдвиг вправо

SHL/SAL dst, cnt

110100 v w

mod 001 r/m

Циклический сдвиг влево через перенос

SHR dst, cnt

110100 v w

mod 101 r/m

Циклический сдвиг вправо через перенос

SAR dst, cnt

110100 v w

mod 111 r/m

Команды передачи управления

Команда условного переноса

Все команды условного перехода занимают 2 байта и имеют следующий машинный формат:

КОП

cмещение

8-байтовое смещение записывается в дополнительном коде, занимает второй байт команды и обеспечивает переход в диапазоне от –128 до +127 внутри сегмента относительно текущего значения указателя команд ( (IP) = (IP) + смещение). Переход осуществляется, если проверяемое условие выполняется, иначе выполняется следующая команда. На языке ассемблера в команде условного перехода указывается метка или адрес перехода. Смещение вычисляется ассемблером при трансляции, смещение= адрес перехода –IP (IP – адрес команды, следующей за командой перехода).

Мнемоника

КОП

16-рич.

Условие

Перехода

Смысловое значение

JE/JZ

74

ZF = 1

Если нуль или равно

JNE/JNZ

75

ZF = 0

Если не нуль или не равно

JS

78

GE = 1

Если минус

JNS

79

SF = 0

Если плюс

JO

70

GF = 1

Если переполнение

JNO

71

GF = 0

Если нет переполнения

JP/JFE

7A

PF = 1

Если четный паритет

JNP/JFO

7B

PF = 0

Если нечетный паритет

JB/JNAE/JC

72

CF = 1

Если перенос (не более или равно)

JNB/JAE/JNC

73

CF = 0

Если нет переноса

JBE/JNA

76

(CF) OR (ZF) = 1

Если меньше или равно с учетом знака

JNBE/JA

77

(CF) OR (ZF) = 0

Если больше с учетом знака

JL/JNGE

7C

(SF) XOR (OF) = 1

Если меньше

JNL/JGE

7D

(SF) XOR (OF) = 0

Если не меньше

JLE/JNG

7E

((SF) XOR (OF)) OR (ZF) = 1

Если меньше или равно

JNLE/JG

7F

((SF) XOR (OF)) OR (ZF) = 0

Если больше

11101000

Смещение мл. б.

смещение ст. б.

11101011

смещение

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