| RSS



Меню

Bookmark and Share


Статистика
Ваш IP: 13.59.5.179
Вы используете: v





Сейчас на сайте:

Тех поддержка ->

Облако тэгов
ОС видио Tor Обратная сторона антенна 4.6 PHP Эксплоит Windows Server 2008 qip Virtual chroot kernel proc sysctl tune FreeBSD bridge Boot Disk Bluetooth GEO game directx Emulator Python Shell DDoS червь Conficker вирус троян Лаборатория Касперского пиратство apple iPhone ИТ-отрасль Щеголев Microsoft экономический кризис Twitter социальная сеть анонимность Лицензия Open Source ASP.NET MVC уязвимость MySQL база данных файлообмен закон франция пират Skype мобильный Deutsche Telekom Хакер киберпреступник Trend Micro кибератака Германия робот утечка данных персональные данные ноутбук интернет Китай цензура ядро Linux Торвальдс Windows Vista Acer Linux патент браузер Firefox Internet Explorer Opera Net Applications Safari Intel Linux Foundation Moblin Oracle патч банкомат кардер HSM IBM X-Force Cofee сша кибервойна Эстония Dell ИТ-специалист хакерские атаки Pirate Bay контроль кибербезопасность язык программирования The Pirate Bay Пиратская партия утечка информации приговор Mozilla Chrome безопасность Госдума СМИ Windows 8 Баллмер взлом Пентагон ботнет Украина Facebook Cisco cloud Windows XP нетбук торрент музыка биометрический nokia ФБР IP-адрес CIPAV Comcast sms RSA java Google CAPTCHA Symantec спам конфиденциальная информация инсайдер Perimetrix антивирус тест Anti-Malware Windows 7 операционная система Windows провайдер авторское право RapidShare UNIX свиной грипп шантаж дети EFF BluWiki копирайт экстремизм Panda Security cloud computing McAfee Cybercrime Response Unit Bottle Domains HTTPS ICANN студент шпионское ПО Норвегия школьник New York Times XSS YouTube Warner Music кибершпионаж КНДР Ubuntu свободное ПО AMD ATI касперский Россия РФ сервер хостинг фальшивый антивирус Comodo CA Wi-Fi D-Link суд пароль блог фишинг Одноклассники медведев контрафакт мошенник штраф Sony GPS по Gumblar JAVASCRIPT хакеры вредоносное ПО Yahoo ФАС компьютер Софт MPAA кибероружие PandaLabs Red Hat Минкомсвязи сбой ASUSTeK Computer мошенничество Доктор Веб ВКонтакте Cyber-Arc исходный код PCI DSS МВД фильтр порнография BREIN свобода слова Казахстан GEMA Autodesk сисадмин Gmail кредитная карта кибермошенник LiveJournal шифрование криптография Deep Purple банк нанотехнологии Wikipedia zero-day ColdFusion выборы кража данных DNS BIND Android BASIC атака Black Hat Mac OS X Click Forensics Clampi домен фсб Прокуратура Уголовное дело icq Barrelfish киберпреступность Sophos AT&T ошибка Electa Gamma Knife OpenBSD DARPA военные Сайт Visual Studio 2010 .NET Framework 4 Chrome OS электронная почта турция конференция спамер FTC полиция российская ОС Koobface Великобритания БЕЛОРУССИЯ грузия BSA Bittorrent облачные вычисления Azure Европа Dr.Web Билл Гейтс спецслужбы Cryzip Живой Журнал Royal Bank of Scotland смартфон Canonical Pwn2Own F-Secure Symbian Hotmail фильм

Главная » Статьи » Общие Статьи

64-битный режим под DOS
О природе вещей

Название данного материала может показаться странным. Операционная система MS-DOS, традиционно ассоциируемая с 16-битными процессорами и программами, уже давно вышла из широкого употребления на персональных компьютерах и забыта многими пользователями как безнадежно устаревшая. В то же время, несмотря на то, что прошло более 5 лет с момента выхода 64-битных процессоров x86, время полноценного использования 64-битных вычислений на платформе PC еще не пришло.

