Способы адресации i386 и Ассемблерные Инструкции

Эта глава содержит информацию, определенную для архитектуры процессора Intel i386, включающей i386, i486, и процессоры Pentium. Первый раздел, i386 Регистры и Способы адресации, перечисляет доступные регистры и описывает способы адресации, используемые ассемблерными инструкциями. Второй раздел, i386 Ассемблерные Инструкции, перечисляет каждую ассемблерную инструкцию с синтаксисом ассемблера OS X.

Регистры i386 и Способы адресации

В этом разделе описываются соглашения, используемые для указания способов адресации и мнемоник команд для архитектуры процессора Intel i386. Сами инструкции подробно изложены в следующем разделе, i386 Ассемблерные Инструкции.

Мнемоники команд

Мнемоники команд, что ассемблерное использование основывается на мнемонике, описанной в соответствующих руководствах процессора Intel.

Регистры

Много инструкций принимают регистры как операнды. Доступные регистры перечислены в этом разделе. Ассемблер OS X для процессоров Intel i386 всегда использует имена, начинающиеся со знака процента (‘ % ’) для регистров, таким образом, конфликты имен с идентификаторами не возможны; далее, все имена регистра находятся в строчных буквах.

Общие регистры

Каждый из 32-разрядных общих регистров i386 архитектуры доступен различными именами, указывающими части того регистра, который будет использоваться. Например, к регистру AX можно получить доступ как единственный байт (%ah или %al), 16-разрядное значение (%ax) или 32-разрядное значение (%eax). Число ниже шоу имена этих регистров и их отношения к полному 32-разрядному хранению для каждого регистра:

  Имена Регистра рисунка 6-1 в 32-разрядной i386 архитектуре
Register Names in the 32-bit i386 architecture

Регистры с плавающей точкой

Регистр

%st

%st(0)%st(7)

Сегментные регистры

Регистр

Описание

%cs

регистр сегмента кода

%ss

регистр сегмента стека

%ds

регистр сегмента данных

%es

регистр сегмента данных (целевой сегмент строковой операции)

%fs

регистр сегмента данных

%gs

регистр сегмента данных

Другие регистры

Регистр

Описание

%cr0%cr3

регистры управления

%db0%db7

отладочные регистры

%tr3%tr7

тестовые регистры

%mm0%mm7

Регистры MMX

%xmm0%xmm7

Регистры XMM

Операнды и способы адресации

i386 архитектура использует четыре вида операндов инструкции:

Каждый тип операнда соответствует способу адресации. Операнды регистра указывают, что значение, сохраненное в именованном регистре, должно использоваться оператором. Непосредственные операнды являются постоянными значениями, указанными в ассемблерном коде. Операнды непосредственной памяти являются ячейкой памяти меток или значением именованного регистра, обработанного как адрес. Косвенные операнды памяти вычисляются во время выполнения от содержания регистров и дополнительных постоянных значений.

Операнды регистра

Операнд регистра дан просто как имя регистра. Это может быть любой из идентификаторов, начинающихся с упомянутого выше ‘%’; например, %eax. Когда вызовы оператора для операнда регистра определенного размера, операнд перечислен как r8, r16, или r32.

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

Непосредственные операнды указаны как числовые значения, которым предшествует знак доллара (‘ $ ’). Они являются десятичными по умолчанию, но могут быть отмечены как шестнадцатеричные путем начала самого числа с ‘0x’. Простые вычисления позволяются, если сгруппировано в круглых скобках. Наконец, непосредственный операнд может быть дан как метка, когда ее значение является адресом той метки. Вот некоторые примеры:

$100
$0x5fec4
$(10*6)     # calculated by the assembler
$begloop

Ссылка на неопределенную метку позволяется, но что ссылка должна быть разрешена во время ссылки.

Операнды непосредственной памяти

Операнды непосредственной памяти являются ссылками на метки в ассемблерном источнике. Они действуют как статические ссылки на единственное расположение в памяти относительно определенного раздела и разрешены во время ссылки. Вот пример:

     .data
var: .byte 0       # declare a byte-size variable labelled "var"
     .text
     .
     .
     .
     movb %al,var  # move the low byte of the AX register into the
                   #  memory location specified by "var"

По умолчанию операнды непосредственной памяти используют %ds сегментный регистр. Это может быть переопределено путем добавления префикса операндов с желаемым сегментным регистром и двоеточие:

     movb %es:%al,var  # move the low byte of the AX register into the
                       #  memory location in the segment given by %es
                       # and "var"

