Рассмотрим пример использования данных таблиц при значении байта mod r / m равном 87 h .



Занятие 32(34)

Микропроцессоры АМ D К7. Структурная схема .

 

Микропроцессор следующего поколения — К7 кодовое имя Athlon .

 

Архитектура, реализованная в Athlon определяет суперскалярное, суперконвейерное выполнение команд, конвейерный блок вычислений с плавающей точкой, аппаратную предвыборку данных в кэш-память и усовершенствованную технологию предсказания ветвлений.

Athlon имеет девять исполнительных блоков: три для обработки целочис­ленных данных (IEU), три для вычисления адреса (AGU) и три блока для вычислений с плавающей точкой и обработки мультимедийных данных (один для загрузки/сохранения данных с плавающей точкой (FSTORE) и два конвейерных блока для исполнения команд (FPU/MMX/3DNOW). Длина целочисленного конвейера составляет 10 стадий, конвейера с плавающей точкой — 15 стадий. Команда FPU Athlon позволяет одновременно выполнять до двух команд с плавающей точкой.

Athlon может декодировать три команды х86 в шесть RISC-операций. После декодирования ROP попадают в буфер, где ожидают своей очереди на вы­полнение в одном из функциональных блоков процессора. Буфер К7 содер­жит 72 операции (в три раза больше чем у Кб) и выдает 9 ROP для 9 испол­нительных устройств.

Athlon имеет 128 Кбайт кэш-памяти первого уровня (64 Кбайт для данных и 64 Кбайт для команд). Для взаимодействия с кэш-памятью второго уровня предусмотрена специальная шина. Кэш-память второго уровня размером 512 Кбайт расположена вне процессорного ядра, в процессорном картридже, и работает на половинной частоте ядра.

Занятие 33(35)

Микропроцессоры Hammer. Структурная схема

Новое семейство микропроцессоров АМD получило название Наmmег. Этот  процессор произ­водится по технологии 0,13 мкм с медными соединениями и изолированной подложкой . Микропроцессоры данного семейства являются 64-раз­рядными, однако в отличие от архитектуры 1А-64 1п1е1, обеспечивают совмес­тимость с системой команд х86, в связи с чем архитектура получила название Х86-64.

Основные преимущества архитектуры х86-64 следующие:  -- обратная совместимость с инструкциями х86;

 - 64-битные версии регистров общего назначения;

- 8 новых РОН, доступных только для 64-битных приложений;

- величен объем адресуемой памяти;

- высокая производительность 32-битных приложений, поддержка 64-битных приложений.

Упрощенная структура микропроцессора Наmmег показана на рис, 2.15.

Создавая новую архитектуру, разработчики компании АМD стремились по­высить производительность микропроцессора не только за счет увеличения тактовой частоты или числа вычислительных блоков, но и за счет повыше­ния степени их загрузки. С этой целью в микропроцессор внесены следую­щие изменения:

- увеличена длина вычислительных конвейеров: целочисленного конвейера до 12 стадий, с плавающей точкой до 17 стадий;

- встроен контроллер памяти;

- усовершенствован блок предсказания ветвлений;

- встроен когерентный интерфейс НурегТгаnsport.

 

Размещая на кристалле контроллер па­мяти, АМD стремилась повысить производительность подсистемы обмена с основной памятью, которая в современных микропроцессорах является уз­ким местом. Оптимальный для данного процессора и максимально прибли­женный к нему контроллер позволяет организовать эффективный обмен с памятью, минуя системную шину, на частоте работы ядра.

Процессоры с архитектурой Наmmег оснащаются 64- либо 128-битным кон­троллером памяти. Встроенный когерентный интерфейс НурегТгаnsport обеспечивает возмож­ность использования Наmmег в мультипроцессорной конфигурации.

Улучшение блока предсказания ветвлений заключается в выявлении и учете информации о типе ветвлений: статическое ветвление, т. е. адрес перехода не изменяется, или динамическое.

Различия процессоров для одно- и многопроцессорных конфигураций за­ключаются, в основном, в размере кэш-памяти второго уровня и числе линков интерфейса НурегТгаnsport.

 

Технология HyperTransport™  
Технология HyperTransport™ – составляющая новой архитектуры AMD, представляющая собой высокопроизводительный интерфейс типа “точка-точка” предназначенный для связи интегральных микросхем и спроектированный для обеспечения необходимой пропускной способности для будущих вычислительных и коммуникационных платформ. Обеспечивая пиковую производительность до 12,8 Гб/c, технология HyperTransport™ предлагает идеальное решение для большинства требовательных к полосе пропускания системных приложений. Применение HyperTransport™ в вычислительных системах способствует увеличению общей производительности за счет устранения узких мест при передаче данных, увеличения пропускной способности и уменьшения задержек доступа.
Основные особенности технологии HyperTransport™:
· Может объединять до 32 устройств; · Требует небольшое количество сигнальных проводников, что значительно упрощает разработку системы; · Использование низковольтных дифференциальных сигналов помогает решить проблемы перекрестных помех и электромагнитной совместимости; · Продлевает жизненный цикл PCI, обеспечивая полную обратную совместимость с программной моделью PCI, драйверами и операционными системами при устранении узких мест и обеспечении пропускной способности необходимой для будущих быстродействующих чипов; · Использование низковольтных дифференциальных сигналов позволяет проектировщикам эффективно использовать технологии энергосбережения и разрабатывать простые и дешевые платы; · Поддержка ассиметричных связей и масштабируемость в скорости, ширине шины, частоте и направлении, позволяет разработчикам выбирать решение, соответствующее их задачам; · Обеспечивает широкую полосу пропускания, что позволяет легко добавлять новые высокопроизводительные части; · Сокращает время разработки проекта, поскольку добавление новых чипов может быть выполнено без полного перепроектирования системы. Занятие 34 (36) Двуядерные микропроцессоры Корпорация AMD первой представила стратегию двухядерных процессоров архитектуры x86 и первой объявила о завершении разработки двухядерного процессора архитектуры x86 для 64-разрядных вычислений. Двухядерный чип – это фактически два процессора в одном чипе. Преимущество такого процессора над одноядерным проявляется, прежде всего, при работе с многопоточными приложениями. Многопоточные задачи работают быстрее на двухядерных процессорах, потому что операционная система может распределять программные потоки отдельно по каждому ядру, в то время как на одноядерных процессорах задачи меняются по мере выполнения, то есть по очереди. Применение этой технологии позволит увеличить производительность процессоров нового поколения и одновременно избежать роста потребления энергии, которое накладывает ограничения на развитие одноядерных процессоров. Кроме того, чем выше частота процессора, тем больше он теряет производительность при обращении к памяти. Два ядра получаются предпочтительней, чем одно, так как в этом случае легче обеспечить процессор данными для обработки. Поскольку производительность памяти увеличивается медленнее, чем скорость процессоров, увеличение производительности путем использования нескольких ядер выглядит более предпочтительным, чем наращивание частоты. Имеющееся процессорная архитектура AMD позволила интегрировать на тот же кристалл второе ядро при переходе на технологический процесс 90 нм. В процессорах архитектуры AMD64 с двумя ядрами дублированию подвергнуто само вычислительное ядро и кэш-память, в то время как контроллер памяти и контроллер HyperTransport остаются в двухядерных процессорах в неизменном виде. В этой связи ключевое значение начинает играть блок System Request Interface (SRI), на который возлагается обязанность арбитража потоков команд и данных между двумя ядрами. Выпускаемые двухядерные процессоры AMD Opteron, имеют два раздельных кэша второго уровня объемом по 1 Мбайту, интегрированный контроллер памяти DDR SDRAM и три шины HyperTransport. Новые процессоры с парой ядер выпускаются в Socket 940 исполнении, совместимы с имеющимися системными платами, блоками питания и совпадают по тепловому конверту с однопроцессорными решениями (95 Вт), обеспечивая непревзойденную производительность на ватт потребляемой мощности.. Кроме того, двухядерные процессоры полностью совместимы со всеми приложениями архитектуры x86 и AMD64, демонструя высочайшую эффективность при работе в многозадачном и многопоточном режиме.     Занятие (37) Особенности программирования на языке Ассемблер Формат машинных команд IA -32 Машинная команда представляет собой закодированное по определенным правилам указание процессору на выполнение некоторой операции. Правила кодирования команд называются форматом команд. Команды процессоров архитектуры IA-32 считаются сложными. Максимальная длина машинной команды IA-32 со­ставляет 15 байт. Реальная команда может содержать гораздо меньшее количество полей, вплоть до одного — только код операции. Приведенный на рис. 3.1 формат машинной команды является наиболее полным.   Как на уровне формата машинной команды соответствуют между собой машин­ные команды и команды ассемблера? Для примера рассмотрим типичную коман­ду языка ассемблера:  mov ebx, еах Команда M0V производит копирование содержимого регистра ЕАХ в регистр ЕВХ. Соответствующая машинная команда будет выглядеть так: 88 D 8 Значение 8В — код операции. Еще один пример команды M0V есх, 128 Данная команда инициализирует содержимое регистра ЕСХ десятичным значе­нием 128. Соответствующая машинная команда выглядит так: 89 00000080 Значение поля с кодом операции — В9. Из примеров видно, что прямого соответствия между структурой команды ассемблера и соответствующей машинной командой нет. Несмотря на то, что команда ассемблера одна и та же (M0V), коды машинных команд — разные (8В и В9). Большинство команд ассемблера имеют несколько возможных вариантов сочетания операндов. Как показано в приве­денных примерах, несмотря на одинаковые названия команд ассемблера, для каждого возможного сочетания операндов имеется своя машинная команда, со сво­им значением поля кода операции (рис. 3.1). Это говорит о том, что машинная ко­манда всегда однозначна по отношению к производимым ею действиям на уровне аппаратуры. Несколько упрощая реальность, можно утверждать, что значение в поле кода операции является номером микропрограммы в блоке микропрограмм­ного управления для каждой конкретной команды ассемблера с каждым конкрет­ным вариантом сочетания операндов. Логически любая команда языка ассемблера содержит несколько элементов. Элемент, описывающий, что делать, называется кодом операции (КОП). Зна­чение в поле кода операции некоторым образом определяет в блоке микропрог­раммного управления подпрограмму, реализующую действия для данной ко­манды. Элементы, описывающие объекты, с которыми нужно что-то делать, являют­ся операндами. Операнды в команде могут и не задаваться, а подразумеваться по умолчанию. Элементы, описывающие, как делать, являются типами операндов и обычно задаются неявно. Они используются транслятором ассемблера при формиро­вании машинной команды для определения значения поля кода операции. Эти же элементы имеет и машинная команда, но в закодированном виде. Пере­вод команд ассемблера в соответствующие машинные команды осуществляет спе­циальная программа ~- ассемблер, которую можно также назвать транслятором (компилятором) ассемблера.     Поле префиксов Префиксы — необязательные однобайтные элементы машинной команды. Назна­чение префиксов — изменить действия, выполняемые командой. Префиксы могут указываться программистом явно при написании исходного текста программы, либо их, по определенным соображениям, может вставить ассемблер. Процессор распознает префиксы по их значениям. Машинная команда может иметь до четы­рех префиксов одновременно. В памяти префиксы предшествуют команде. Поря­док их следования при этом может быть любым.   Далее перечислены типы префиксов, которые может использовать прикладная программа. Префикс замены сегмента в явной форме указывает, какой сегментный регистр используется в данной команде для адресации стека или данных. Префикс от­меняет выбор сегментного регистра по умолчанию. Префиксы замены сегмента имеют следующие значения: 2Eh — замена сегмента CS; 36h — замена сегмента SS; 3Eh — замена сегмента DS; 26h — замена сегмента ES; 64h — замена сегмента FS; 65h — замена сегмента GS.   Префикс повторения используется с цепочечными командами (командами об­работки строк). Этот префикс «зацикливает» команду для обработки всех эле­ментов цепочки. Система команд поддерживает два типа префиксов: безуслов­ные ( REP — 0F3h), заставляющие цепочечную команду повторяться некоторое количество раз, и условные (REPE/REPZ — 0F3h, REPNE/REPNZ — 0F2h), которые при зацикливании проверяют некоторые флаги, и в результате проверки возможен досрочный выход из цикла.   Префикс блокировки шины инициирует выдачу процессором сигнала L0CK# (зна­чение OFOh) для блокировки системной шины. Используется в многопроцес­сорных конфигурациях для обеспечения монопольного владения системной шиной. Сигнал L0CK# может формироваться лишь с определенной номенклату­рой команд процессора, работающих в цикле «чтение-модификация-запись».   Префикс размера адреса (значение 67h) уточняет разрядность адреса: 16 или 32 бита. Каждой команде, в которой используется адресный операнд, ставится в соответствие разрядность адреса этого операнда. Если разрядность адреса для данной команды составляет 16 битов, это означает, что команда содержит 16-раз­рядное смещение и оно соответствует 16-разрядному смещению адресного опе­ранда относительно начала некоторого сегмента (см. рис. 3.1). В контексте ма­териала главы 2 (см. рис. 2.7 и 2.8) это смещение называется эффективный адресом. Если разрядность адреса составляет 32 бита, это означает, что команда содержит 32-разрядное смещение, оно соответствует 32-разрядному смещению адресного операнда относительно начала сегмента и по его значению формируется  32-разрядное смещение в сегменте (см. рис. 3.1). С помощью префикса раз­рядности адреса можно изменить действующее по умолчанию значение разряд­ности адреса. Это изменение будет касаться только той команды, которой пред­шествует префикс.   Префикс размера операнда (значение 66h) аналогичен префиксу размера адре­са, но указывает на разрядность операндов (32 или 16 битов), с которыми рабо­тает команда. По каким правилам устанавливаются по умолчанию значения атрибутов раз­рядности адреса и операндов? Если команда имеет операнд в памяти, то его адрес представляет собой значение смещения относительно начала сегмента данных (если не используется префикс переопределения сегмента) и содержится в поле смеще­ния машинной команды. Размер этого поля зависит от текущего режима адреса­ции (атрибуты usel6 или use32 в директивах сегментации). При 16-разрядной адресации размер поля смещения в машинной команде составляет 16 битов. При 32-разрядной адресации размер поля смещения в машинной команде составляет 32 бита. Явное задание префикса размера адреса позволяет указать процессору зна­чение, отличающееся от действующего по умолчанию. Например, если действую­щий размер адреса равен 16 битам, то использование перед какой-либо командой префикса 67h определит для нее (и только для нее!) размер адреса в 32 бита. И на­оборот, если действующий размер адреса равен 32 бита, то указание перед коман­дой префикса 67h определит для нее (и только для нее!) размер адреса в 16 битов. Физически это будет отражаться на размере поля смещения в данной машинной команде. Префикс размера операнда ббп позволяет сменить действующий для данной команды атрибут размера операнда. Команда, которая по умолчанию работает со словом (16 битов) или с двойным словом (32 бита), имеет атрибут размера операн­да, равный 16 и 32 бита соответственно. Применение префикса размера операнда позволяет сменить действующий по умолчанию атрибут. При работе процессора i 8086 в реальном и виртуальном режимах атрибуты раз­мера адреса и операнда по умолчанию равны 16 битов. В защищенном режиме зна­ чения этих атрибутов зависят от значения бита D дескриптора сегмента. Если D = 0, то атрибуты размера адреса и операнда равны 16 битов, если D = 1, то эти атрибуты рав­ ны 32 бита. Изменить действующие по умолчанию атрибуты адреса и размера опе­рандов можно применением атрибутов usel 6 или use 32 в директивах сегментации. Занятие (38) Особенности программирования на языке Ассемблер Код операции Код операции — обязательный элемент, описывающий операцию, выполняе­мую командой. Код операции может занимать от одного до трех байт. Для некоторых машинных команд часть битов кода операции может находиться в байте mod r/m. Многим командам соответствует несколько кодов операций, каждый из кото­рых определяет нюансы выполнения операции. Отметим, что поле кода операции не имеет однозначной структуры (см. рис. 3.1). В зависимости от конкретных ко­манд, не обязательно разных с точки зрения языка ассемблера, оно может иметь в своем составе от одного до трех элементов, назначение которых описано в табл. 3.2. Один из этих трех элементов является непосредственно кодом операции или ее частью, остальные уточняют детали операции. Такое строение поля кода опера­ции усложняет, в частности, процесс дизассемблирования. Для определения размера и границ очередной команды необходимо полностью проанализировать ее Поле кода операции. Байт режима адресации mod r / m Байт режима адресации mod r / m , иногда называемый постбайтом, несет инфор­мацию об операндах и режиме адресации. Большинство команд процессора Intel — двухоперандные. Операнды могут находиться в памяти, а также в одном или двух регистрах. Архитектура IA-32 не допускает, чтобы оба операнда команды находи­лись в памяти. Если операнд находится в памяти, то байт mod r/m определяет ком­поненты (смещение, базовый и индексный регистры), используемые для вычисле­ния его эффективного адреса (см. главу 2). Байт mod r/m состоит из трех полей (см. рис. 3.1). - Поле mod (два бита) определяет способ адресации и количество байтов, занима­емых в команде адресом операнда (поле смещения в команде). Поле mod исполь­зуется совместно с полем r/m, которое определяет способ модификации адреса операнда полем смещения в команде. Поле mod в комбинации с полем r/m обра­зует 32 возможных значения, обозначающих один из восьми регистров и 24 ре­жима адресации. К примеру,   - если mod = 00, то поле смещения в команде отсут­ствует и адрес операнда определяется содержимым базового и/или индексного регистра. Какие именно регистры потребуются для вычисления эффективного адреса, определяется значением этого байта.   - Если mod = 01, то поле смещения в команде присутствует, занимает один байт и модифицируется содержимым базового и/или индексного регистра. - Если mod = 10, то поле смещения в коман­де присутствует, занимает два или четыре байта (в зависимости от значения, действующего по умолчанию или определяемого префиксом размера адреса) и модифицируется содержимым базового и/или индексного регистра. - Если mod = 11, то операндов в памяти нет — они находятся в регистрах. Это же значе­ние байта mod используется в случае, когда команда работает с непосредствен­ным операндом.  - Поле reg (3 бита) определяет либо регистр (табл. 3.3 и 3.4), находящийся в ко­манде на месте второго операнда, либо возможное расширение кода операции (давая в совокупности размер поля КОП в 11 битов). - Поле r / m используется совместно с полем mod и определяет либо регистр, на­ходящийся в команде на месте первого операнда (если mod = 11), либо базовые и индексные регистры, применяемые для вычисления эффективного адреса (со­вместно с полем смещения в команде). Таблица 3.3. Значения кодов в поле reg (поле w присутствует в команде)  
Поле reg w = 0 w=1
000 AL AX/EAX
001 CL CX/ECX
010 DL DX/EDX
011 BL BX/EBX
100 AH SP/ESP
101 CH BP/EBP
110 DH SI/ESI
111 BH DI/EDI

Таблица З .4. Значения кодов в поле reg (поле w отсутствует)

 

Поле reg 16-разрядные операции 32-разрядные операции
000 АХ ЕАХ
001 сх ЕСХ
010 DX EDX
011 ВХ ЕВХ
100 SP ESP
101 ВР ЕВР
110 SI ESI
111 DI EDI

В таблицах нет содержимого поля reg для 16-разрядных регистров в 32-разрядых операциях, так как в архитектуре Intel отдельно использовать старшую половину 32-разрядного регистра невозможно.

В архитектуре Intel один из операндов обязательно находится в регистре, и он может быть первым или вторым. Расположение первого и второго операндов в формате команды фиксировано. Но, например, команда M0V может выполнять пересылку как из регистра в память, так и из памяти в регистр. В машинном представлении это одна и та же команда. В ее поле reg будет содержаться код регистра (см. табл. 3.3 и 3.4), а в поле r/m — код режима адресации (см. далее). Эти две команды будут различаться только одним битом d, который определяет направление передачи. Если в команде участвуют два регистра, то в этом случае вступает в силу правило: поле reg определяет второй операнд, а поле r/m — первый. Если команда mov рабо­тает с ячейкой памяти, то в исходном тексте программы могут быть следующие варианты записи этой команды:

mov abl1.ax ;пересылка содержимого ах в ячейку памяти abl1

или
mov ax,abl1 ;пересылка содержимого  ячейки памяти abl1 в ах

В машинном представлении эти две команды будут выглядеть одинаково, за исключением бита d: 

- для команды MOV abll,ax бит d = 0;

- для команды MOV ax,abll бит d = 1.

Наиболее сложными для декодирования являются команды с операндом в па­мяти. Фирма Intel сопровождает описание системы команд специальными табли­цами, облегчающими интерпретацию содержимого байта mod r/m (табл. 3.5 и 3.6). С их помощью можно довольно легко восстановить компоненты, из которых фор­мировался адрес операнда, и, в конечном итоге, восстановить соответствующую команду ассемблера для данной машинной команды.

 

Таблица 3.5. Значения байта mod r/m (16-разрядная адресация)

 

г8

AL

CL

DL

BL

AH

CH

DH

BH

г16

AX

CX

DX

BX

SP

BP

SI

DI

г32

EAX

ECX

EDX

EBX

ESP

EBP

ESI

EDI

/цифра (код операции)

0

1

2

3

4

5

6

7

reg

000

001

010

011

100

101

110

111

Эффективный адрес

mod

r/m

Шестнадцатеричные значения mod r/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

0a

12

la

22

2a

32

3a

[BP+DI]

00

011

03

0b

13

lb

23

2b

33'

3b

[SI]

00

100

04

0c

14

lc

24

2c

34

3c

[DI]

00

101

05

Od

15

Id

25

2d

35

3d

смещ 16

00

110

06

Oe

16

le

26

2e

36

3e

[ВХ]

00

111

07

Of

17

If

27

2f

37

3f

[BX+SI]+Cмещ_8

01

000

40

48

50

58

60

68

70

78

[ВХ+01]+смещ_8

01

001

41

49

51

59

61

69

71

79

[BP+SI]+ смещ_8

01

010

42

4a

52

5a

62

6a

72

7a

[ВР+Ш]+смещ_8

01

011

43

4b

53

5b

63

6b

73

7b

[SI]+ смещ_8

01

100

44

4c

54

5c

64

6c

74

7c

ЭфФЕКТИВНЫЙ адрес

mod

r/m

Шестнадцатеричные значения mod r/m

 
тП+смещ_8

01

101

45

4d

55

5d

65

6d

75

7d

 
гор1+смещ_8

01

ПО

46

4e

56

5e

66

6e

76

7e

 
ГВХ]+смещ_8