Так в чем же смысл совмещения этих двух представителей разных эпох: старой 16-битной системы MS-DOS и нового 64-битного режима работы процессора?

Представим себе специалиста, область интересов которого находится на границе аппаратного и программного обеспечения. Это может быть системный программист, занимающийся написанием BIOS или диагностического программного обеспечения, которому нужно отладить процесс взаимодействия процедур программы с аппаратурой. Также это может быть разработчик микросхем чипсета, которому требуется выполнить ряд испытаний: например программно сформировать некоторое управляющее воздействие (записать данные в регистры управления) и проконтролировать результат (прочитать данные из регистров статуса). В отличие от прикладного программирования, для такой задачи важно понимание процесса выполнения программы на уровне принципиальной электрической схемы, генерации сигналов и выполнения транзакций на системной шине процессора при выполнении ассемблерных команд.

Для перечисленных выше примеров система DOS удобна тем, что в силу своей простоты и компактности, она, в отличие, например от Windows, имеет высокие шансы запуститься на частично работоспособной (отлаживаемой) системе. Она не требует процедуры повторной инсталляции, если мы заменяем отлаживаемую плату, что важно в случаях, когда через отладку проходят десятки и сотни плат различных моделей. Но главное не в этом.

Известно, что одним из важнейших свойств многозадачных ОС является способность сохранять устойчивость ОС при различных сбоях внутри приложений. Для этого ОС существенно ограничивает набор операций, которые позволено выполнять приложениям. Например, если пользовательская программа (user) попытается напрямую обратиться к регистрам системных устройств, операционная система (supervisor) перехватит данное обращение и запрошенная операция не состоится. При этом ОС выполнит эмуляцию или выдаст сообщение об ошибке. Оба варианта неприемлемы, если наша задача - отладка взаимодействия программы с регистрами чипсета или системными регистрами процессора.

Здесь читатель может возразить и сказать, что существуют методы обхода такой защиты. Да, это так, но будет ли польза от этого в нашем случае? Мы обойдем защиту и выполним интересующую нас перенастройку чипсета. После этого, с высокой вероятностью в результате перенастройки чипсета “зависнет” весь Windows и нам останется только нажать RESET.

В свою очередь, если мы работаем под ”чистым” DOS, у нас нет необходимости обходить какие-либо защиты, наша программа сама включает Protected Mode и является супервизором, она может монопольно взаимодействовать с любым программно-доступным ресурсом. Мы можем контролировать выполнение программы на уровне ассемблерных команд и машинного кода. В силу своей простоты и компактности, DOS имеет существенно меньшую вероятность “зависания” при выполнении различных нестандартных экспериментов с оборудованием.

Конечно, здесь тоже есть свои границы дозволенного. Если мы, например, перепрограммируем тактовый генератор и выключим тактирование процессора, зависнет и DOS.
Что предлагается

Автор реализовал переключение процессора в 64-битный режим на ассемблере под DOS, то есть “с нуля”. Публикуемый исходный текст может быть использован программистами как шаблон для исследовательских работ и написания собственных процедур. Программа подготавливает контекст (генерирует таблицы дескрипторов сегментов и страниц, устанавливает содержимое системных регистров процессора), и переключает процессор в режим IA32e. В этом режиме приобретает функциональность ранее зарезервированный бит 53 (бит L=Long Mode) дескриптора сегмента кода: межсегментная передача управления вызывает переключение процессора в 64-битный режим, если в дескрипторе целевого сегмента кода бит L=1. Иначе, если L=0, процессор остается в 32-битном режиме. В предлагаемой программе выполняется 2 примера: вызов 32-битной целевой процедуры из сегмента, в дескрипторе которого L=0 и вызов 64-битной целевой процедуры из сегмента, в дескрипторе которого L=1. Для контроля результатов, автор поместил в тело целевых процедур инструкции, сохраняющие результаты в памяти. Данные результаты могут быть проконтролированы путем выполнения дампа буфера при работе под отладчиком.