Обратите внимание на то, что переопределение сегмента применяется только к операндам памяти в инструкции; «var» затронут, но нет %al. Команды работы со строковыми данными, берущие два операнда памяти, используют переопределение сегмента для обоих. Меньше распространенного способа указать сегмент состоит в том, чтобы снабдить префиксом оператора сам:

    es/movb %al,%var   # same as above

Косвенные операнды памяти

Косвенные операнды памяти вычисляются от содержания регистров во время выполнения. Косвенный операнд памяти может содержать базовый регистр, и индексный регистр, масштаб и смещение. Самая общая форма:

смещение(base_register, index_register, масштаб)

смещение является непосредственным значением. Базовые и индексные регистры могут быть любыми 32-разрядными общими именами регистра, за исключением того, что %esp не может использоваться в качестве индексного регистра. масштаб должен быть 1, 2, 4, или 8; никакие другие значения не позволяются. Смещение и масштаб могут быть опущены, но должен быть указан по крайней мере один регистр. Кроме того, если элементы от конца опущены, предыдущие запятые могут также быть опущены, но должна остаться запятая после опущенного элемента:

10(%eax,%edx)
(%eax)
12(,%ecx,2)
12(,%ecx)

Значение косвенного операнда памяти является ячейкой памяти, данной содержанием регистра относительно базового адреса сегмента. Используемый сегментный регистр %ss когда базовый регистр %ebp или %esp, и %ds для всех других базовых регистров. Например:

movl (%eax),%edx    # default segment register here is %ds

Вышеупомянутая ассемблерная инструкция перемещает 32 бита от адреса, данного %eax в %edx регистр. Адрес %eax относительно %ds сегментный регистр. Различный сегментный регистр от значения по умолчанию может быть указан путем добавления префикса операнда с именем сегментного регистра и двоеточием (‘: ’):

movl %es:(%eax),%edx

Переопределение сегмента может также быть указано как префикс оператора:

es/movl (%eax),%edx

Инструкции Ассемблера i386

Отметьте следующие моменты об информации, содержавшейся в этом разделе:

A

Имя

Оператор

Операнд

Имя работы

aaa

aaa

ASCII Корректируется после Дополнения

aad

aad

ASCII Корректирует AX перед Подразделением

aam

aam

ASCII Корректирует AX после Подразделения

научный работник

научный работник

ASCII Корректирует AL после Вычитания

adc

adc

$imm8, r/m8

Добавьте с переносом

adc

$imm16, r/m16

adc

$imm32, r/m32

adc

$imm8, r/m16

adc

$imm8, r/m32

adc

r8, r/m8

adc

r16, r/m16

adc

r32, r/m32

adc

r/m8, r8

adc

r/m16, r16

adc

r/m32, r32

добавить

добавить

$imm8, r/m8

Добавить

добавить

$imm16, r/m16

добавить

$imm32, r/m32

добавить

$imm8, r/m16

добавить

$imm8, r/m32

добавить

r8, r/m8

добавить

r16, r/m16

добавить

r32, r/m32

добавить

r/m8, r8

добавить

r/m16, r16

добавить

r/m32, r32

и

и

$imm8, r/m8

Логический AND

и

$imm16, r/m16

и

$imm32, r/m32

и

$imm8, r/m16

и

$imm8, r/m32

и

r8, r/m8

и

r16, r/m16

и

r32, r/m32

и

r/m8, r8

и

r/m16, r16

и

r/m32, r32

arpl

arpl

r16, r/m16

Скорректируйте поле RPL селектора

B

Имя

Оператор

Операнд

Имя работы

связанный

связанный

m16&16, r16

Проверьте индекс массива по границам

связанный

m32&32, r32

bsf

bsf

r/m16, r16

Разрядное сканирование вперед

bsf

r/m32, r16

bsr

bsr

r/m16, r16

Разрядный реверс сканирования

bsr

r/m32, r16

bswap

bswap

r32

(I486-специфичная) подкачка байта

купленный

купленный

r16, r/m16

Контроль битов

купленный

r32, r/m32

купленный

$imm8, r/m16

купленный

$imm8, r/m32

btc

btc

r16, r/m16

Контроль битов и дополнение

btc

r32, r/m32

btc

$imm8, r/m16

btc

$imm8, r/m32

btr

btr

r16, r/m16

Контроль битов и сброс

btr

r32, r/m32

btr

$imm8, r/m16

btr

$imm8, r/m32

bts

bts

r16, r/m16

