
Глава3
СистемакомандIA-32
ФорматмашинныхкомандIa-32
НазначениеиинтерпретацияполеймашиннойкомандыОсновыдекодированиямашинныхкомандФункциональнаяклассификациямашинныхкоманд
Системакомандявляетсяважнейшейчастьюархитектурыкомпьюте-
ра,таккаксихпомощьюпроизводитсянепосредственноеуправлениеработойпро-цессора.Кпримеру,системакомандпроцессораPentiumсодержитболее300ма-шинныхкоманд.Споявлениемкаждойновоймоделипроцессораколичествокакправило,возрастает,отражаяархитектурныеновшестваданноймоде-
липосравнениюспредшествующими.
Признакомствессистемоймашинныхкоманднеобходимоучитыватьдваас-пекта—собственнонабормашинныхкомандиправилапредставленияэтихко-манднауровнепроцессора,тоестьформатмашинныхкоманд.Процессорукомпь-ютерапонятентолькоодинязык—языкмашинныхкоманд.Машинныекомандыпредставляютсобойсформированныепоопределеннымправилампоследователь-ностинулейиединиц.Длятогочтобызаставитьпроцессорвыполнитьнекотороедействие,емунужновыдатьсоответствующееуказаниеввидемашиннойкоман-ды,адлявыполненияболеесложнойработыдостаточнонаписатьпрограммувдво-ичныхкодах.Программированиепервыхкомпьютеровосуществлялосьименнотакимспособом.Недостаткипроцессанаписанияпрограммвдвоичномкодеоче-видны.Дляоблегченияпроцессаразработкипрограммбылпридуманязыкассем-блера,каксимволическийаналогмашинногоязыка,авархитектурукомпьютеравведенблокмикропрограммногоуправления.Длякаждоймашиннойкомандыблок
ФорматмашинныхкомандIA-32 59
микропрограммногоуправлениясодержитотдельнуюмикропрограмму,спомощьюкоторойдействия,заданныеэтойкомандой,переводятсянаязыксигналов,на-правляемыхнужнымподсистемампроцессора.Послеэтихнововведенийпроцессразработкипрограммызначительноупростился.Человекпишетпрограммунапо-нятномемуязыкесимволов,специальнаяпрограмма—ассемблер—переводит(транслирует)программучеловеканамашинныйязык,аблокмикропрограммно-гоуправлениянужнымобразоминтерпретируетмашинныекомандыдляпроцес-сора,процессорвыполняетнужнуюработу.
Вдальнейшем,споявлениемпрограммногообеспеченияболеевысокогоуров-ня,языкассемблеранепотерялсвоейроли,анаоборот,приобрелновыекачества.Всилуиерархичностипрограммногообеспечениякомпьютераассемблерсталпро-межуточным,связующимзвеноммеждуразнороднымиразноязыкимпрограмм-нымобеспечениемболеевысокогоуровняипроцессором.
Такимобразом,существуетвзаимнооднозначноесоответствиемашинныхко-мандикомандассемблера.Пониманиеправилформированиямашинныхкомандизкомандассемблераявляетсяоднимизнеобходимыхусловийнетолькодляизу-ченияязыкаассемблера,ноидляпониманиялогикиработыкомпьютеравцелом.
ФорматмашинныхкомандIa-32
Машиннаякомандапредставляетсобойзакодированноепоопределеннымправи-ламуказаниепроцессорунавыполнениенекоторойоперации.Правилакодирова-ниякомандназываютсяформатомкоманд.КомандыпроцессоровархитектурыIA-32считаютсясложными.МаксимальнаядлинамашиннойкомандыIA-32со-ставляетбайт.Реальнаякомандаможетсодержатьгораздоменьшееколичествополей,вплотьдоодного—толькокодоперации.Приведенныйнарис.форматмашиннойкомандыявляетсянаиболееполным.
Какнауровнеформатамашиннойкомандысоответствуютмеждусобоймашин-ныекомандыикомандыассемблера?Дляпримерарассмотримтипичнуюкоман-дуязыкаассемблера:
ebx,eax
КомандапроизводиткопированиесодержимогорегистраврегистрЕВХ.Соответствующаямашиннаякомандабудетвыглядетьтак:
D8
Значение8В—кодоперации.Ещеодинпримеркомандыecx,128
ДаннаякомандаинициализируетсодержимоерегистраЕСХдесятичнымзначе-ниемСоответствующаямашиннаякомандавыглядиттак:
00000080
Значениеполяскодомоперации—В9.Изпримероввидно,чтопрямогосоот-ветствиямеждуструктуройкомандыассемблераисоответствующеймашиннойкомандойнет.Несмотрянато,чтокомандаассемблераоднаитажекодымашинныхкоманд—разные(8ВиВ9).Большинствокомандассемблераимеютнескольковозможныхвариантовсочетанияоперандов.Какпоказаноприве-денныхпримерах,несмотрянаодинаковыеназваниякомандассемблера,для
60 Глава3.СистемакомандпроцессораIA32
Однобайтовыепрефиксы
Г повторения
|размераадресаразмераоперандазаменысегмента
|блокировкишины
Количествобайтов
код
операции
0или1
байт
index base
-
!
КОП
i
7
КОП
6 54
3
2
w
1о;
|mod||
|
КОП
w
7
654
3
7
КОП
654
3
sw
КОП
reg
i7
654
3
I
,I
Рис.Формат машиннойкоманды
каждоговозможногосочетанияоперандовимеетсясвоямашиннаякоманда,сосво-имзначениемполякодаоперации(рис.Этоговоритотом,чтомашиннаяко-мандавсегдаоднозначнапоотношениюкпроизводимымеюдействиямнауровнеаппаратуры.Несколькоупрощаяреальность,можноутверждать,чтозначениевполекодаоперацииявляетсяномероммикропрограммывблокемикропрограмм-ногоуправлениядлякаждойконкретнойкомандыассемблераскаждымконкрет-нымвариантомсочетанияоперандов.
Логическилюбаякомандаязыкаассемблерасодержитнесколькоэлементов.Элемент,описывающий,чтоделать,называетсякодомоперации(КОП).Зна-
чениевполекодаоперациинекоторымобразомопределяетвблокемикропрог-
раммногоуправленияподпрограмму,реализующуюдействиядляданнойко-манды.
вЭлементы,описывающиеобъекты,скоторыминужночто-тоявляют-
сяоперандами.Операндывкомандемогутинезадаваться,аподразумеватьсяпоумолчанию.
иЭлементы,описывающие,какявляютсятипамииобычно
задаютсянеявно.Онииспользуютсятрансляторомассемблераприформиро-ваниимашиннойкомандыдляопределениязначенияполякодаоперации.
Этижеэлементыимеетимашиннаякоманда,новзакодированномвиде.Пере-водкомандассемблеравсоответствующиемашинныекомандыосуществляетспе-циальнаяпрограмма—ассемблер,которуюможнотакженазватьтранслятором(компилятором)ассемблера.
Опишемназначенияполеймашиннойкоманды(рис.