Как было сказано выше, публикуемый исходный текст является шаблоном, содержимое целевых процедур может быть модифицировано или переписано пользователем в соответствии с его задачами.

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

Данный материал адресован следующей аудитории:
Специалисты, область интересов которых находится на границе аппаратного и программного обеспечения.
Программисты, занимающиеся разработкой операционных систем “с нуля”.
Программисты, занимающиеся разработкой специализированного программного обеспечения для диагностики и верификации PC. Если такое программное обеспечение будет компактным и самодостаточным, то у него значительно больше шансов запуститься на диагностируемой частично исправной системе и выполнить свои функции, чем например у Windows-приложения, так как на частично исправной системе не запустится сам Windows.
Преподаватели и студенты технических вузов. Актуально для специальностей, связанных с программированием на языке ассемблера, изучением архитектуры 64-битных процессоров и аппаратного обеспечения компьютера.

Предполагается, что читатель знаком с программированием на языке ассемблера для 16-ти и 32-битной архитектуры x86 с использованием программ фирмы Borland: Turbo Assembler (TASM) 3.0, Turbo Linker (TLINK) 4.0, Turbo Debugger 2.51. В целях компактности изложения, в описании программы детально прокомментированы только те аспекты, которые имеют отношение к 64-битному режиму.
Организация рабочего места

Для запуска предлагаемых фрагментов, вам потребуется “чистая” DOS-среда. Подойдет MS-DOS версий 5, 6 или DOS, поставляемая в составе Windows 98. Процессор должен работать в реальном режиме (Real Mode), следует отключить менеджеры памяти EMM386, QEMM. Разумеется, в DOS-окне под Windows предлагаемые эксперименты не могут быть выполнены. Для удобства, рекомендуется использовать файловый менеджер, например Volkov Commander (VC). Следующие программы фирмы Borland должны присутствовать на диске и на них должен быть установлен путь оператором PATH в AUTOEXEC.BAT: Turbo Assembler (TASM) 3.0, Turbo Linker (TLINK) 4.0, Turbo Debugger 2.51. Хотя, опытный пользователь может использовать другую среду по своему усмотрению.

Процессор должен поддерживать 64-битное расширение для x86: AMD64 или Intel EM64T.

Так как предлагаемая программа является “полуфабрикатом”, подразумевается, что предварительную проверку режима работы процессора (Real или Protected), а также идентификацию процессора и проверку наличия поддержки 64-битного режима при необходимости пользователь может реализовать самостоятельно.

Экспериментировать с ассемблерным кодом будет значительно удобнее при наличии устройства POST Card (Port 80h). Данное устройство обычно используется при диагностике материнских плат и отображает так называемые POST коды, формируемые BIOS. Физически, POST Card - это 8-битный порт вывода (регистр) с адресом 0080h снабженный 2-разрядным 7-сегментным индикатором, работающим в шестнадцатеричной системе (00h-FFh) и отображающим код, записанный в регистр. Устройства POST Card выпускаются в вариантах для установки на шину ISA или PCI. На некоторых материнских платах они интегрированы. Данное устройство удобно для расстановки контрольных точек в программе при локализации места “зависания”, так как для вывода контрольной точки достаточно двух ассемблерных команд:

MOV AL, Check_Code
OUT 80h,AL

Если при выполнении отлаживаемой секции программы, компьютер не “зависает”, а перезапускается, и нет возможности пронаблюдать код на индикаторе и определить, дошло ли выполнение до заданной точки, рекомендуется выполнить запрет прерываний и останов после вывода кода:

MOV AL, Check_Code
OUT 80h,AL
CLI
HLT