Контроль битов и набор

bts

r32, r/m32

bts

$imm8, r/m16

bts

$imm8, r/m32

C

Имя

Оператор

Операнд

Имя работы

вызвать

вызвать

rel16

Процедура вызова

вызвать

r/m16

вызвать

ptr16:16

вызвать

m16:16

вызвать

rel32

вызвать

r/m32

lcall

$imm16, $imm32

lcall

m16

lcall

m32

cbw cwde

cbw

Преобразуйте байт в Word

cwde

Преобразуйте Word в двойное слово

clc

clc

Ясный флаг переноса

cld

cld

Ясный флаг направления

cli

cli

Ясный флаг прерывания

clts

clts

Очистите Переключенный в задачу Флаг inCR0

cmc

cmc

Дополнительный флаг переноса

cmp

cmp

$imm8, r/m8

Сравните два операнда

cmp

$imm16, r/m16

cmp

$imm32, r/m32

cmp

$imm8, r/m16

cmp

$imm8, r/m32

cmp

r8, r/m8

cmp

r16, r/m16

cmp

r32, r/m32

cmp

r/m8, r8

cmp

r/m16, r16

cmp

r/m32, r32

cmps cmpsb cmpsw cmpsd

Сравните строковые операнды

cmps

m8, m8

cmps

m16, m16

cmps

m32, m32

cmpsb

cmpsw

cmpsd

(дополнительные формы с переопределением сегмента)

cmpsb

%seg:0(%esi),%es:0(%edi)

cmpsw

%seg:0(%esi),%es:0(%edi)

cmpsd

%seg:0(%esi),%es:0(%edi)

cmpxchg

cmpxchg

r8, r/m8

Выдержите сравнение и (i486-специфичный) Exchange

cmpxchg

r16, r/m16

cmpxchg

r32, r/m32

cmpxchg8b

cmpxchg8b

m32

Выдержите сравнение и Exchange (специфичных для Pentium) 8 байтов

cpuid

cpuid

(Специфичная для Pentium) идентификация CPU

cwd cdq

cwd

Преобразуйте Word в двойное слово /

cdq

Преобразуйте двойное слово в Quadword

D

Имя

Оператор

Операнд

Имя работы

daa

daa

Десятичное число Корректирует AL после Дополнения

десять кубометров

десять кубометров

Десятичное число Корректирует AL после Вычитания

декабрь

декабрь

r/m8

Декремент 1

декабрь

r/m16

декабрь

r/m32

декабрь

r16

декабрь

r32

отделение

отделение

r/m8,%al

Деление без знака

отделение

r/m16,%ax

отделение

r/m32,%eax

E

Имя

Оператор

Операнд

Имя работы

войти

войти

$imm16, $imm8

Сделайте стековый фрейм для параметров процедуры

F

Имя

Оператор

Операнд

Имя работы

f2xm1

f2xm1

Компьютер 2x–1

fabs

fabs

Абсолютное значение

fadd faddp fiadd

Добавить

fadd

m32real

fadd

m64real

fadd

СВ. (i), СВ.

fadd

СВ., СВ. (i)

faddp

СВ., СВ. (i)

fadd

fiadd

m32int

fiadd

m16int

fbld

fbld

m80dec

Загрузите двоично-десятичное число

fbstp

fbstp

m80dec

Сохраните двоично-десятичное число и популярность

fchs

fchs

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

fclex fnclex

fclex

Ясные исключения

fnclex

fcom fcomp fcompp

Выдержите сравнение реальный

fcom

m32real

fcom

m64real

fcom

СВ. (i)

fcom

fcomp

m32real

fcomp

m64real

fcomp

СВ. (i)

fcomp

fcompp

fcos

fcos

Косинус

fdecstp

fdecstp

Постепенно уменьшите главный штабелем указатель

fdiv fdivp fidiv

Разделиться

fdiv

m32real

fdiv

m64real

fdiv

СВ. (i), СВ.

fdiv

СВ., СВ. (i)

fdivp

СВ., СВ. (i)

fdiv

fidiv

m32int

fidiv

m16int

fdivr fdivpr fidivr

Обратное деление

fdivr

m32real

fdivr

m64real

fdivr

СВ. (i), СВ.

fdivr

СВ., СВ. (i)

fdivrp

СВ., СВ. (i)

fdivr

fidivr

m32int

fidivr

m16int

ffree

ffree

СВ. (i)

Свободный регистр с плавающей точкой

ficom ficomp

Сравните целое число

ficom

