Un registro de prueba , en los procesadores Intel 80386 e Intel 80486 , era un registro que utilizaba el procesador, generalmente para realizar una prueba automática. La mayoría de estos registros no estaban documentados y los utilizaba un software especializado. Los registros de prueba se denominaban TR3 a TR7 . Los programas normales no suelen requerir estos registros para funcionar. Con el Pentium , los registros de prueba se reemplazaron por una variedad de registros específicos del modelo (MSR). [1]
En el 80386, se proporcionaron dos registros de prueba, TR6 y TR7 , para el propósito de la prueba TLB . TR6 era el registro de comando de prueba y TR7 era el registro de datos de prueba. El 80486 proporcionó tres registros adicionales, TR3 , TR4 y TR5 , para probar la caché L1. TR3 era un registro de datos, TR4 era un registro de dirección y TR5 era un registro de comando. A estos registros se accedía mediante variantes de la instrucción MOV . Un registro de prueba puede ser el operando de origen o el operando de destino. Las instrucciones MOV se definen tanto en modo de dirección real como en modo protegido . Los registros de prueba son recursos privilegiados. En modo protegido, las instrucciones MOV que acceden a ellos solo se pueden ejecutar en el nivel de privilegio 0. Un intento de leer o escribir los registros de prueba cuando se ejecuta en cualquier otro nivel de privilegio provoca una excepción de protección general. Además, esas instrucciones generan una excepción de código de operación no válido en la mayoría de las CPU más nuevas que 80486.
La instrucción se codifica de dos maneras, dependiendo del flujo de datos. El movimiento de datos desde un registro de propósito general a un registro de prueba se codifica como 0F 26 /r( r/msiendo GPR y regsiendo el registro de prueba). El movimiento de datos en la otra dirección (es decir, desde el registro de prueba a un registro de propósito general) se codifica como 0F 24 /r( r/msiendo GPR y regsiendo el registro de prueba). [2] Solo se admiten movimientos de registro a registro; por lo tanto, el campo "mod" (los 2 bits superiores) del byte ModR/M de la instrucción debe establecerse en 11b. (Establecer el campo "mod" del byte ModR/M en cualquier otro valor que no sea 11bda como resultado un comportamiento indefinido, con un comportamiento diferente observado en diferentes procesadores. [3] )
Los registros de prueba y/o códigos de operación asociados fueron compatibles con los siguientes procesadores x86 :
- ^ Se ha informado que en el Intel 386, los registros TR4 y TR5 actúan como registros de solo lectura no documentados que devuelven un elemento de datos relacionado con la precarga de instrucciones. [4]
- ^ Los modelos de CPU de los socios de fabricación Cyrix, IBM , TI y ST, también admitieron los mismos registros de prueba que sus modelos de CPU de marca Cyrix correspondientes.
- ^ Los SoC basados en el núcleo de CPU ST486 derivado de Cyrix también admitían el mismo conjunto de registros de prueba que el Cyrix 486; estos SoC incluyen, por ejemplo, STPC Atlas y ZFMicro ZFx86. [10]
- ^ En el Cyrix 6x86, los registros TR1 y TR2 se pueden habilitar configurando el bit 6 del registro de configuración 30h de Cyrix. Estos registros no están documentados, pero Cyrix ha publicado un código de ejemplo que los utiliza. [12]
- ^ En el Cyrix 6x86, los registros TR6 y TR7 podían usarse no solo para probar la TLB, sino también para configurar el VSPM (mecanismo de paginación de tamaño variable) del procesador. [13] El VSPM era una TLB de software de 4 entradas [14] con una máscara por entrada para admitir todos los tamaños de página de potencia de 2 de hasta bytes. Estaba presente solo en el Cyrix 6x86; se eliminó en los procesadores 6x86MX y posteriores.
- ^ Solo el núcleo "Joshua". Las variantes del núcleo "Samuel" de Cyrix III no admitían los registros de prueba TRx.
- ^ En los procesadores Cyrix III 6x86MX, MII y "Joshua", los registros TR3-TR5 se pueden usar no solo para probar la caché L1 sino también para bloquear líneas de caché L1 individuales en direcciones específicas para el uso de memoria de borrador . [15] [16]
Véase también
Referencias
- ^ Intel, Pentium® Processor Family Developer's Manual, número de pedido 241428-005, 1997, sección 16.1.2, página 442: proporciona una lista de MSR Pentium que proporcionan la misma funcionalidad que los registros TRx 386/486.
- ^ Introducción al 80386, incluida la hoja de datos del 80386. Intel . Abril de 1986. pág. 122.
- ^ Robert L. Hummel, Referencia técnica del programador de PC Magazine, 1992, ISBN 1-56276-016-5 , página 476.
- ^ Robert Collins, Move Special Registers, archivado el 5 de junio de 1997.
- ^ AMD, Libro de datos de microprocesadores Am386, 1992, páginas 21 y 151
- ^ AMD, Manual del usuario del software del microprocesador Am486®, rev. 1, 1994, sección 1.59, pág. 82
- ^ John H. Wharton, The Complete X86, Volumen 1, 1994. MicroDesign Resources , ISBN 1-885330-02-2 , página 296.
- ^ Chips and Technologies, Manual de referencia del programador Super386 DX, pub.no. UG85, rev 1.0, 1992, página 201.
- ^ NexGen, Libro de datos del procesador numérico Nx586™ y Nx587™, 8 de julio de 1993, página 116
- ^ ZFMicro, ZFx86 Data Book 1.0 Rev D, 5 de junio de 2006, página 101
- ^ Cyrix, Hoja de datos del microprocesador Cx486DLC, número de pedido 94706-01, mayo de 1992, sección 2.3.2.6, pág. 37
- ^ Cyrix, 6x86 BIOS Writer's Guide, revisión 4.1, 29 de julio de 1996, página 43.
- ^ Cyrix, libro de datos del procesador 6x86, número de pedido 94175-01, marzo de 1996, sección 2.6.5, pág. 74
- ^ Archivo del kernel de Linux, Re: Parche Cyrix 6x86, 4 de noviembre de 1996
- ^ Cyrix, 6x86MX Processor Data Book, número de pedido 94329-00, 15 de julio de 1997, sección 2.13.1.1, página 87
- ^ VIA-Cyrix Corp., Cyrix III Processor Data Book, v1.0, 25 de enero de 2000, sección 2.9.1.1, página 86
- ^ Cyrix, MediaGX Processor Data Book, rev 2.0, 29 de octubre de 1998, sección 3.3.2.4, pág. 59
- ^ AMD, Geode™ LX Processors Data Book, ID de publicación: 33234H, febrero de 2009, sección 8.3.4.3, pág. 648
- ^ IDT, Hoja de datos del procesador WinChip C6, sección A.2, pág. 79
- ^ Intel, Manual del desarrollador del núcleo Quark SOC X1000, número de pedido 329679-001, octubre de 2013, apéndice B, página 296