Если выполнение дошло до данной точки, процессор остановится и на индикаторе будет отображаться код Check_Code.

Описание работы программы

Прилагаемый архив содержит следующие файлы:

ASM.BAT – обеспечивает ассемблирование, линковку и запуск программы под отладчиком. При запуске TASM и TLINK используются опции, обеспечивающие добавление отладочной информации в EXE файл.

X86-64.ASM – основной модуль программы, 16-битный сегмент кода, запускаемый из реального режима DOS.

CODESEGS.INC – сегменты кода, содержащие вызываемые подпрограммы: транзитный 32-битный сегмент кода, целевой 32-битный сегмент кода, целевой 64-битный сегмент кода.

DATASEGS.INC – сегменты данных: сегмент для хранения переменных, сегменты для построения глобальной дескрипторной таблицы (GDT) и таблицы страничной трансляции, а также сегмент стека.

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

Рассмотрим выполнение основного модуля. Нумерация пунктов данного описания соответствует нумерации пунктов комментариев в исходном тексте - файле WORK\x86-64.asm.

1) Контрольная точка 00h – начало выполнения программы. Вывод в порт 80h кода 00h.

2) Установка SS:SP для адресации стека.

3) Инициализируем адреса для генерации таблицы страниц (Page Directory) в сегменте PAGING_TABLES и ее адресации при работе в Protected Mode. Устанавливаем значения регистров: ES=Базовый адрес сегмента PAGING_TABLES, DS=Базовый адрес, выровненный на 4KB, EAX=CR3=Базовый физический адрес таблицы страниц.

4) Генерируем таблицу страниц. В данном примере используется режим страничной трансляции с использованием PAE (Physical Address Extension), что является необходимым для 64-битного режима. Для упрощения страничной трансляции, используется режим PSE (Page Size Extension), в котором размер страниц равен 2MB, стадия 4KB страниц пропускается. Таблица страниц, построенная в данном примере, описывает диапазон адресов 0-2MB (1 страница 2MB). При необходимости адресоваться выше 2MB, процедуру генерации таблицы страниц потребуется доработать.

Механизм страничной трансляции детально описан в документе [3].

5) Инициализируем адреса для генерации глобальной дескрипторной таблицы (GDT) в сегменте GLOBAL_DESCRIPTOR_TABLE и ее адресации при работе в Protected Mode. Устанавливаем значения регистров: DS=Базовый адрес сегмента GLOBAL_DESCRIPTOR_TABLE, GDTR=Базовый адрес GDT. Инициализируется дескриптор сегмента, содержащего таблицу GDT.

6) Генерируем таблицу GDT. В дескрипторах сегментов устанавливаем поля базовых адресов в соответствии с расположением программы в памяти. Остальные поля (лимиты сегментов и атрибуты) уже заданы в виде констант. Список сегментов, используемых в Protected Mode, приведен в описании модуля WORK\datasegs.inc. Механизм сегментации и назначение полей в дескрипторах сегментов детально описаны в документах [1], [8], [11], [15].

7) В сегменте переменных (DATA_16) подготавливаем адрес для косвенного межсегментного вызова транзитной подпрограммы Transit_32., которая включает страничную трансляцию, режим IA-32e и вызывает целевые подпрограммы Pattern_32 и Pattern_64.

8) В сегменте переменных (DATA_16) подготавливаем адрес для косвенного межсегментного вызова целевой подпрограммы Pattern_32, демонстрирующей пример 32-битных операции в режиме IA-32e.

9) В сегменте переменных (DATA_16) подготавливаем адрес для косвенного межсегментного вызова целевой подпрограммы Pattern_64, демонстрирующей пример 64-битных операции в режиме IA-32e. Так как в 64-битном режиме, в отличие от 32-битного, базовый адрес сегмента из дескриптора не используется, смещение процедуры Pattern_64 должно содержать слагаемое, обусловленное сегментной компонентой адреса.

