Тестовый регистр в процессорах Intel 80386 и Intel 80486 был регистром, используемым процессором, обычно для самотестирования. Большинство этих регистров не были документированы и использовались специализированным программным обеспечением. Тестовые регистры назывались TR3 - TR7 . Обычным программам обычно не требуются эти регистры для работы. С появлением Pentium тестовые регистры были заменены различными регистрами, специфичными для модели (MSR). [1]
В 80386 было предусмотрено два тестовых регистра, TR6 и TR7 , для тестирования TLB . TR6 был тестовым командным регистром, а TR7 был тестовым регистром данных. 80486 предоставил три дополнительных регистра, TR3 , TR4 и TR5 , для тестирования кэша L1. TR3 был регистром данных, TR4 был адресным регистром, а TR5 был командным регистром. К этим регистрам обращались варианты инструкции MOV . Тестовый регистр может быть как исходным операндом, так и целевым операндом. Инструкции MOV определены как в режиме реального адреса , так и в защищенном режиме . Тестовые регистры являются привилегированными ресурсами. В защищенном режиме инструкции MOV, которые обращаются к ним, могут быть выполнены только на уровне привилегий 0. Попытка чтения или записи тестовых регистров при выполнении на любом другом уровне привилегий вызывает общее исключение защиты. Кроме того, эти инструкции генерируют исключение недопустимого кода операции на большинстве процессоров новее 80486.
Инструкция кодируется двумя способами, в зависимости от потока данных. Перемещение данных из регистра общего назначения в тестовый регистр кодируется как 0F 26 /r(где r/mявляется GPR, а regявляется тестовым регистром). Перемещение данных в другую сторону (т. е. из тестового регистра в регистр общего назначения) кодируется как 0F 24 /r(где r/mявляется GPR, а regявляется тестовым регистром). [2] Поддерживаются только перемещения регистр-регистр - как таковые, поле "mod" (верхние 2 бита) байта ModR/M инструкции должно быть установлено в 11b. (Установка поля "mod" байта ModR/M в любое другое значение, чем 11bприводит к неопределенному поведению, при этом на разных процессорах наблюдается разное поведение. [3] )
Тестовые регистры и/или связанные с ними коды операций поддерживались в следующих процессорах x86 :
^ Сообщается, что на Intel 386 регистры TR4 и TR5 действуют как недокументированные регистры только для чтения, возвращающие элемент данных, связанный с предварительной выборкой инструкций. [4]
^ SoC на базе ядра CPU ST486, полученного от Cyrix, также поддерживали тот же набор тестовых регистров, что и Cyrix 486 — к таким SoC относятся, например, STPC Atlas и ZFMicro ZFx86. [10]
^ На Cyrix 6x86 регистры TR1 и TR2 можно было включить, установив бит 6 регистра конфигурации Cyrix 30h. Эти регистры не документированы, но пример кода, использующего их, был опубликован Cyrix. [13]
^ На Cyrix 6x86 регистры TR6 и TR7 могли использоваться не только для тестирования TLB, но и для настройки VSPM (механизма подкачки переменных размеров) процессора. [14] VSPM был 4-записным [15] программным TLB с маской для каждой записи для поддержки всех размеров страниц, являющихся степенью двойки, от до байт. Он присутствовал только в Cyrix 6x86 — он был удален в 6x86MX и более поздних процессорах.
^ ab В процессорах 6x86MX, MII и «Joshua» Cyrix III регистры TR3-TR5 могли использоваться не только для тестирования кэша L1, но и для блокировки отдельных строк кэша L1 по определенным адресам для использования в качестве временной памяти . [16] [17]
^ Только ядро "Joshua". Варианты ядра "Samuel" Cyrix III не поддерживали тестовые регистры TRx.
^ Руководство разработчика семейства процессоров Intel Pentium®, номер заказа 241428-005, 1997 г., раздел 16.1.2, стр. 442 — содержит список регистров MSR Pentium, которые обеспечивают ту же функциональность, что и регистры TRx 386/486.
↑ Введение в 80386, включая спецификацию 80386. Intel . Апрель 1986. С. 122.
↑ Роберт Л. Хаммел, Технический справочник программиста журнала PC Magazine, 1992, ISBN 1-56276-016-5 , стр. 476.
↑ Роберт Коллинз, Move Special Registers, архивировано 5 июня 1997 г.
^ AMD, Am386 Microprocessors Data Book, 1992, страницы 21 и 151
^ Джон Х. Уортон, Полное издание X86, том 1, 1994. Ресурсы MicroDesign , ISBN 1-885330-02-2 , стр. 296.
^ Чипы и технологии, Справочное руководство программиста Super386 DX, изд. № UG85, ред. 1.0, 1992, стр. 201.
^ NexGen, Nx586™ Processor and Nx587™ Numerics Processor Databook, 8 июля 1993 г., стр. 116
^ ZFMicro, ZFx86 Data Book 1.0 Rev D, 5 июня 2006 г., стр. 101
^ Cyrix, Cx486DLC Microprocessor Data Sheet, заказ № 94706-01, май 1992 г., раздел 2.3.2.6, стр. 37
^ ab Sandpile, Регистры управления конфигурацией IA32, см. бит BTB_TR в регистрах 20h и 30h для включения недокументированных регистров TR1/TR2 на Cyrix 5x86, 6x86 и 6x86MX. Архивировано из оригинала 20 мая 2011 г.
↑ Cyrix, Руководство по написанию BIOS для 6x86, редакция 4.1, 29 июля 1996 г., стр. 43.
^ Cyrix, 6x86 Processor data book, заказ № 94175-01, март 1996 г., раздел 2.6.5, стр. 74
↑ Архив ядра Linux, Re: Cyrix 6x86 Patch.., 4 ноября 1996 г.
^ Cyrix, 6x86MX Processor Data Book, заказ № 94329-00, 15 июля 1997 г., раздел 2.13.1.1, стр. 87
^ VIA-Cyrix Corp., Cyrix III Processor Data Book, v1.0, 25 января 2000 г., раздел 2.9.1.1, стр. 86
↑ Cyrix, MediaGX Processor Data Book, версия 2.0, 29 октября 1998 г., раздел 3.3.2.4, стр. 59
^ AMD, Geode™ LX Processors Data Book, идентификатор публикации: 33234H, февраль 2009 г., раздел 8.3.4.3, стр. 648
^ IDT, Технические данные процессора WinChip C6, раздел A.2, стр.79
^ Intel, Quark SOC X1000 Core Developer's Manual, заказ № 329679-001, октябрь 2013 г., приложение B, стр. 296