m16real

ficom

m32real

ficomp

m16int

ficomp

m32int

fild

filds

m16int

Целое число загрузки

fildl

m32int

fildq

m64int

fincstp

fincstp

Постепенно увеличьте главный штабелем указатель

конечный fninit

конечный

Инициализируйте модуль с плавающей точкой

fninit

кулак fistp

кулаки

m16int

Целое число хранилища

fistl

m32int

fistps

m16int

fistpl

m32int

fistpq

m64int

fld

flds

m32real

Реальная загрузка

fldl

m64real

fldt

m80real

fld

СВ. (i)

fld1 fldl2t fldl2e fldpi fldlg2 gldln2 fldz

Постоянная загрузка

fld1

fld2t

fld2e

fldpi

fldlg2

fldln2

fldz

fldcw

fldcw

m2byte

Word управления нагрузкой

fldenv

fldenv

m14/28byte

Загрузите среду FPU

fmul fmulp fimul

Умножиться

fmul

m32real

fmul

m64real

fmul

СВ. (i), СВ.

fmul

СВ. (i), СВ.

fmulp

СВ., СВ. (i)

fmul

fimul

m32int

fimul

m16int

fnop

fnop

Никакая работа

fpatan

fpatan

Частичный арктангенс

fprem

fprem

Частичный остаток

fprem1

fprem1

Частичный остаток

fptan

fptan

Частичная касательная

frndint

frndint

Вокруг к целому числу

frstor

frstor

m94/108byte

Восстановите состояние FPU

fsave fnsave

Сохраните состояние FPU

fsave

m94/108byte

fnsave

m94/108byte

fscale

fscale

Масштаб

fsin

fsin

Синус

fsincos

fsincos

Синус и косинус

fsqrt

fsqrt

Квадратный корень

fst fstp

fst

m32real

Реальное хранилище

fst

m64real

fst

СВ. (i)

fstp

m32real

fstp

m64real

fstp

m80real

fstp

СВ. (i)

fstcw fnstcw

Сохраните управляющее слово

fstcw

m2byte

fnstcw

m2byte

fstenv fnstenv

Сохраните среду FPU

fstenv

m14/28byte

fnstenv

m14/28byte

fstsw fnstsw

Word состояния хранилища

fstsw

m2byte

fstsw

%ax

fnstsw

m2byte

fnstsw

%ax

fsub fsubp fisub

Вычесть

fsub

m32real

fsub

m64real

fsub

СВ. (i), СВ.

fsub

СВ., СВ. (i)

fsubp

СВ., СВ. (i)

fsub

fisub

m32int

fisub

m16int

fsubr fsubpr fisubr

Реверс вычитает

fsubr

m32real

fsubr

m64real

fsubr

СВ. (i), СВ.

fsubr

СВ., СВ. (i)

fsubpr

СВ., СВ. (i)

fsubr

fisubr

m32int

fisubr

m16int

ftst

ftst

Тест

fucom fucomp fucompp

Неупорядоченный выдерживают сравнение реальный

fucom

СВ. (i)

fucom

fucomp

СВ. (i)

fucomp

fucompp

fwait

fwait

Ожидать

fxam

fxam

Исследовать

fxch

fxch

СВ. (i)

Содержание регистра Exchange

fxch

fxtract

fxtract

Экспонента выдержки и мантисса

fyl2x

fyl2x

Вычислите y ¥ log2x

fyl2xp1

fyl2xp1

Вычислите y ¥ log2 (x+1)

H

Имя

Оператор

Операнд

Имя работы

hlt

hlt

Останов

Я

Имя

Оператор

Операнд

Имя работы

idiv

idiv

r/m8

Подписанный делятся

idiv

r/m16,%ax

idiv

r/m32,%eax

imul

imul

r/m8

Подписанный умножаются

imul

r/m16

imul

r/m32

imul

r/m16, r16

imul

r/m32, r32

imul

$imm8, r/m16, r16

imul

$imm8, r/m32, r32

imul

$imm8, r16

imul

$imm8, r32

imul

$imm16, r/m16, r16

imul

$imm32, r/m32, r32

imul

$imm16, r16

imul

$imm32, r32

в

в

$imm8,%al

Ввод от порта

в

$imm8,%ax

в

$imm8,%eax

в

%dx,%al

в

%dx,%ax

в

%dx,%eax

inc

inc

r/m8

Инкремент 1

inc

r/m16

inc

r/m32

inc

r16

inc

r32

ins insb insw insd

