|
Ушел с форума
16374 / 7686 / 1080
Регистрация: 11.11.2010
Сообщений: 13,763
|
|
| 10.11.2013, 17:46 [ТС] | |
|
ГЛАВА 3 В регистре IP/EIP/RIP (instruction pointer, указатель команд) всегда находится адрес команды, которая должна быть выполнена следующей. Более точно, в IP/EIP/RIP находится адрес этой команды, отсчитанный от начала сегмента команд, на начало которого указывает регистр CS. Поэтому абсолютный адрес этой команды определяется парой регистров CS и IP/EIP. За исключением случаев перехода, последовательно выполняемые команды в памяти следуют друг за другом, содержимое регистра IP/EIP/RIP увеличивается после выполнения каждой команды.АРХИТЕКТУРА 32/64-РАЗРЯДНОГО МИКРОПРОЦЕССОРА СЕМЕЙСТВА 80X86 (часть 3/3) Указатель команд В ранних микропроцессорах (до i8086) выборка команд осуществлялась следующим образом: когда микропроцессор был готов к выполнению следующей команды, он посылал содержимое IP по адресной шине во внешнюю память, считывал в соответствующей адресу ячейки памяти 1 байт данных и по шине данных пересылал его в регистр IP. Затем микропроцессор действовал в соответствии с командой и в процессе ее выполнения мог один или несколько раз обращаться к внешней памяти. Одна машинная команда может иметь длину более одного байта. В зависимости от длины команды (для микропроцессоров младше i80386 от 1 до 6 байт, для i80386 и старше от 1 до 15 байт) содержимое увеличивается на 1, 2 или более байт, если это не команда перехода. (При выполнении команды перехода содержимое CS и IP/EIP/RIP может измениться на любую величину.) Очередь команд. Для увеличения скорости выполнения программ в микропроцессоре i8086 регистр IP был дополнен 6-байтной очередью команд, организованной по принципу FIFO («первым пришел – первым ушел»). Очередь команд непрерывно заполняется только тогда, когда системная шина не требуется для других операций. Если системная шина занята – команды выбираются из очереди команд. Конвейеризация вычислений. С появлением микропроцессора i80486 для еще большего увеличения скорости выполнения программ очередь команд была дополнена конвейером. Конвейер – специальное устройство, реализующее такой метод обработки команд внутри микропроцессора, при котором исполнение команды разбивается на несколько этапов. i80486 имел пятиступенчатый конвейер. Соответствующие пять этапов включали:
Предсказание правильного адреса перехода. Под переходом понимается запланированное алгоритмом изменение последовательного характера выполнения программы. Как показывает статистика, типичная программа на каждые 6-8 команд содержит 1 команду перехода. Последствия этого предсказать не сложно: при наличии команды перехода через каждые 6-8 команд конвейер и очередь команд нужно очищать и заполнять заново в соответствии с новым адресом перехода. Все преимущества конвейеризации теряются. Поэтому в архитектуру Pentium был введен блок предсказания переходов. Суть этого метода заключается в следующем. Pentium имеет буфер адресов перехода, который хранит информацию о последних 256 переходах. Если некоторая команда управляет ветвлением, то в буфере запоминаются эта команда, адрес перехода и предположение о том, какая ветвь программы будет выполнена следующей. Почти в любой программе имеются циклы, в ходе выполнения которых периодически необходимо принимать решение либо о выходе из цикла, либо о переходе на его начало. Специальный блок предсказания адреса перехода прогнозирует, какое решение будет принято программой. При этом он основывается на предположении, что ветвь, которая была пройдена, будет использоваться снова, и загружает соответствующую команду перехода на конвейер. В случае если это предсказание верно, переход осуществляется без задержки. Для того чтобы судить об эффективности этого нововведения, достаточно отметить, что вероятность правильного предсказания составляет 80 %. Система команд Описание любого микропроцессора выглядит иначе, чем описание большинства других микросхем, отчасти из-за присутствия в нем обширного раздела, посвященного «системе команд». Для использования микропроцессора важно понимать, что «делают» команды: как обращаться к памяти («типы адресации»), к регистрам, куда попадают результаты арифметических операций, как устроить условное ветвление (переходы) и т.д. Каждая команда микропроцессора x86 состоит из одного, двух или более байт, причем первый байт – это опкод команды. Опкод определяет природу команды; по опкоду микропроцессор определяет, нужны ли дополнительные байты, и, если да, получает их в последующих циклах. Поскольку опкод состоит из 8 бит, может существовать 256 разных опкодов. Ограничение в 256 команд было обойдено, так как некоторые опкоды (0FEh, 0FFh и другие) служат шлюзами к следующим таблицам кодов. В приложении представлен полный список команд микропроцессора x86.В таблице команды даны не в шестнадцатеричном машинном представлении (машинном коде), а в виде мнемокодов языка ассемблера, поскольку микропроцессор x86 обычно программируют на этом более удобочитаемом языке, обозначая адреса и числа легко запоминаемыми именами вместо чисел, с которыми в действительности оперирует микропроцессор. После того как программа написана на языке ассемблера, стандартная программа, известная также под названием «ассемблер», преобразует мнемокоды и имена в числа. В связи с этим язык ассемблера называют «входным языком» в отличии от числового «объектного языка», который микропроцессор x86 использует непосредственно. Таким образом, программа ассемблер переводит на объектный язык программы, составленные на входном языке. В процессе этого перевода одна команда языка ассемблер может быть преобразована в 1, 2 или более байт объектного языка в зависимости от конкретной команды. Последующие главы погрузят Вас в изучение системы команд микропроцессора x86, поскольку это единственный способ составить представление о его работе. Система прерываний Прерывания – это аппаратный механизм, который заставляет микропроцессор прервать выполнение текущей задачи и заняться обработкой внешнего события. Первоначально прерывания были разработаны для повышения эффективности планирования использования микропроцессора. Одним из мотивов было желание предоставить «интеллектуальным» устройствам возможность производить операции ввода-вывода независимо от микропроцессора. Устройству необходимо только сигнализировать с помощью прерывания микропроцессору о том, что передача данных завершена. Другой мотив возник из происходящих внутри микропроцессора событий, а именно случаев ошибок (как, например, слишком большое целое число, деление на ноль, выход за границы памяти и т.п.), а также связанных с операционной системой отслеживающих механизмов. Последний мотив возник в многопроцессорных системах, в которых каждый микропроцессор должен сигнализировать другим о доступе к разделенным ресурсам. Прерывание – это сигнал микропроцессору, вынуждающий его отвлечь свое внимание от текущей деятельности. Ценность аппарата прерываний заключается в том, что микропроцессор может автоматически реагировать на внешние по отношению к системе ситуации, а также на ситуации, возникающие внутри него самого. Аппарат прерываний может включать в себя несколько типов прерываний. Наиболее общими, конечно, являются прерывания, генерируемые периферийными устройствами, требующими обслуживания после завершения операции ввода-вывода. Другой источник прерываний – это устройства управления памятью, которое может сигнализировать об обращении к виртуальной странице памяти, отсутствующей в оперативной памяти, или об ошибочной адресации. Внутри микропроцессора прерывания могут генерироваться в случае арифметических ошибок. И, наконец, посредством выполнения специальной команды может быть сгенерировано программное прерывание. В результате прерывания происходит переход к программе обработки прерываний. Прежде чем приступить к анализу причины прерывания, эта программа должна сохранить текущее состояние микропроцессора. Когда выполнение программы обработки прерываний завершено, управление должно быть снова передано прерванному процессу, причем таким образом, чтобы вклинившаяся работа программы обработки прерываний никак не отразилась на выполняемых им операциях. Существуют три основных типа механизма прерываний: прерывание, вызванное сбросом или запуском микропроцессора, прерывания по вызову и векторные прерывания. Внешние прерывания Микропроцессор x86 имеет три линии прерываний – RESET, NMI и INTR, по которым внешние устройства могут передавать свои запросы на обслуживание со стороны микропроцессора.Рис. 3.5.1
Векторы прерываний служат для идентификации процедур, необходимых для обслуживания требования прерывания. Каждому внешнему требованию на прерывание может быть поставлен в соответствие код прерывания в пределах от 0 до 255. В микропроцессоре x86 существует 256 векторов прерываний – по одному вектору на каждый тип прерывания. Таблица векторов прерываний занимает 1024 младших байта памяти – ячейки с физическими адресами от 00000 до 003FFh – и имеет 256 входов в соответствии с количеством векторов. Каждый вход таблицы является указателем двойного слова, содержащего начальный адрес процедуры, которая обеспечивает обслуживание требования на прерывание данного типа. Старшее 16-битовое слово каждого входа таблицы содержит перемещаемый адрес процедуры обслуживания внутри сегмента. Так как каждый вход таблицы занимает четыре байта, первая ячейка входа для прерывания данного типа определяется умножением кода типа прерывания на четыре. Маскируемые прерывания. Это внешние требования, поступающие в микропроцессор по линии INTR. С помощью маскируемых прерываний можно засинхронизовать с микропроцессором наибольшее число внешних устройств. При активизации линии INTR микропроцессор совершает различные действия, зависящие от состояния флага прерываний IF. Реализуемая в этот момент машинная команда всегда выполняется до конца, и только после этого начинается обработка запроса на прерывание. Если флаг прерываний IF=0 (прерывание не возможно), то требование маскируемого прерывания игнорируется, и микропроцессор продолжает выполнять очередную команду текущей программы. Если IF=1 (прерывание разрешено), микропроцессор подтверждает требование прерывания и передает управление той процедуре, которая должна обслужить поступившее требование. Для выполнения требования маскируемого прерывания микропроцессор автоматически выполняет следующую последовательность действий:
Немаскируемые прерывания. Это внешние требования, поступающие в микропроцессор по линии NMI. Обычно ими являются прерывания, сигнализирующие микропроцессору о внешних событиях особой важности (носящих катастрофический характер), таких как отключение питания, сбой памяти и т.п. Немаскируемые прерывания принимаются микропроцессором всегда независимо от состояния флага прерываний IF, поэтому немаскируемые прерывания имеют более высокий приоритет по сравнению с маскируемыми прерываниями. Им присвоен тип 2. Микропроцессор в ответ на требование немаскируемого прерывания выполняет следующие действия:
Внутренние прерывания Внутренние прерывания обуславливаются прикладными программами, использующими команду INT. Они возникают также при некоторыхусловиях автоматически по сигналам в самом микропроцессоре, например, при ошибках деления, переполнении и т.п. Внутренние прерывания аналогичны маскируемым прерываниям, требования на которые поступают по линии INTR. Отличие заключается в том, что микропроцессор реагирует на запросы внутренних прерываний независимо от состояния флага IF. Код типа внутреннего прерывания может быть задан аппаратно либо представлен частью машинной команды. Если тип прерывания кодируется командой, то оно называется программным прерыванием. Последнее является удобным средством проверки процедур прерывания, составленных для обслуживания внешних устройств. Обычно программные прерывания используются для реализации возможностей, предоставляемых системным программным обеспечением. Прерывание из-за ошибки деления. Микропроцессор автоматически генерирует прерывания типа 0 немедленно вслед за операциями DIV (целочисленное деление без учета знака) или IDIV (целочисленное деление с учетом знака) при возникновении следующих условий:
Пошаговое прерывание. Когда флаг TF установлен, микропроцессор x86 автоматически вырабатывает сигнал внутреннего прерывания INT 1h после выполнения каждой команды. Это обеспечивает удобство проверки программ, написанных на машинном коде, поскольку они при этом выполняются команда за командой. Адрес сервисной процедуры организации пошагового режима должен быть определен в ячейках памяти с физическими адресами от 00004h до 00007h. При генерации прерывания INT 1h микропроцессор x86 автоматически загружает в стек содержимое регистра флагов (с единичным флагом ловушки), после чего обнуляет флаги ловушки и прерываний. Таким образом, микропроцессор x86 не переходит в пошаговый режим пока выполняется сама процедура обслуживания прерывания, которая реализует различные диагностические операции. Процедура обслуживания прерывания INT 1h может включать в себя отображение на дисплее такой информации, как содержимое регистров и определенной области памяти сразу после выполнения команды. Последняя машинная команда в процедуре обслуживания – команда IRET (возврат из прерывания). Этим восстанавливается прежнее единичное состояние флага TF, и по завершении следующей команды вновь генерируется прерывание INT 1h. Прерывание в точке. Прерывание в заданной точке программы используется для отладки при ее написании и тестировании. Микропроцессор генерирует прерывание типа 3 немедленно по завершении выполнения команды INT 3h. Шестнадцатеричный машинный код этой команды 0CCh используется как команда прерывания в заданной точке программы. Этот код вставляется в любое место программы, где необходимо прервать ее нормальное выполнение, и с помощью процедуры, обслуживающей это прерывание, отобразить критическую информацию, такую как содержимое внутренних регистров микропроцессора и ячеек памяти. Поскольку минимальная смысловая часть команды INT 3h занимает один байт, для использования в различных программных отладчиках для установки точек прерывания (break point) машинный код 0CCh может подменить любую команду, обозначая тем самым точку программы, в которой необходимо осуществить прерывание. Адрес сервисной процедуры организации обработки прерывания в заданной точке программы должен быть определен в ячейках памяти с физическими адресами от 0000Ch до 0000Fh. Прерывание, если переполнение. Микропроцессор генерирует прерывание типа 4 или INTO если обнаружено, что OF=1. Если команда в программе может в результате своей работы установить флаг переполнения OF (к примеру, арифметические команды), то для обнаружения и обработки такой ситуации можно использовать команду INTO или INT 4h (машинный код 0CEh). Особенности передачи управления и обработки (корректировки) результата зависят от режима работы микропроцессора. Адрес сервисной процедуры организации обработки прерывания по переполнению должен быть определен в ячейках памяти с физическими адресами от 00010h до 00013h. Контрольные вопросы и упражнения
13
|
|
|
Новые блоги и статьи
|
|||
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю
Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы
Кратко. . .
|
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем
**Полевые заметки о двухнедельной совместной работе**. . .
|
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|