10) Сохраняем регистры SS:SP (адрес стека в Real Mode) для последующего восстановления после возврата из Protected Mode.

11) Запрещаем аппаратные прерывания.

12) Устанавливаем опции, управляющие страничной трансляцией: биты CR4.4=PSE (Page Size Extension) и CR4.5=PAE (Physical Address Extension). Эта операция подготовительная - данные установки вступят в силу только после включения страничной трансляции.

Системный регистр CR4 детально описан в документах [1], [3], [8], [11].

Механизм страничной трансляции детально описан в документе [3].

13) Включаем Protected Mode (защищенный режим). После установки бита CR0.0=PE (Protection Enable), процессор интерпретирует значения сегментных регистров не как слагаемые при вычислении физического адреса, а как селекторы, выбирающие дескрипторы сегментов в дескрипторной таблице, находящейся в памяти. Базовый адрес, размер и атрибуты сегментов находятся в дескрипторах.

Protected mode (защищенный режим) детально описан в [15].

Покомандная трассировка в Turbo Debugger после перехода в Protected Mode невозможна, так как Turbo Debugger работает в Real Mode. Поэтому необходимо перед переключением в Protected Mode запустить программу на выполнение (Run), предварительно установив точку останова в таком месте, куда управление приходит после возврата в Real Mode, например, на метке B: (см. ниже).

Иначе, при попытке трассировать команду MOV CR0,EAX отладчик “зависнет”.

14) Выполняем межсегментный переход на следующую инструкцию. Это требуется для загрузки в регистр CS селектора текущего сегмента кода.

15) Загружаем в регистры DS и ES селекторы сегмента данных.

16) Загружаем в регистр SS селектор сегмента стека. Указатель стека – SP, не изменяется, используется значение, работавшее в Real Mode, так как сегмент стека физически тот же, при переходе в Protected Mode изменился только метод доступа к сегменту.

17) Контрольная точка 01h – выводится перед вызовом транзитной подпрограммы Transit_32. Вывод в порт 80h кода 01h.

18) Вызов транзитной подпрограммы Transit_32, которая включает страничную трансляцию и режим IA32e, после чего, вызывает целевые подпрограммы Pattern_32, Pattern_64. Данные подпрограммы рассмотрены при описании файла WORK\codeseg.inc.

19) Контрольная точка F0h – выводится после возврата из транзитной подпрограммы Transit_32. Вывод в порт 80h кода F0h.

20) Восстановление контекста Real Mode и возврат в Real Mode. В регистры DS, ES, SS, FS, GS загружается селектор 16-битного сегмента DATA_16, для установки Segment Limit=64KB, регистр CR3 перезаписывается для сброса содержимого буфера TLB. Сбрасывается бит CR0.0=PE (Protection Enable).

21) Продолжаем восстановление контекста Real Mode. Выполняем межсегментный переход на следующую инструкцию. Это требуется для перезагрузки регистра CS. Восстанавливаем адрес стека в SS:SP.

22) Разрешаем аппаратные прерывания.

23) Данный блок содержит точку останова, метку B: Когда мы выполняем программу под отладчиком, и управление пришло в эту точку, мы можем сделать дамп 16-байтного блока с адреса DS:BX. Там мы можем проконтролировать результаты работы целевых процедур Pattern_32 и Pattern_64.

24) Контрольная точка FFh – перед завершением программы. Вывод в порт 80h кода FFh.

25) Завершаем программу, используется функция 4Ch прерывания INT 21h. Код завершения 00h.

Рассмотрим выполнение подпрограмм. Нумерация пунктов данного описания соответствует нумерации пунктов комментариев в исходном тексте - файле WORK\codeseg.inc.

1) Контрольная точка 10h – начало выполнения подпрограммы Transit_32. Вывод в порт 80h кода 10h.

