Байтрежимаадресацииmodr/m
Байтрежимаадресацииmodr/m,иногданазываемыйпостбайтом,несетинфор-мациюобоперандахирежимеадресации.БольшинствокомандпроцессораIntel—
Операндымогутнаходитьсявпамяти,атакжеводномилидвух
регистрах.АрхитектураIA-32недопускает,чтобыобаоперандакомандынаходи-лисьвпамяти.Еслиоперанднаходитсявпамяти,тобайтmodr/mопределяетком-поненты(смещение,базовыйииндексныйрегистры),используемыедлявычисле-нияегоэффективногоадреса(см.главу2).Байтmodr/mсостоитизтрехполей(см.рис.3.1).
Полеmod(двабита)определяетспособадресациииколичествобайтов,занима-емыхвкомандеадресомоперанда(полесмещениявкоманде).Полеmodисполь-зуетсясовместносполемr/m,котороеопределяетспособмодификацииадресаоперандаполемсмещениявкоманде.Полеmodвкомбинациисполемr/mобра-зует32возможныхзначения,обозначающиходинизвосьмирегистрови24ре-жимаадресации.Кпримеру,еслиmod=00,тополесмещениявкомандеотсут-ствуетиадресоперандаопределяетсясодержимымбазовогои/илииндексногорегистра.Какиеименнорегистрыпотребуютсядлявычисленияэффективногоадреса,определяетсязначениемэтогобайта.Еслиmod=01,тополесмещениявкомандеприсутствует,занимаетодинбайтимодифицируетсясодержимымбазовогои/илииндексногорегистра.Еслиmod=10,тополесмещениявкоман-деприсутствует,занимаетдваиличетыребайта(взависимостиотзначения,действующегопоумолчаниюилиопределяемогопрефиксомразмераадреса)
ФорматмашинныхкомандIA-32 65
имодифицируетсясодержимымбазовогои/илииндексногорегистра.Еслиmod11,тооперандоввпамятинет—онинаходятсяврегистрах.Этожезначе-ниебайтаmodиспользуетсявслучае,когдакомандаработаетснепосредствен-нымоперандом.
*Полеreg(3бита)определяетлиборегистр(табл.3.3и3.4),находящийсявко-манденаместевторогооперанда,либорасширениекодаоперации
(даваявсовокупностиразмерполяКОПв11битов).
яПолеиспользуетсясовместносполемmodиопределяетлиборегистр,на-ходящийсявкоманденаместепервогооперанда(еслиmod=11),либобазовыеииндексныерегистры,применяемыедлявычисленияэффективногоадреса(со-вместносполемсмещениявкоманде).
Таблица3.3.Значениякодоввполеreg(полеприсутствуетвкоманде)
Полеreg000
001
010
100
101
no111
w=0ALCLDLBL
AHCHDH
w=1AX/EAXCX/ECXDX/EDXBX/EBXSP/ESPBP/EBP
ТаблицаЗ.4.Значениякодоввполеreg(полеwотсутствует)
Полеreg000
001
010
он
100
101
но111
операции
АХ
сх
DXВХSPВРSIDI
32-разрядныеоперации
ЕАХЕСХEDXЕВХESPЕВРESI .
EDI
Втаблицахнетсодержимогополяregдлярегистровв32-разряд-
ныхоперациях,таккаквархитектуреIntelотдельноиспользоватьстаршуюполо-вину32-разрядногорегистраневозможно.
ВархитектуреIntelодинизоперандовобязательнонаходитсяврегистре,ион
можетбытьпервымиливторым.Расположениепервогоивторогооперандоввфор-матекомандыфиксировано.Но,например,командаможетвыполнятьпере-сылкукакизрегистравпамять,такиизпамятиврегистр.Вмашинном
3256
66Глава3.СистемакомандпроцессораIA32
этооднаитажекоманда.Вееполеregбудетсодержатьсякодрегистра(см.табл.3.3и3.4),авполеr/m—кодрежимаадресации(см.далее).Этидвекомандыбудутразличатьсяоднимбитомd,которыйопределяетнаправлениепередачи.
Есливкомандеучаствуютдварегистра,товэтомслучаевступаетвсилуправило:полеregопределяетвторойоперанд,аполе—первый.Есликомандарабо-
таетсячейкойпамяти,товисходномтекстепрограммымогутбытьследующиевариантызаписиэтойкоманды:
movсодержимогоахвячейкупамятиabll
или
movсодержимогоячейкипамятиabllвах
Вмашинномпредставленииэтидвекомандыбудутвыглядетьодинаково,заисключениембитаd:
длякомандыMOVabll,axбитd=0;длякомандыMOVax,abllбитd=1.
Наиболеесложнымидлядекодированияявляютсякомандысоперандомвпа-
мяти.ФирмаIntelсопровождаетописаниесистемыкомандспециальнымитабли-цами,облегчающимиинтерпретациюсодержимогобайтаmodr/m(табл.3.5и3.6).Сихпомощьюможнодовольнолегковосстановитькомпоненты,изкоторыхфор-мировалсяадресоперанда,и,вконечномитоге,восстановитьсоответствующуюкомандуассемблерадляданноймашиннойкоманды.
Таблица3.5.Значениябайтаmodr/mадресация)
/цифра(кодоперации) |
|
|
ALAXEAX 0 |
CLCXECX 1 |
DLDXEDX 2 |
BLBXEBX3 |
AHSPESP 4 |
CHBPEBP 5 |
DHSIESI 6 |
BHDIEDI7 |
||||||
reg |
|
|
000 |
001 |
010 |
on |
100 |
101 |
|
111 |
||||||
Эффективныйадрес mod r/m значенияmodr/m |
||||||||||||||||
[BX+SI] |
00 |
000 |
00 |
08 |
10 |
18 |
20 |
28 |
30 |
38 |
||||||
[BX+DI] |
00 |
001 |
01 |
09 |
11 |
19 |
21 |
29 |
31 |
39 |
||||||
[BP+SI] |
00 |
010 |
02 |
Oa |
12 |
la |
22 |
2a |
32 |
За |
||||||
[BP+DI] |
00 |
|
03 |
Ob |
13 |
|
23 |
2b |
33 |
3b |
||||||
[SI] |
00 |
100 |
04 |
Oc |
14 |
|
24 |
2c |
34 |
3c |
||||||
[DI] |
00 |
101 |
05 |
Od |
15 |
|
25 |
2d |
35 |
3d |
||||||
смещ |
16 |
00 |
ПО |
06 |
Oe |
16 |
|
26 |
2e |
36 |
3e |
|||||
[ВХ] |
|
00 |
111 |
07 |
Of |
17 |
|
27 |
2f |
37 |
3f |
|||||
|
|
01 |
000 |
40 |
48 |
50 |
58 |
60 |
68 |
70 |
78 |
|||||
|
|
01 |
001 |
41 |
49 |
51 |
59 |
61 |
69 |
71 |
79 |
|||||
|
|
01 |
010 |
42 |
4a |
52 |
5a |
62 |
6a |
72 |
7a |
|||||
|
|
01 |
|
43 |
4b |
53 |
5b |
63 |
6b |
73 |
7b |
|||||
|
|
|
100 |
44 |
4c |
54 |
5c |
64 |
6c |
74 |
7c |
|||||
ФорматмашинныхкомандIA-32 67
Эффективныйадрес
mod
r/m
значенияmodг/т
|
01 |
101 |
|
45 |
4d |
55 |
5d |
65 |
6d |
75 |
7d |
[ВР]+смещ_8 |
01 |
110 |
|
46 |
4е |
56 |
5e |
66 |
6e |
76 |
7e |
|
01 |
111 |
|
47 |
4f |
57 |
5f |
67 |
6f |
77 |
7f |
|
10 |
000 |
|
80 |
88 |
90 |
98 |
aO |
a8 |
bO |
b8 |
|
10 |
001 |
|
81 |
89 |
91 |
99 |
|
a9 |
|
b9 |
|
10 |
010 |
|
82 |
8а |
92 |
9a |
a2 |
aa |
b2 |
ba |
|
10 |
011 |
|
83 |
|
93 |
9b |
a3 |
ab |
b3 |
bb |
|
10 |
100 |
|
84 |
8с |
94 |
9c |
a4 |
ac |
b4 |
|
|
10 |
101 |
|
85 |
8d |
95 |
9d |
a5 |
ad |
b5 |
bd |
|
10 |
110 |
|
86 |
8е |
96 |
9e |
a6 |
ae |
b6 |
be |
|
10 |
111 |
|
87 |
8f |
97 |
9f |
a7 |
af |
77 |
bf |
|
11 |
000 |
. |
сО |
с8 |
dO |
d8 |
eO |
e8 |
ГО |
|
|
11 |
001 |
|
|
с9 |
|
d9 |
el |
e9 |
|
|
|
11 |
010 |
|
с2 |
са |
d2 |
Da |
e2 |
ea |
|
fa |
|
И |
011 |
|
сЗ |
cb |
d3 |
Db |
e3 |
eb |
G |
|
ESP/SP/AH |
11 |
100 |
|
с4 |
|
d4 |
DC |
e4 |
ec |
f4 |
fc |
ЕВР/ВР/СН |
11 |
101 |
|
с5 |
cd |
d5 |
Dd |
e5 |
ed |
fS |
fd |
|
11 |
по |
|
|
се |
d6 |
De |
e6 |
ее |
f6 |
fe |
EDI/DI/BH |
11 |
111 |
|
с7 |
cf |
d7 |
Df |
|
ef |
|
ff |
ТаблицаЗ.6.Значениябайтаmodr/m(32-разряднаяадресация)
r32 /цифра(кодоперации) |
|
|
ЕАХ0 |
ЕСХ1 |
EDX2 |
ЕВХ3 |
ESP4 |
ЕВР5 |
ESI6 |
EDI7 |
reg |
|
|
000 |
001 |
010 |
011 |
100 |
101 |
ПО |
111 |
Эффективныйадрес mod r/m Шестнадцатеричныезначенияmod |
||||||||||
[ЕАХ] |
00 |
ооо |
00 |
08 |
10 |
18 |
20 |
28 |
30 |
38 |
[ЕСХ] |
00 |
001 |
01 |
09 |
11 |
19 |
21 |
29 |
31 |
39 |
[EDX] |
00 |
010 |
02 |
Оа |
12 |
1а |
22 |
2а |
32 |
За |
[ЕВХ] |
00 |
|
03 |
Ob |
13 |
|
23 |
|
33 |
|
[sib] |
00 |
100 |
04 |
Ос |
14 |
1с |
24 |
2с |
34 |
Зс |
Смещ32 |
00 |
101 |
05 |
Od |
15 |
|
25 |
2d |
35 |
3d |
[ESI] |
00 |
по |
06 |
Ое |
16 |
1е |
26 |
2е |
36 |
Зе |
[EDI] |
00 |
111 |
07 |
Of |
17 |
|
27 |
2f |
37 |
3f |
[ЕАХ]+смещ_8 |
01 |
000 |
40 |
48 |
50 |
58 |
60 |
68 |
70 |
78 |
[ЕСХ]+смещ_8 |
01 |
001 |
41 |
49 |
51 |
59 |
61 |
69 |
71 |
79 |
|
01 |
010 |
42 |
4а |
52 |
5а |
62 |
6а |
72 |
7а |
продолжение
68 Глава3.СистемакомандIA32
Таблица3.6(продолжение)
Эффективныйадрес |
mod01 |
r/m011 |
значенияmod 43 |
53 |
5b |
63 |
6b |
73 |
7b |
|||||
8 |
01 |
100 |
44 4с |
54 |
5c |
64 |
6c |
74 |
7c |
|||||
[ЕВР]+смещ_8 |
01 |
101 |
45 |
4d |
|
55 |
5d |
65 |
6d |
75 |
7d |
|||
|
01 |
по |
46 |
4е |
|
56 |
5e |
66 |
6e |
76 |
7e |
|||
|
01 |
111 |
47 |
4f |
. |
57 |
5f |
67 |
6f |
77 |
7f |
|||
[ЕАХ]+смещ_32 |
10 |
000 |
80 |
88 |
|
90 |
98 |
aO |
a8 |
bO |
b8 |
|||
[ЕСХ]+смещ_32 |
10 |
001 |
81 |
89 |
|
91 |
99 |
|
a9 |
|
b9 |
|||
|
10 |
010 |
82 |
8а |
|
92 |
9a |
a2 |
aa |
b2 |
ba |
|||
[ЕВХ]+смещ_32 |
10 |
011 |
83 |
|
|
93 |
9b |
a3 |
ab |
|
bb |
|||
[SIB] |
10 |
100 |
84 |
8с |
|
94 |
9c |
a4 |
ac |
|
|
|||
[ЕВР]+смещ_32 |
10 |
101 |
85 |
8d |
|
95 |
9d |
a5 |
ad |
|
bd |
|||
|
10 |
по |
86 |
8е |
|
96 |
9e |
a6 |
ae |
b6 |
be |
|||
|
10 |
111 |
87 |
8f |
|
97 |
9f |
a7 |
af |
77 |
bf |
|||
EAX/AX/AL |
11 |
000 |
сО |
С8 |
|
dO |
d8 |
eO |
e8 |
fi) |
re |
|||
ECX/CX/CL |
11 |
001 |
|
С9 |
|
|
d9 |
el |
e9 |
|
|
|||
EDX/DX/DL |
11 |
010 |
с2 |
са |
|
d2 |
Da |
e2 |
ea |
|
fa |
|||
|
11 |
011 |
сЗ |
cb |
|
d3 |
Db |
e3 |
eb |
О |
ft |
|||
ESP/SP/AH |
11 |
100 |
с4 |
|
|
d4 |
DC |
e4 |
ec |
f4 |
fc |
|||
ЕВР/ВР/СН |
11 |
101 |
с5 |
cd |
|
d5 |
Dd |
e5 |
ed |
f5 |
fd |
|||
ESI/SI/DH |
И |
110 |
|
се |
|
d6 |
De |
e6 |
ее |
f6 |
fe |
|||
EDI/DI/BH |
11 |
111 |
с7 |
cf |
|
d7 |
Df |
e7 |
ef |
|
ff |
|||
Рассмотримпримериспользованияданныхтаблицпризначениибайтаmodr/mравном87h.Длявосстановленияместонахожденияоперандовданноймашиннойкомандыследуетнайтиэтозначениеводнойизтаблиц(какойтаблицейвосполь-зоваться,зависитоттекущегорежимаадресации)ипопервомустолбцустроки,содержащейкод87h,определитьместонахождениепервогооперанда.Внашемслу-чаеадресоперандаформируетсяизсодержимогорегистраВХисме-
щения,значениекоторогоследуетискатьвследующихзабайтомmodr/mдвухбай-тах.Второйстолбецтойжестрокисодержитзначениеполяmod.Третьеполебайтаmodr/mможнопереместившисьвверхпостолбцу,содержащемузначение87h,
допересечениясострокойregили/цифра.Приэтомбудетвыбранозначение,иден-тифицирующееодинизрегистровилипродолжениекодаоперации.Чтоименно—определяетсялибосамим кодомоперации,либозначениембитаwвсочетаниистекущейразрядностьюадреса(см.ранее).
Прииспользовании32-разряднойадресациисодержимоебайтаmodr/mтрак-туетсянесколькоиначеиз-заналичиявформатемашиннойкомандыбайтаsib(см.подраздел«Байтмасштаба,индексаи
ФорматмашинныхкомандIA-32 69
Некоторыемашинныекомандымогутработатьссегментнымирегистрами.Да-лееприведенысоглашенияпокодированиюсегментныхрегистров.Вдальнейшемизложениибудемразличатьдванаборарегистров:
sreg86—сегментныерегистры,существовавшиевархитектурепроцессоровиi80286;
И —сегментныерегистрыархитектурыпроцессоровi80386ивыше.
Различиенаборовсостоитвтом,чтокодируютсяониразличнымколичествомбитов:sreg86—двумябитами(табл.3.7),asreg386—тремя(табл.3.8).
Таблица3.7.Кодировкасегментныхрегистроввнабореsreg86
Кодвполеsreg86
00
01
10
11
Сегментныйрегистр
ESCSSSDS
Таблица3.8.Кодировкасегментныхрегистроввнабореsreg386
Кодвполеsreg386
000
001
010
100
101GS
Сегментныйрегистр
ESCSSSDSFS
Однаизцелочисленныхкоманд—командаMOV—можетоперироватьсистем-нымирегистрами.Кодировкаэтихрегистровприведенавтабл.3.9.
Таблица3.9.КодировкасистемныхрегистроввкомандеMOV
Кодвполеcreg
000
001
010
100
101
но111
Регистрыуправления
CRO
—CR2
CR3CR4
—
—
-
Регистрыотладки
DRODR1DR2DR3
—
—DR6
DR7
70Глава3.СистемакомандпроцессораIA32
Байтмасштаба,индексаибазы
Байтмасштаба,индексаибазы(Scale-Index-Base—sib)используетсядлярасши-рениявозможностейадресацииоперандов.Наналичиебайтаsibвмашиннойко-мандеуказываетсочетаниеодного иззначений01или10поляmodизначенияполя
=100.Байтsibсостоитизтрехэлементов(табл.
В полемасштаба(ss)размещаетсямасштабныйдляиндексного
компонентаindex,занимающего следующиетрибитабайтаsib.Вполеssможетсодержатьсязначение1,2,4или8.Привычисленииэффективногоадресанаэтозначениебудетумножатьсясодержимоеиндексногорегистра.Болеепо-дробно,спрактическойточкизрения,этарасширеннаявозможностьиндекса-циирассматриваетсяприобсуждениимассивоввглаве13.
Полеindexпозволяетхранитьномериндексногорегистра,содержимоекоторо-гоприменяетсядлявычисленияэффективногоадресаоперанда.
иПолеbaseтребуетсядляхраненияномерабазовогорегистра,содержимоекото-роготакжеприменяетсядлявычисленияэффективногоадресаоперанда.Вка-чествебазовогоииндексногорегистровмогут использоватьсябольшинстворегистровобщегоназначения.
ТаблицаЗначениябайтаsib(32-разряднаяадресация)
База(base)
EAX000
ЕСХ001
EDX010
ЕВХ ESP *
100
110
EDI111
Масштабированиеиндексногорегистра
Масштабныймножитель(ss)
Индекс(index)
значенияsib
[ЕАХ] |
00 |
000 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
[ЕСХ] |
00 |
001 |
08 |
09 |
OA |
OB |
ОС |
OD |
OE |
OF |
[EDX] |
00 |
010 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
[ЕВХ] |
00 |
|
18 |
19 |
1A |
|
1C |
|
|
|
— |
00 |
100 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
[ЕВР] |
00 |
101 |
28 |
29 |
2A |
2B |
2C |
2D |
2E |
2F |
[ESI] |
00 |
ПО |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
[EDI] |
00 |
111 |
38 |
39 |
ЗА |
3B |
3C |
3D |
3E |
3F |
[ЕАХ*2] |
01 |
000 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
[ЕСХ*2] |
01 |
001 |
48 |
49 |
4A |
4B |
4C |
4D |
4E |
4F |
[EDX*2] |
01 |
010 |
50 |
51 |
52 |
53 |
54 |
|
56 |
57 |
[ЕВХ*2] |
01 |
|
58 |
59 |
5A |
5B |
5C |
5D |
5E |
5F |
— |
01 |
100 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
[ЕВР*2] |
01 |
101 |
68 |
69 |
6A |
6B |
6C |
6D |
6E |
6F |
[ESI*2] |
01 |
110 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
[EDI*2] |
01 |
111 |
78 |
79 |
7A |
7B |
7C |
7D |
7E |
7F |
[ЕАХ*4] |
10 |
000 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
Форматмашинныхкоманд 71
Масштабированиеиндексногорегистра
Масштабныймножитель(SS)
Индекс(index)
значенияsib
[ЕСХ*4] |
10 |
001 |
88 |
89 |
8А |
8В |
8С |
8D |
8Е |
8F |
[EDX*4] |
10 |
010 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
[ЕВХ*4] |
10 |
|
98 |
99 |
9А |
9В |
9С |
9D |
9Е |
9F |
— |
10 |
100 |
АО |
А1 |
А2 |
A3 |
А4 |
А5 |
А6 |
А7 |
[ЕВР*4] |
10 |
101 |
А8 |
А9 |
АА |
АВ |
АС |
AD |
АЕ |
AF |
[ES1*4] |
10 |
ПО |
ВО |
В1 |
В2 |
ВЗ |
В4 |
В5 |
В6 |
В7 |
[EDI*4] |
10 |
111 |
В8 |
В9 |
ВА |
ВВ |
ВС |
BD |
BE |
BF |
[ЕАХ*8] |
И |
000 |
СО |
С1 |
С2 |
СЗ |
С4 |
С5 |
С6 |
С7 |
|
И |
001 |
С8 |
С9 |
СА |
СВ |
сс |
CD |
СЕ |
CF |
[EDX*8] |
И |
010 |
DO |
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
|
и |
on |
D8 |
D9 |
DA |
DB |
DC |
DD |
DE |
DF |
— |
11 |
100 |
ЕО |
Е1 |
Е2 |
ЕЗ |
Е4 |
Е5 |
Е6 |
Е7 |
[ЕВР*8] |
и |
101 |
Е8 |
Е9 |
ЕА |
|
ЕС |
ED |
ЕЕ |
EF |
[ESI*8] |
11 |
ПО |
FO |
F1 |
F2 |
F3 |
F4 |
F5 |
F6 |
F7 |
[EDI*8] |
11 |
111 |
F8 |
F9 |
FA |
FB |
FC |
FD |
FE |
FF |
Позначениюбайтаsibлегковосстановитькомпонентымашинныхкоманд,со-держащиеадресоперандасучетомегомасштабирования.
Однозначениебазовогорегистра(base)втабл.3.10замещеносимволомзвез-
дочки(*).Этоозначаетналичиевкомандеадресабезбазы,еслиmodрав-
но00,и[ЕВР]—впротивномслучае.Такойподходобеспечиваетследующиережи-мыадресации:
и
еслиmod=01;II если
ПолясмещенияинепосредственногооперандаПолесмещениявкоманде—это16-или32-разрядноецелоечислосознаком,представляющеесобойполностьюиличастично(сучетомприведенныхранеерас-
суждений)значениеэффективногоадресаоперанда.
Поленепосредственногооперанда—необязательноеполе,представляющеесо-бой16-или32-разрядныйнепосредственныйоперанд.Наличиеэтогополя,ко-нечно,отражаетсяназначениибайтаmod
Стольподробноеобсуждениеразличныхполеймашиннойкоманды,втомчис-
лесиспользованиемвсехприведенныхранеетаблиц,имеетцельюпоказатьпра-вилаформированиямашинныхкоманд.Прирассмотрениисинтаксисаассемблера(глава5)наосновеэтогоматериалабудутобсуждатьсяправилазапи-сиоперандовкомандассемблера.