01

111

47

4f

57

5f

67

6f

77

7f

 
[BX+SI]+ смещ _16

10

000

80

88

90

98

aO

a8

bO

b8

 
гвХ+М]+ смещ _16

10

001

81

89

91

99

al

a9

bl

b9

 
[BP+SI]+ смещ 16

10

010

82

8a

92

9a

a2

aa

b2

ba

 
[BP+DI]+ смещ _16

10

011

83

8b

93

9b

a3

ab

b3

bb

 
rSI]+смещ _16

10

100

84

8c

94

9c

a4

ac

b4

be

 
го1]+смещ_16

10

101

85

8d

95

9d

a5

ad

b5

bd

 
[ВР]+смещ_16

10

ПО

86

8e

96

9e

a6

ae

b6

be

 
[ВХ]+смещ_16

10

111

87

8 f

97

9 f

a 7

af

77

bf

 
EAX/AX/AL

11

000

c0

c8

dO

d8

eO

e8

ГО

f8

 
ECX/CX/CL

11

001

cl

c9

dl

d9

el

e9

fl

f5

 
EDX/DX/DL

11

010

c2

ca

d2

Da

e2

ea

f2

fa

 
EBX/BX/BL

11

011

c3

cb

d3

Db

e3

eb

0

fb

 
ESP/SP/AH