2) Установка “плоского” сегмента стека. Так как в 64-битном режиме, в отличие от 32-битного, базовый адрес сегмента из дескриптора не используется, смещение, загружаемое в ESP должно содержать слагаемое, обусловленное сегментной компонентой адреса стека. Заметим, что прерывания в данный момент запрещены, поэтому имеющая место рассогласованность значений SS и ESP в течение выполнения нескольких инструкций, здесь допустима.

3) Устанавливаем бит LME (Long Mode Enable) в регистре IA32_EFER MSR (Extended Feature Enable Register, Model-Specific Register). Устанавливаем бит CR0.31=PG (Paging). Включение страничной трансляции при LME=1 вызывает активацию режима IA32e. Процессор автоматически устанавливает бит LMA=1 (Long Mode Active) в регистре IA32_EFER MSR, при этом приобретает функциональность ранее зарезервированный бит 53 (бит L=Long Mode) дескриптора сегмента кода: межсегментная передача управления вызывает переключение процессора в 64-битный режим, если в дескрипторе целевого сегмента кода бит L=1. Иначе, если L=0, процессор остается в 32-битном режиме.

Регистр IA32_EFER MSR детально описан в [1], [8], [11].

4) Устанавливаем регистр FS для доступа к сегменту переменных DATA_16.

5) Вызываем 32-битную целевую процедуру.

6) Вызываем 64-битную целевую процедуру.

7) Выключаем страничную трансляцию и сбрасываем бит LME.

8) Восстанавливаем 16-битный стек.

9) Контрольная точка 1Fh – возврат из подпрограммы Transit_32. Вывод в порт 80h кода 1Fh.

10) Возврат из подпрограммы Transit_32.

Подпрограмма Pattern_32 в качестве примера 32-битной операции записывает содержимое регистра EAX по адресу FS:[EBX].

Подпрограмма Pattern_64 в качестве примера 64-битной операции записывает содержимое регистра RAX по адресу FS:[RBX].

Если предлагаемая программа используется как шаблон для исследовательских работ и решения различных задач, пользователь может добавлять свой код в тело выше указанных подпрограмм.

Сегмент INTERRUPTS_16 не используется и зарезервирован для размещения процедур обработки прерываний. Текущая реализация программы не поддерживает обработку прерываний в Protected Mode.

Рассмотрим блоки данных. Нумерация пунктов данного описания соответствует нумерации пунктов комментариев в исходном тексте - файле WORK\dataseg.inc.

1) Сегмент для размещения переменных DATA_16.

2) Список селекторов сегментов:

NUL – не используется процессором (нуль-селектор)
GDTR – сегмент, содержащий GDT
IDTR – сегмент, содержащий IDT, не используется в текущей реализации программы
CODE16 – 16-битный сегмент кода
CODE32 – 32-битный сегмент кода для транзитной процедуры
DATA16 – 16-битный сегмент данных для переменных
DATA32 – 32-битный сегмент данных, не используется в текущей реализации программы
STACK16 – 16-битный сегмент стека
INTS16 – сегмент процедур обработки прерываний, не используется в текущей реализации программы
TARGET32 – 32-битный сегмент кода для целевой процедуры
TARGET64 – 64-битный сегмент кода для целевой процедуры
STACK64 – сегмент стека для 32- и 64-битного режимов.

3) Шаблон для генерации структуры дескрипторов сегментов.

4) Глобальная дескрипторная таблица (GDT), содержит дескрипторы сегментов, используемых в Protected Mode.

5) Сегмент для генерации таблицы страниц (Page Table). В исходном состоянии этот сегмент не заполнен, он декларирован для резервирования памяти. Заполняется при работе программы.

6) Сегмент стека. Программа использует 3 метода доступа к стеку: стек Real Mode, 16-битный стек Protected Mode 16/32 и “плоский” стек для Protected Mode 32/64. Независимо от метода доступа, физически стек всегда расположен в этом сегменте.
Источники информации

Электронные документы, доступные на сайте developer.intel.com.