Ввод от порта для строкового представления

ins

insb

insw

insd

интервал в

интервал

3

Вызовите к процедуре обработки прерываний

интервал

$imm8

в

invd

invd

Лишите законной силы (i486-специфичный) кэш

invlpg

invlpg

m

Лишите законной силы (i486-специфичную) запись TLB

iret iretd

iret

Возврат из прерывания

iretd

J

Имя

Оператор

Операнд

Имя работы

jcc

Переход, если Удовлетворяют Условию

ja

rel8

короткий, если выше

jae

rel8

короткий, если выше или равный

jb

rel8

короткий, если ниже

jbe

rel8

короткий, если ниже или равный

jc

rel8

короткий, если перенос

jcxz

rel8

короткий, если %cx регистр 0

jecxz

rel8

короткий, если %ecx регистр 0

je

rel8

короткий, если равный

jz

rel8

короткий, если 0

jg

rel8

короткий, если больше

jge

rel8

короткий, если больше или равный

jl

rel8

короткий, если меньше

jle

rel8

короткий, если меньше или равный

jna

rel8

короткий, если не выше

jnae

rel8

короткий, если не выше или равный

jnb

rel8

короткий, если не ниже

jnbe

rel8

короткий, если не ниже или равный

jnc

rel8

короткий, если не переносят

jne

rel8

короткий, если не равный

jng

rel8

короткий, если не больше

jnge

rel8

короткий, если не больше или равный

jnl

rel8

короткий, если не меньше

jnle

rel8

короткий, если не меньше или равный

jno

rel8

короткий, если не переполняются

jnp

rel8

короткий, если не четность

jns

rel8

короткий, если не подписываются

jnz

rel8

короткий, если не 0

jo

rel8

короткий, если переполнение

мировой судья

rel8

короткий, если четность

jpe

rel8

короткий, если четность даже

jpo

rel8

короткий, если нечетная четность

js

rel8

короткий, если знак

jz

rel8

короткий, если нуль

ja

rel16/32

рядом, если выше

jae

rel16/32

рядом, если выше или равный

jb

rel16/32

рядом, если ниже

jbe

rel16/32

рядом, если ниже или равный

jc

rel16/32

рядом, если перенос

je

rel16/32

рядом, если равный

jz

rel16/32

рядом, если 0

jg

rel16/32

рядом, если больше

jge

rel16/32

рядом, если больше или равный

jl

rel16/32

рядом, если меньше

jle

rel16/32

рядом, если меньше или равный

jna

rel16/32

рядом, если не выше

jnae

rel16/32

рядом, если не выше или равный

jnb

rel16/32

рядом, если не ниже

jnbe

rel16/32

рядом, если не ниже или равный

jnc

rel16/32

рядом, если не переносят

jne

rel16/32

рядом, если не равный

jng

rel16/32

рядом, если не больше

jnge

rel16/32

рядом, если не больше или меньше

jnl

rel16/32

рядом, если не меньше

jnle

rel16/32

рядом, если не меньше или равный

jno

rel16/32

рядом, если не переполняются

jnp

rel16/32

рядом, если не четность

jns

rel16/32

рядом, если не подписываются

jnz

rel16/32

рядом, если не 0

jo

rel16/32

рядом, если переполнение

мировой судья

rel16/32

рядом, если четность

jpe

rel16/32

рядом, если четность даже

jpo

rel16/32

рядом, если нечетная четность

js

rel16/32

рядом, если знак

jz

rel16/32

рядом, если 0

jmp

jmp

rel8

Переход

jmp

rel16

jmp

r/m16

jmp

rel32

jmp

r/m32

ljmp

$imm16, $imm32

ljmp

m16

ljmp

m32

L

Имя

Оператор

Операнд

Имя работы

lahf

lahf

Флаги загрузки в регистр AH

lar

lar

r/m16, r16

Загрузите байт прав доступа

lar

r/m32, r32

lea

lea

m, r16

Загрузите исполнительный адрес

lea

m, r32

отпуск

отпуск

Выход процедуры высокого уровня

lgdt lidt

lgdt

m16&32

Глобальная переменная/Прерывание загрузки

lidt

m16&32

Регистр таблицы дескрипторов

lgs lss lds les lfs

Загрузите полный указатель

lgs

m16:16, r16

lgs

m16:32, r32

lss

m16:16, r16

lss

m16:32, r32

lds

m16:16, r16

lds

m16:32, r32

les

m16:16, r16

les

m16:32, r32

lfs

m16:16, r16