11

100

c4

cc

d4

Dc

e4

ec

f4

fc

 
ЕВР/ВР/СН

11

101

c5

cd

d5

Dd

e5

ed

f5

fd

 
ESI/SI/DH

11

по

c6

ce

d6

De

e6

ее

f6

fe

 
EDI/DI/BH

11

111

c7

cf

d7

Df

e7

ef

f7

ff

 
                                           

Таблица З .6. Значения байта mod r/m (32-разрядная адресация)

 

r32

EAX ECX EDX EBX ESP EBP ESI EDI

/цифра (код операции)

0 1 2 3 4 5 6 7

reg

000 001 010 011 100 101 110 111
Эффективный адрес mod r/m

Шестнадцатеричные значения mod r/m

_[ЕАХ]__ 00 000 00 08 10 18 20 28 30 38
_[ЕСХ]__ 00 001 01 09 11 19 21 29 31 39
_[ЕDХ]__ 00 010 02 0a 12 la 22 2a 32 3a
[EBX] 00 011 03 0b 13 lb 23 2b 33 3b
[sib] 00 100 04 0c 14 lc 24 2c 34 3c
Смещ__32 00 101 05 Od 15 Id 25 2d 35 3d
[ESI] 00 110 06 Oe 16 le 26 2e 36 3e
[EDI] 00 111 07 Of 17 If 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
[ЕDХ]+смеш 8 01 010 42 4a 52 5a 62 6a 72 7a