1) 64-bit Extension Technology Software Developer’s Guide. Volume 1 of 2. Order Number 300834-001.
2) 64-bit Extension Technology Software Developer’s Guide. Volume 2 of 2. Order Number 300835-001.
3) TLBs, Paging-Structure Caches, and Their Invalidation. Application Note. Document Number 317080-001.
4) Intel 64 and IA-32 Architectures Optimization Reference Manual. Order Number 248966-015.
5) Intel 64 and IA-32 Architectures Software Developer’s Manual. Volume 1: Basic Architecture. Order Number 253665-023US.
6) Intel 64 and IA-32 Architectures Software Developer’s Manual. Volume 2A: Instruction Set Reference, A-M. Order Number 253666-023US.
7) Intel 64 and IA-32 Architectures Software Developer’s Manual. Volume 2B: Instruction Set Reference, N-Z. Order Number 253667-023US.
8) Intel 64 and IA-32 Architectures Software Developer’s Manual. Volume 3A: System Programming Guide, Part 1. Order Number 253668-023US.
9) Intel 64 and IA-32 Architectures Software Developer’s Manual. Volume 3B: System Programming Guide, Part 2. Order Number 253669-023US.

Электронные документы, доступные на сайте developer.amd.com.

10) AMD64 Architecture Programmer’s Manual. Volume 1: Application Programming. Publication No. 24592.
11) AMD64 Architecture Programmer’s Manual. Volume 2: System Programming. Publication No. 24593.
12) AMD64 Architecture Programmer’s Manual. Volume 3: General-Purpose and System Instructions. Publication No. 24594.
13) AMD64 Architecture Programmer’s Manual. Volume 4: 128-Bit Media Instructions. Publication No. 26568.
14) AMD64 Architecture Programmer’s Manual. Volume 5: 64-Bit Media and x87 Floating-Point Instructions. Publication No. 26569.

Книги.

15) В.Л. Григорьев. Микропроцессор i486. Архитектура и программирование. Москва ТОО “ГРАНАЛ” 1993.
Заключение

Рассматриваемая в данном материале процедура включения 64-битного режима является частным случаем задач, для детального исследования которых автор применил запуск ассемблерных фрагментов под DOS. Эта статья в некотором роде пробная, при наличии читательского интереса к теме “аппаратно-приближенного программирования” и рассмотрению современных технологий на углубленном (ассемблерном) уровне, автор планирует продолжить цикл и выпустить новые материалы. Вот несколько примеров:
Запуск нескольких потоков выполнения для систем с Hyper-Threading и SMP.
Пример бенчмарок оперативной памяти в 64-битном 2-потоковом режиме.
Считывание параметров (разрядность и тактовая частота) соединений PCI Express.
Считывание параметров (разрядность и тактовая частота) соединений Hyper Transport.
Перепрограммирование микросхемы SPD на модуле DIMM средствами материнской платы, без использования дополнительного оборудования (программаторов).
Измерение тактовой частоты процессора и системной шины.
Использование Super VGA режимов в DOS-приложениях.
Тестирование оперативной памяти.
Тестирование видео памяти.

Примечание.

В данном материале рассматривается 64-битные расширения для процессоров x86: AMD 64 и Intel EM64T (Intel 64), которые являются логическим продолжением 32-битной архитектуры. Не следует путать данные расширения и архитектуру IA-64, которая используется в процессорах Intel Itanium и не является предметом рассмотрения здесь.


АрхивчеГГ

Категория: Общие Статьи | Добавил: aka_kludge (08.07.2008)
Просмотров: 3754 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
    Главная      
...
На службе : дней

02:19
Обновить


Пользователи
aka_kludge
qwerty
LeadyTOR
aka_Atlantis
AdHErENt
mAss
Sissutr
hiss
DrBio
tHick

Поиск


Copyright tHR - TeAM 2024 г. admin: aka_kludge (ICQ:334449009) Moderator's: LeadyTOR, ... Яндекс.Метрика