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

Полепрефиксов

ФорматмашинныхкомандIA-32

Префиксы—необязательныеоднобайтныеэлементымашиннойкоманды.Назна-чениепрефиксов—изменитьдействия,выполняемыекомандой.Префиксымогутуказыватьсяпрограммистомявнопринаписанииисходноготекстапрограммы,либоих,поопределеннымсоображениям,можетвставитьассемблер.Процессорраспознаетпрефиксыпоихзначениям.Машиннаякомандаможетиметьдочеты-рехпрефиксоводновременно. Впамятипрефиксыпредшествуюткоманде.Поря-докихследованияприэтомможетбытьлюбым.

Далееперечисленытипыпрефиксов,которыеможетиспользоватьприкладнаяпрограмма.

*Префиксзаменысегментавявнойформеуказывает,какойсегментныйрегистриспользуетсявданнойкомандедляадресациистекаилиданных.Префиксот-меняетвыборсегментногорегистрапоумолчанию.Префиксызаменысегментаимеютследующиезначения:

D2Eh—заменасегментаCS;D36h—заменасегментаSS;

—заменасегментаDS;

26h— заменасегментаES;D64h—заменасегментаFS;D65h—заменасегментаGS.

Префиксповторенияиспользуетсясцепочечнымикомандами(командамиоб-работкистрок).Этотпрефикскомандудляобработкивсехэле-

ментовцепочки.Системакомандподдерживаетдватипапрефиксов:безуслов-