Продолжение

Эффективный адрес mod r/m

Шестнадцатеричные значения mod r/m

[ЕВХ]+смещ_8 01 011 43 4b 53 5b 63 6b 73 7b
[sib]+ смещ_8 01 100 44 4c 54 5c 64 6c 74 7c
[ЕВР]+смещ_8 01 101 45 4d 55 5d 65 6d 75 7d
[ESI]+ смещ_8 01 110 46 4e 56 5e 66 6e 76 7e
[ЕDI]+смещ_8 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 al a9 bl b9
[ЕDХ]+смещ_32 10 010 82 8a 92 9a a2 aa b2 ba'
[ЕВХ]+смещ_32 10 011 83 8b 93 9b a3 ab b3 bb
[SIB] 10 100 84 8c 94 9c a4 ac b4 be
[ЕВР]+смещ_32 10 101 85 8d 95 9d a5 ad b5 bd
[ESI]+смещ_32 10 110 86 8e 96 9e a6 ae b6 be
[ЕDI]+смещ_32 10 111 87 8f 97 9f a7 af 77 bf
EAX/AX/AL 11 000 cO C8 dO d8 eO e8 fO f8
ECX/CX/CL 11 001 cl C9 dl d9 el e9 fl f9
EDX/DX/DL 11 010 c2 ca d2 Da e2 ea f2 fa
EBX/BX/BL 11 011 c3 cb d3 Db e3 eb G ft
ESP/SP/AH 11 100 c4 cc d4 Dc e4 ec f4 fc
ЕВР/ВР/СН 11 101 c5 cd d5 Dd e5 ed f5 fd
ESI/SI/DH 11 110 c6 ce d6 De e6 ее f6 fe
EDI/DI/BH 11 111 c7 cf d7 Df e7 ef f7 ff

 

