Полепрефиксов
Форматмашинныхкоманд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отсутствует
(см.следующийподраздел)
Последующиеполямашиннойкомандыопределяютхарактеристикииместо-положениеоперандов,участвующихвоперации,иособенностиихиспользования(см.далее).