lfs

m16:32, r32

lldt

lldt

r/m16

Загрузите регистр локальной таблицы дескрипторов

lmsw

lmsw

r/m16

Word состояния машины загрузки

блокировка

блокировка

Утверждайте префикс сигнала LOCK#

lods lodsb lodsw lodsd

Операнд строки загрузки

lods

m8

lods

m16

lods

m32

lodsb

lodsw

lodsd

(дополнительные формы с переопределением сегмента)

lodsb

%seg:0(%esi),%al

lodsw

%seg:0(%esi),%al

lodsd

%seg:0(%esi),%al

цикл loopcond

Управление циклом со счетчиком CX

цикл

rel8

loope

rel8

циклы

rel8

loopne

rel8

loopnz

rel8

lsl

lsl

r/m16, r16

Предел сегмента загрузки

lsl

r/m32, r32

буква

буква

r/m16

Загрузите регистр задачи

M

Имя

Оператор

Операнд

Имя работы

mov

mov

r8, r/m8

Переместите данные

mov

r16, r/m16

mov

r32, r/m32

mov

r/m8, r8

mov

r/m16, r16

mov

r/m16, r16

mov

Sreg, r/m16

mov

r/m16, Sreg

mov

moffs8,%al

mov

moffs8,%ax

mov

moffs8,%eax

mov

%al, moffs8

mov

%ax, moffs16

mov

%eax, moffs32

mov

$imm8, reg8

mov

$imm16, reg16

mov

$imm32, reg32

mov

$imm8, r/m8

mov

$imm16, r/m16

mov

$imm32, r/m32

mov

mov

r32,%cr0

Переместитесь в Специальные Регистры

mov

%cr0/%cr2/%cr3, r32

mov

%cr2/%cr3, r32

mov

%dr0–3, r32

mov

%dr6/%dr7, r32

mov

r32,%dr0–3

mov

r32,%dr6/%dr7

mov

%tr4/%tr5/%tr6/%tr7, r32

mov

r32,%tr4/%tr5/%tr6/%tr7

mov

%tr3, r32

mov

r32,%tr3

movs movsb movsw movsd

Переместите данные от строки до строки

movs

m8, m8

movs

m16, m16

movs

m32, m32

movsb

movsw

movsd

(дополнительные формы с переопределением сегмента)

movsb

%seg:0(%esi),%es:0(%edi)

movsw

%seg:0(%esi),%es:0(%edi)

movsd

%seg:0(%esi),%es:0(%edi)

movsx

movsx

r/m8, r16

Переместитесь со знаком - расширяются

movsx

r/m8, r32

movsx

r/m16, r32

movzx

movzx

r/m8, r16

Переместитесь с нулем - расширяются

movzx

r/m8, r32

movzx

r/m16, r32

mul

mul

r/m8,%al

Умножение без знака AL или AX

mul

r/m16,%ax

mul

r/m32,%eax

N

Имя

Оператор

Операнд

Имя работы

отрицательный

отрицательный

r/m8

Дополнительное отрицание Туо

отрицательный

r/m16

отрицательный

r/m32

только для указанных целей

только для указанных целей

Никакая работа

нет

нет

r/m8

Отрицание поразрядного дополнения до единицы

нет

r/m16

нет

r/m32

O

Имя

Оператор

Операнд

Имя работы

или

или

$imm8, r/m8

Логический содержащий OR

или

$imm16, r/m16

или

$imm32, r/m32

или

$imm8, r/m16

или

$imm8, r/m32

или

r8, r/m8

или

r16, r/m16

или

r32, r/m32

или

r/m8, r8

или

r/m16, r16

или

r/m32, r32

%al, $imm8

Вывод к порту

%ax, $imm8

%eax, $imm8

%al,%dx

%ax,%dx

%eax,%dx

outs outsb outsw outsd

Выводимая строка к порту

outs

r/m8,%dx

outs

r/m16,%dx

outs

r/m32,%dx

outsb

outsw

outsd

P

Имя

Оператор

Операнд

Имя работы

популярность

популярность

m16

Вытолкайте Word от штабеля

популярность

m32

популярность

r16

популярность

r32

популярность

%ds

популярность

%es

популярность

%ss

популярность

%fs

популярность

%gs

папа popad

Вытолкайте все Общие Регистры

папа

popad

popf popfd

popf

Популярный штабель в FLAGS или

popfd

Регистр EFLAGS

продвинуть

продвинуть

m16

Продвиньте Операнд на Штабель

продвинуть