Рассмотрим пример использования данных таблиц при значении байта mod r / m равном 87 h .

Для восстановления местонахождения операндов данной машинной команды следует найти это значение в одной из таблиц (какой таблицей воспользоваться, зависит от текущего режима адресации) и по первому столбцу строки, содержащей код 87 h, определить местонахождение первого операнда. В нашем случае адрес операнда формируется из содержимого регистра ВХ и 16-разрядного смещения, значение которого следует искать в следующих за байтом mod r/m двух байтах. Второй столбец той же строки содержит значение поля mod. Третье поле байта mod r/m можно найти, переместившись вверх по столбцу, содержащему значение 87h, до пересечения со строкой reg или /цифра. При этом будет выбрано значение, идентифицирующее один из регистров или продолжение кода операции. Что именно — определяется либо самим кодом операции, либо значением бита w в сочетаний с текущей разрядностью адреса (см. ранее).

При использовании 32-разрядной адресации содержимое байта mod r/m трак-туется несколько иначе из-за наличия в формате машинной команды байта sib I (см. подраздел «Байт масштаба, индекса и базы»).

Некоторые машинные команды могут работать с сегментными регистрами. Далее приведены соглашения по кодированию сегментных регистров. В дальнейшем изложении будем различать два набора регистров:

 - sreg 86 — сегментные регистры, существовавшие в архитектуре процессоров

18086/88 и i80286;

- sreg 386 — сегментные регистры архитектуры процессоров i80386 и выше.

Различие наборов состоит в том, что кодируются они различным количеством битов: sreg86 — двумя битами (табл. 3.7), a sreg386 — тремя (табл. 3.8).

Таблица 3.7. Кодировка сегментных регистров в наборе sreg 86

 

Код в поле sreg86 Сегментный регистр
00 ES
01 CS
10 SS
11 DS

Таблица 3.8. Кодировка сегментных регистров в наборе sreg386

 

Код в поле sreg386 Сегментный регистр
000 ES
001 CS
010 SS
011 DS
100 FS
101 GS  

Одна из целочисленных команд — команда M0V — может оперировать систем­ными регистрами. Кодировка этих регистров приведена в табл. 3.9.

таблица 3.9. Кодировка системных регистров в команде MOV

 

в поле creg Регистры управления Регистры отладки
000 CR0 DR0
001 _ DR1
010 CR2 DR2
011 CR3 DR3
 100 CR4
101
110 DR6
111 - DR7

 


Дата добавления: 2022-01-22; просмотров: 25; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!