
- •Команды пересылки и условия
- •Передача и возврат управления
- •Пересылка данных
- •Условные команды
- •Базовая арифметика (основной набор)
- •Арифметика: сложение и вычитание
- •Арифметика: умножение и деление
- •Знаковое расширение A и обнуление
- •Загрузка значений в стек FPU
- •Выгрузка и пересылка значений
- •Основные арифметические операции
- •Дополнительные арифметические и трансцендентные команды
- •FPU (флаги)
- •Команды сравнения

МИЭТ, СПИНТех, КАИ |
Команды, упоминаемые на прошедших лекциях |
1 / 18 |
Команды, упоминаемые на прошедших лекциях (основной набор+FPU)
Александра Игоревна Кононова
МИЭТ
11 сентября 2021 г. актуальную версию можно найти на https://gitlab.com/illinc/arch-cs
Команды пересылки и условия Базовая арифметика (основной набор)
FPU FPU (флаги)

МИЭТ, СПИНТех, КАИ Команды, упоминаемые на прошедших лекциях 2 / 18
Команды пересылки и условия: условные обозначения
1 Источник src (регистр, память или непосредственное значение),
srm (регистр или память),
smem (только память),
sreg (только регистр),
imm (непосредственный).
2 Приёмник dest (регистр или память),
dmem (только память),
dreg (только регистр).
3Фиксированный размер src8, dest64.
Если мнемоника команды AT&T отличается от приведённой в документации AMD/Intel: первая колонка показывает мнемонику AT&T, вторая мнемонику Intel.
Команды пересылки и условия |
Передача и возврат управления |
Базовая арифметика (основной набор) |
Пересылка данных |
FPU |
Условные команды |
FPU (флаги) |
Условия |

МИЭТ, СПИНТех, КАИ Команды, упоминаемые на прошедших лекциях 3 / 18
Передача и возврат управления
jmp smem |
передача управления (goto smem) smem ! ip |
||
jCC smem |
передача управления smem ! ip, если верно CC 2 flags |
||
call smem |
вызов подпрограммы |
push ip; |
smem ! ip |
ret |
возврат |
pop ip |
|
ret imm16 |
возврат с чисткой стека |
pop ip; |
sp += imm16 |
Флаги: не изменяются
|
|
: : : |
|
|
sp |
|
: : : |
|
|
|
|
: : : |
|
|
|
|
: : : |
|
|
sp |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Стек |
|
|
|
|
|
|
ci+1 |
|
|
sp |
|
ci+1 |
|
|
sp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
: : : |
|
|
|
|
: : : |
|
|
|
|
: : : |
|
|
|
|
: : : |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ret |
|
|
|
|
ret |
|
|
|
|
ret |
|
|
ip |
|
ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
: : : |
|
|
f() |
|
: : : |
|
|
|
|
: : : |
|
|
|
|
: : : |
|
|
|
Код |
f : |
|
|
|
|
f : |
|
|
|
ip |
f : |
|
|
|
|
f : |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
: : : |
|
|
|
|
: : : |
|
|
|
|
: : : |
|
|
|
|
: : : |
|
|
|
|
ci+1 : |
|
|
|
|
ci+1 : |
|
|
|
|
ci+1 : |
|
|
|
|
ci+1 : |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ip |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
ci : |
call f |
|
|
ip |
ci : |
call f |
|
|
|
ci : |
call f |
|
|
|
ci : |
call f |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
адреса растут снизу вверх
а) |
б) |
в) |
|
г) |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|||||||
Команды пересылки и условия |
Передача и возврат управления |
|||||||||||
Базовая арифметика (основной набор) |
Пересылка данных |
|
|
|
|
|
|
|
|
|
|
|
|
FPU |
Условные команды |
|
|
|
|
|
|
|
|
|
|
|
FPU (флаги) |
Условия |
|
|
|
|
|
|
|
|
|
|

