Описание команд микропроцессора, упорядоченное по функциональному признаку
aaa
aad
aam
aas
adc
add
and
bound
bsf
bsr
bswap
bt
btc
btr
bts
call
cbw
cwde
clc
cld
cli
cmc
cmp
cmps/cmpsb
/cmpsw/cmpsd
cmpxchg
cwd
cdq
daa
das
dec
div
enter
hlt
idiv
imul
in
inc
ins/insb
/insw/insd
int
into
iret/iretd
jcc
jcxz
jecxz
jmp
lahf
lds
les
lfs
lgs
lss
lea
leave
lgdt
lidt
lods/lodsb
/lodsw/lodsd
loop
loope
loopz
loopne
loopnz
mov
movs/movsb
/movsw/movsd
movsx
movzx
mul
neg
nop
not
or
out
outs
pop
popa
popad
popf
popfd
push
pusha
pushad
pushf
pushfd
rcl
rcr
rep/repe/repz
/repne/repnz
ret/retf
rol
ror
sahf
sal
sar
sbb
scas/scasb
/scasw/scasd
setcc
sgdt
sidt
shl
shld
shr
shrd
stc
std
sti
stos/stosb
/stosw/stosd
sub
test
xadd
xchg
xlat/xlatb
xor
Порядок описания команд будет следующим:
название команды с расшифровкой ее мнемонического обозначения — это облегчит процесс запоминания и последующего использования команды в соответствии с ее функциональным назначением;
синтаксическое описание команды, поясняющее возможные сочетания операндов для данной команды. При этом сложные синтаксические описания будут приведены в виде синтаксических диаграмм, что позволит в наиболее компактной форме изобразить все возможные сочетания операндов;
состояние флагов после выполнения команды;
описание типового применения команды с примером и (или) ссылка на урок, в котором демонстрируется пример применения команды;
номера занятий и приложений, а также список команд, которые функционально связаны с данной командой.
Для описания команд приняты обозначения:
Для описания состояния флагов после выполнения некоторой команды будем использовать выборку из таблицы, отражающей структуру регистра флагов eflags:
VM
RF
NT
IOPL
OF
DF
IF
TF
SF
ZF
AF
PF
CF
В нижней строке этой таблицы приводятся значения флагов после выполнения команды. При этом используются следующие обозначения:
1 — после выполнения команды флаг устанавливается (равен 1);
0 — после выполнения команды флаг сбрасывается (равен 0);
r — значение флага зависит от результата работы команды;
? — после выполнения команды флаг не определен;
пробел — после выполнения команды флаг не изменяется;
Для представления операндов в синтаксических диаграммах используются следующие обозначения:
r8, r16, r32 — операнд в одном из регистров размером байт, слово или двойное слово;
m8, m16, m32, m48 — операнд в памяти размером байт, слово, двойное слово или 48 бит;
i8, i16, i32 — непосредственный операнд размером байт, слово или двойное слово;
a8, a16, a32 — относительный адрес (смещение) в сегменте кода.
На многих диаграммах в целях компактности возможные сочетания операндов показаны в виде следующей конструкции:
Конструируя команду на основе подобной синтаксической диаграммы, вы должны помнить о соответствии типов. В подобной диаграмме допустимы только следующие сочетания: "r8, m8", "r16, m16", "r32, m32". Например, сочетание "r8, m16" недопустимо. Однако есть единичные случаи, когда подобные сочетания возможны; тогда они специально оговариваются.
Описанная в данном приложении система команд в полном объеме поддерживается микропроцессором Pentium. Предыдущие модели микропроцессора могут не поддерживать отдельные команды. Чтобы прояснить этот момент, мы будем указывать в примерах для каждой команды директиву типа .286. Это будет означать, что описываемая команда поддерживается всеми моделями микропроцессора, начиная с i286. Если ничего не указывается, то это означает, что данная команда работает на всех моделях микропроцессоров Intel, начиная с i8086/8088.