Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
теория 2.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
274.3 Кб
Скачать

Байтрежимаадресации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

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

92

9a

a2

aa

b2

ba

10

011

83

93

9b

a3

ab

b3

bb

10

100

84

94

9c

a4

ac

b4

10

101

85

8d

95

9d

a5

ad

b5

bd

10

110

86

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

22

32

За

[ЕВХ]

00

03

Ob

13

23

33

[sib]

00

100

04

Ос

14

24

34

Зс

Смещ32

00

101

05

Od

15

25

2d

35

3d

[ESI]

00

по

06

Ое

16

26

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

52

62

72

продолжение

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

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

92

9a

a2

aa

b2

ba

[ЕВХ]+смещ_32

10

011

83

93

9b

a3

ab

bb

[SIB]

10

100

84

94

9c

a4

ac

[ЕВР]+смещ_32

10

101

85

8d

95

9d

a5

ad

bd

10

по

86

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

8D

8F

[EDX*4]

10

010

90

91

92

93

94

95

96

97

[ЕВХ*4]

10

98

99

9D

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)наосновеэтогоматериалабудутобсуждатьсяправилазапи-сиоперандовкомандассемблера.