МИЭТ, СПИНТех, КАИ |
Команды, упоминаемые на прошедших лекциях |
4 / 18 |
Пересылка данных
Пересылка и обмен (размер src и dest совпадает, кроме lea)
mov src, dest |
|
src ! dest |
|
|
movabs imm64, dreg64 |
mov |
imm64 ! dreg64 |
(ABSolute address) |
|
lea smem, |
dreg |
|
&smem ! dreg |
(Load E ective Address) |
xchg srm, |
dest |
|
обмен значений srm |
! dest |
Условная пересылка cmovCC srm, dreg (не очищает конвейер) слайды 5, 6
Пересылка с изменением размера (jsrmj < 32 бит)
|
movs srm, dreg |
movsx |
|
srm ! dreg со знаковым (Sign) расширением |
|
|||||||||||||||
|
movz srm, dreg |
movzx |
|
srm ! dreg с беззнаковым (Zero) расширением |
|
|||||||||||||||
|
|
|
|
|
|
|
||||||||||||||
|
movslq srm32, dreg64 |
|
movsxd |
srm32 ! dreg64 со зн-м (Sign) расш-м |
|
|||||||||||||||
|
|
Работа со стеком (стековое слово=разрядности режима) |
|
|||||||||||||||||
|
push src |
помещение src в стек: |
|
sp = sizeof(src); src ! sp |
|
|||||||||||||||
|
pop dest |
выталкивание из стека в dest: |
sp ! dest; sp += sizeof(dest) |
|
||||||||||||||||
|
|
|
|
|
|
Флаги: не изменяются |
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
||||||||||||||||
|
|
Команды пересылки и условия |
Передача и возврат управления |
|
||||||||||||||||
|
Базовая арифметика (основной набор) |
Пересылка данных |
|
|||||||||||||||||
|
|
|
|
|
|
|
FPU |
Условные команды |
|
|||||||||||
|
|
|
|
|
|
FPU (флаги) |
Условия |
|
|
|
|
|
|
|
|
|
|
|
|

МИЭТ, СПИНТех, КАИ |
Команды, упоминаемые на прошедших лекциях |
5 / 18 |
Условные команды
Условные команды CPU (CC кроме u, nu)
jmp addr |
безусловная передача управления (goto addr) |
|
|
addr ! ip |
|
jCC addr |
условная передача управления addr ! ip, если |
|
|
CC 2 flags |
|
cmovCC srm, dreg |
условная пересылка в регистр CPU srm ! dreg, |
|
|
если CC 2 flags |
|
setCC dest8 |
условная установка байта |
|
|
1 |
! dest8; если CC 2 flags |
|
0 |
! dest8; если CC 2= flags |
Условная команда FPU (CC e, ne, b/nae, be/na, ae/nb, a/nbe, u, nu) fcmovCC %st(i), %st(0) условная пересылка в регистр FPU
%st(i) ! %st(0), если CC 2 flags
Флаги: не изменяются
Команды пересылки и условия |
Передача и возврат управления |
Базовая арифметика (основной набор) |
Пересылка данных |
FPU |
Условные команды |
FPU (флаги) |
Условия |

CC |
Флаги |
Результат сл/выч |
|
sub/cmp src, dest |
and/test src, dest |
fucomi %st(i), %st(0) |
|||||||
e/z |
ZF = 1 |
= 0 |
dest src = 0 |
|
dest & src = 0 |
st(0) src = 0 |
|||||||
ne/nz |
ZF = 0 |
6= 0 |
dest src |
6= 0 |
|
|
dest & src 6= 0 |
st(0) src 6= 0 |
|||||
c/b/nae |
CF = 1 |
перенос |
dest src < 0 |
|
как беззнаковое |
никогда |
st(0) src < 0 |
||||||
|
CF = 1 |
|
|
|
dest src 6 0 |
|
|
st(0) src 6 0 |
|||||
na/be |
ZF = 1 |
|
|
|
dest & src = 0 |
||||||||
nc/nb/ae |
CF = 0 |
нет переноса |
dest src > 0 |
всегда |
st(0) src > 0 |
||||||||
|
CF = 0 |
|
|
|
|
|
|
|
|
|
|
|
|
a/nbe |
ZF = 0 |
|
|
|
dest src > 0 |
dest & src 6= 0 |
st(0) src > 0 |
||||||
s |
SF = 1 |
старший (знаковый) бит равен 1 |
|
||||||||||
ns |
SF = 0 |
старший (знаковый) бит равен 0 |
|
||||||||||
|
|
|
|
|
|
|
|
||||||
o |
OF = 1 |
знаковое переполнение |
|
|
|
никогда |
|
||||||
no |
OF = 0 |
нет знакового переполнения |
|
всегда |
|
||||||||
|
|
|
|
|
|
|
|||||||
l/nge |
SF 6= OF |
< 0 |
dest src < 0 |
знаковое |
никогда |
? |
|||||||
le/ng |
SF 6= OF |
|
6 |
0 |
dest |
|
src |
6 |
0 |
|
dest & src = 0 |
|
|
|
ZF = 1 |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|||
nl/ge |
SF = OF |
> 0 |
dest src > 0 |
|
всегда |
|
|||||||
как |
|
||||||||||||
|
SF = OF |
|
|
|
dest src > 0 |
dest & src 6= 0 |
|
||||||
nle/g |
ZF = 0 |
> 0 |
|
|
|||||||||
p/pe/u |
P F = 1 |
число единиц младшего байта чётно |
nan |
||||||||||
np/po/nu |
P F = 0 |
число единиц младшего байта нечётно |
числа |
только jCC, cmovCC, setCC / все условные команды / только fcmovCC