m32

продвинуть

r16

продвинуть

r32

продвинуть

$imm8

продвинуть

$imm16

продвинуть

$imm32

продвинуть

Sreg

pusha продвинут

Продвиньте все Общие Регистры

pusha

продвинутый

pushf pushfd

Продвиньте Регистр Флагов на Штабель

pushf

pushfd

R

Имя

Оператор

Операнд

Имя работы

rcl rcr rol ror

Вращаться

rcl

1, r/m8

rcl

%cl, r/m8

rcl

$imm8, r/m8

rcl

1, r/m16

rcl

%cl, r/m16

rcl

$imm8, r/m16

rcl

1, r/m32

rcl

%cl, r/m32

rcl

$imm8, r/m32

rcr

1, r/m8

rcr

%cl, r/m8

rcr

$imm8, r/m8

rcr

1, r/m16

rcr

%cl, r/m16

rcr

$imm8, r/m16

rcr

1, r/m32

rcr

%cl, r/m32

rcr

$imm8, r/m32

rol

1, r/m8

rol

%cl, r/m8

rol

$imm8, r/m8

rol

1, r/m16

rol

%cl, r/m16

rol

$imm8, r/m16

rol

1, r/m32

rol

%cl, r/m32

rol

$imm8, r/m32

ror

1, r/m8

ror

%cl, r/m8

ror

$imm8, r/m8

ror

1, r/m16

ror

%cl, r/m16

ror

$imm8, r/m16

ror

1, r/m32

ror

%cl, r/m32

ror

$imm8, r/m32

rdmsr

rdmsr

Читайте из модели-специфичного (специфичного для Pentium) регистра

rdstc

rdstc

Читайте из (специфичного для Pentium) счетчика метки времени

репутация repe repz repne repnz

Повторите следующую строку

rep/ins

%dx, rm8

Работа

rep/ins

%dx, rm16

rep/ins

%dx, rm32

rep/movs

m8, m8

rep/movs

m16, m16

rep/movs

m32, m32

rep/outs

rm8,%dx

rep/outs

rm16,%dx

rep/outs

rm32,%dx

rep/lods

m8

rep/lods

m16

rep/lods

m32

rep/stos

m8

rep/stos

m16

rep/stos

m32

repe/cmps

m8, m8

repe/cmps

m16, m16

repe/cmps

m32, m32

repe/scas

m8

repe/scas

m16

repe/scas

m32

repne/cmps

m8, m8

repne/cmps

m16, m16

repne/cmps

m32, m32

repne/scas

m8

repne/scas

m16

repne/scas

m32

мочить

мочить

Возвратитесь из процедуры

мочить

$imm16

rsm

rsm

Резюме от (специфичного для Pentium) режима управления системой

S

Имя

Оператор

Операнд

Имя работы

sahf

sahf

Сохраните AH во флаги

SAR соли shl shr

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

соль

1, r/m8

соль

%cl, r/m8

соль

$imm8, r/m8

соль

1, r/m16

соль

%cl, r/m16

соль

$imm8, r/m16

соль

1, r/m32

соль

%cl, r/m32

соль

$imm8, r/m32

SAR

1, r/m8

SAR

%cl, r/m8

SAR

$imm8, r/m8

SAR

1, r/m16

SAR

%cl, r/m16

SAR

$imm8, r/m16

SAR

1, r/m32

SAR

%cl, r/m32

SAR

$imm8, r/m32

shl

1, r/m8

shl

%cl, r/m8

shl

$imm8, r/m8

shl

1, r/m16

shl

%cl, r/m16

shl

$imm8, r/m16

shl

1, r/m32

shl

%cl, r/m32

shl

$imm8, r/m32

shr

1, r/m8

shr

%cl, r/m8

shr

$imm8, r/m8

shr

1, r/m16

shr

%cl, r/m16

shr

$imm8, r/m16

shr

1, r/m32

shr

%cl, r/m32

shr

$imm8, r/m32

sbb

sbb

$imm8, r/m8

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

sbb

$imm16, r/m16

sbb

$imm32, r/m32

sbb

$imm8, r/m16

sbb

$imm8, r/m32

sbb

r8, r/m8

sbb

r16, r/m16

sbb

r32, r/m32

sbb

r/m8, r8

sbb

r/m16, r16

sbb

r/m32, r32

scas scasb scasw scasd

Сравните строковые данные

scas

m8

scas

m16

scas

m32

scasb

scasw

scasd

(дополнительные формы с переопределением сегмента)