ные(REP—заставляющиецепочечнуюкомандуповторятьсянекотороеколичествораз,(REPE/REPZ—OF3h,REPNE/REPNZ—OF2h),которыепризацикливаниипроверяютнекоторыефлаги,иврезультатепроверкивозможен

досрочныйвыходизцикла.

Префиксблокировкишиныинициируетвыдачупроцессоромсигнала(зна-

ЧениеOfOh)дляблокировкисистемнойшины.Используетсявмногопроцес-сорныхконфигурацияхдлямонопольноговладениясистемной

шиной.Сигналможетформироватьсялишьсопределеннойноменклату-

ройкомандпроцессора,работающихвцикле«чтение-модификация-запись».

Префиксразмераадреса(значение67h)уточняетразрядностьадреса:16или32бита.Каждойкоманде,вкоторойиспользуетсяадресныйоперанд,ставитсявсоответствиеразрядностьадресаэтогооперанда.Еслиразрядностьадресадляданнойкомандысоставляет16битов,этоозначает,чтокомандасодержит16-раз-рядноесмещениеионосоответствует16-разрядномусмещениюадресногоопе-рандаотносительноначаланекоторогосегмента(см.рис.3.1).Вконтекстема-териалаглавы2(см.рис.2.7и2.8)этосмещениеназываетсяэффективнымадресом.Еслиразрядностьадресасоставляет32бита,этоозначает,чтокомандасодержит32-разрядноесмещение,оносоответствует32-разрядномусмещениюадресногооперандаотносительноначаласегментаипоегозначениюформиру-

62 Глава3.СистемакомандпроцессораIA32

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

  • Префиксразмераоперанда(значение66h)аналогиченпрефиксуразмераадре-са,ноуказываетнаразрядностьоперандов(32или16битов),скоторымирабо-таеткоманда.

Покакимправиламустанавливаютсяпоумолчаниюзначенияатрибутовраз-рядностиадресаиоперандов?Есликомандаимеетоперандвпамяти,тоегоадреспредставляетсобойзначениесмещенияотносительноначаласегментаданных(еслинеиспользуетсяпрефикспереопределениясегмента)исодержитсявполесмеще-ниямашиннойкоманды.Размерэтогополязависитоттекущегорежимаадреса-ции(атрибутыилиuse32вдирективахсегментации).При16-разряднойадресацииразмерполясмещениявмашиннойсоставляет16битов.При

32-разряднойадресацииразмерполясмещениявмашиннойкомандесоставляет32бита.Явноезаданиеразмераадресапозволяетуказатьпроцессорузна-

чение,отличающеесяотдействующегопоумолчанию.Например,еслидействую-щийразмерадресаравен16битам,тоиспользованиепередкакой-либокомандойпрефикса67hопределитдлянее(итолькодляразмерадресав32бита.Ина-оборот,еслидействующийразмерадресаравен32бита,тоуказаниепередкоман-дой префикса определитдлянее(итолькодля нее!)размерадресав16битов.Физическиэтобудетотражатьсянаразмереполясмещениявданноймашиннойкоманде.

Префиксразмераоперандапозволяетсменитьдействующийдляданной

командыатрибутразмераоперанда.Команда,котораяпоумолчаниюработаетсословомбитов)илисдвойнымсловом(32бита),имеетатрибутразмераоперан-

да,равный16и32битасоответственно.Применениепрефиксаразмераоперандапозволяетсменитьдействующийпоумолчаниюатрибут.

Приработепроцессоравреальномивиртуальномрежимахатрибутыраз-мераадресаиоперандапоумолчаниюравныбитов.Взащищенномрежимезна-

ченияэтихатрибутовзависятотзначениябитаDдескрипторасегмента.ЕслиD=0,то

атрибутыразмераадресаиоперандаравныбитов,еслиD=1,тоэтиатрибутырав-ны32бита.Изменитьдействующиепоумолчаниюатрибутыадресаиразмераопе-рандовможноприменениематрибутовилиuse32вдирективахсегментации.

Вреальномрежимеспомощьюпрефиксаразрядностиадресаможнозадейство-вать32-разряднуюноприэтомнеобходимопомнитьоб

стиразмерасегментавеличиной64Кбайт.Аналогичнопрефиксуразрядностиад-ресаможноиспользоватьпрефиксразрядностиоперандавреальномрежимедляработыс32-разряднымиоперандами(кпримеру,варифметическихкомандах).

Вкомандепрефиксыразмераадресаиоперандамогутуказыватьсяодновре-

менно.Какимобразомкомбинацияпрефиксов(указанныхявноиустановленныхпоумолчанию)влияетнаатрибутыразмераоперандаиадресамашиннойкоман-ды,показановтабл.Внейотражено ито,каквлияетнаэтиатрибутысостоя-ниебитаDдескрипторасегментавзащищенномрежиме.Строкитаблицы,соот-

ФорматмашинныхкомандIA-32 63

ветствующиенулевомузначениюбитаD,используютсявреальномивиртуальномрежимахработыпроцессора

Необходимообратитьвниманиенато,чтокомандыработысостекомтакжеимеютаналогичныеатрибутыразмераиадресаоперанда.Атрибутразмераадресавлияетнавыборрегистра—указателястека:приразмереадресабитовиспользу-етсярегистрSP,приразмереадреса32битаиспользуетсярегистрESP.Аналогичновлияетнаработукомандсостекомпрефиксразмераоперанда:прииспользованиипрефиксаразмераоперанда16битовоперандвстекетрактуетсякак16-разряд-ный,прииспользованиипрефиксаразмераоперанда32битаоперандвстекетрак-туетсякак32-разрядный.

ТаблицаЗначенияатрибутовразмеровоперандаи

66h

0 -

0 -

0 +

0 +

1 -

1 -

1 +

1 +

67h

-

+

-

+

-

+

-

+

Размероперанда

16

16

32

32

32

32

16

16

Размерадреса

16

32

16

32

32

16

32

16

Вкачествепримерапрефикса,которыйприформированиимашиннойкоман-дывставляетсамассемблер,можнопривестипрефикссозначениемOFFh.Онна-зываетсяпрефиксомсменыалфавитаиизвещаетотом,чтополекодаоперациивданнойкомандедвухбайтовое.

Кодоперации

Кодоперации—обязательныйэлемент,описывающийоперацию,выполняе-муюкомандой.Кодоперацииможетзаниматьотодногодотрехбайт.Длянекоторыхмашинныхкомандчастьбитовкодаоперацииможетнаходитьсявбайтеmod

Многимкомандамсоответствуетнесколькокодовопераций,каждыйизкото-

рыхопределяетнюансывыполненияоперации.Отметим,чтополекодаоперациинеимеетоднозначнойструктуры(см.рис.3.1).Взависимостиотконкретныхко-манд,необязательноразныхсточкизренияязыкаассемблера,ономожетиметьвсвоемсоставеотодногодотрехэлементов,назначениекоторыхописановтабл.3.2.Одинизэтихтрехэлементовявляетсянепосредственнокодомоперацииилиеечастью,остальныеуточняютдеталиоперации.Такоестроениеполякодаопера-цииусложняет,вчастности,процессдизассемблирования.Дляопределенияраз-мераиграницочереднойкомандынеобходимополностьюпроанализироватьееполекодаоперации.

64 Глава3.СистемакомандпроцессораIA32

Таблица3.2.Назначениедополнительныхбитовполякодаоперации

Поле

d

s

W

reg

Количество

1

1

1

3

Назначение

Определяетнаправлениепередачиданных:0—передачаданныхизрегистравпамять(илирегистр),адресуемуюполемт/т;1—передачаизпамяти(илирегистра),адресуемойнолемврегистрreg.Приналичиибайтаsib

адресоперандавпамятиформируетсясучетомсодержимогоэтогобайта

Задаетнеобходимостьрасширения8-разрядногонепосредственногооперандадо16или32бита.Старшиебитыприэтомзаполняютсязначениемстаршегобита

исходного8-разрядногооперанда

Определяетразмерданных,которымиоперируеткоманда:байт,слово,двойноеслово:0—8битов;1—16битовдля16-разряд-ногоразмераоперандовили32битадля32-разрядногоразмераоперандов

Определяетрегистр,используемыйвкоманде.Значениеполязависитотноляw,втомчислееслиполеwотсутствует

(см.следующийподраздел)

Последующиеполямашиннойкомандыопределяютхарактеристикииместо-положениеоперандов,участвующихвоперации,иособенностиихиспользования(см.далее).