scasb

%al,%seg:0(%edi)

scasw

%ax,%seg:0(%edi)

scasd

%eax,%seg:0(%edi)

setcc

Набор байта при условии

ость

r/m8

выше

ости

r/m8

выше или равный

setb

r/m8

ниже

setbe

r/m8

ниже или равный

setc

r/m8

перенос

Сет

r/m8

равный

setg

r/m8

больше

setge

r/m8

больше или равный

setl

r/m8

меньше

рассчитаться

r/m8

меньше или равный

setna

r/m8

не выше

setnae

r/m8

не abover или равный

setnb

r/m8

не ниже

setnbe

r/m8

не ниже или равный

setnc

r/m8

не переносят

setne

r/m8

не равный

setng

r/m8

не больше

setnge

r/m8

не больше или равный

setnl

r/m8

не меньше

setnle

r/m8

не меньше или равный

setno

r/m8

не переполняются

setnp

r/m8

не четность

setns

r/m8

не подписываются

setnz

r/m8

не нуль

заваруха

r/m8

переполнение

setp

r/m8

четность

setpe

r/m8

четность даже

setpo

r/m8

нечетная четность

наборы

r/m8

знак

setz

r/m8

нуль

sgdt sidt

sgdt

m

Глобальная переменная/Прерывание хранилища

sidt

m

Регистр таблицы дескрипторов

shld

shld

$imm8, r16, r/m16

Оставленный сдвиг двойной точности

shld

$imm8, r32, r/m32

shld

%cl, r16, r/m16

shld

%cl, r32, r/m32

shrd

shrd

$imm8, r16, r/m16

Право сдвига двойной точности

shrd

$imm8, r32, r/m32

shrd

%cl, r16, r/m16

shrd

%cl, r32, r/m32

sldt

sldt

r/m16

Сохраните регистр локальной таблицы дескрипторов

smsw

smsw

r/m16

Word состояния машины хранилища

stc

stc

Установите флаг переноса

станд.

станд.

Установите флаг направления

sti

sti

Установите флаг прерывания

stos stosb stosw stosd

Храните строковые данные

stos

m8

stos

m16

stos

m32

stosb

stosw

stosd

(дополнительные формы с переопределением сегмента)

stosb

%al,%seg:0(%edi)

stosw

%ax,%seg:0(%edi)

stosd

%eax,%seg:0(%edi)

str

str

r/m16

Сохраните регистр задачи

sub

sub

$imm8, r/m8

Целочисленное вычитание

sub

$imm16, r/m16

sub

$imm32, r/m32

sub

$imm8, r/m16

sub

$imm8, r/m32

sub

r8, r/m8

sub

r16, r/m16

sub

r32, r/m32

sub

r/m8, r8

sub

r/m16, r16

sub

r/m32, r32

T

Имя

Оператор

Операнд

Имя работы

тест

тест

$imm8, r/m8

Логичный выдерживают сравнение

тест

$imm16, r/m16

тест

$imm32, r/m32

тест

r8, r/m8

тест

r16, r/m16

тест

r32, r/m32

V

Имя

Оператор

Операнд

Имя работы

verr verw

verr

r/m16

Проверьте сегмент для чтения или записи

verw

r/m16

W

Имя

Оператор

Операнд

Имя работы

ожидать

ожидать

Ожидать

wbinvd

wbinvd

Обратная запись и лишает законной силы (i486-специфичный) кэш

wrmsr

wrmsr

Запишите в модели-специфичный (специфичный для Pentium) регистр

X

Имя

Оператор

Операнд

Имя работы

xadd

xadd

r8, r/m8

Exchange и добавляет (i486-специфичный)

xadd

r16, r/m16

xadd

r32, r/m32

xchg

xchg

r16,%ax

Регистр/Память Exchange

xchg

%ax, r16

с Регистром

xchg

%eax, r32

xchg

r32,%eax

xchg

r8, r/m8

xchg

r/m8, r8

xchg

r16, r/m16

xchg

r/m16, r16

xchg

r32, r/m32

xchg

r/m32, r32

xlat xlatb

xlat

m8

Перевод поиска по таблице

xlatb

xor

xor

$imm8, r/m8

Логический монопольный OR

xor

$imm16, r/m16

xor

$imm32, r/m32

xor

$imm8, r/m16

xor

$imm8, r/m32

xor

r8, r/m8

xor

r16, r/m16

xor

r32, r/m32

xor

r/m8, r8

xor

r/m16, r16

xor

r/m32, r32