Dirección desde la cual una CPU comienza a buscar instrucciones después de un reinicio
En informática , el vector de reinicio es la ubicación predeterminada a la que irá una unidad central de procesamiento para buscar la primera instrucción que ejecutará después de un reinicio . El vector de reinicio es un puntero o dirección , donde la CPU siempre debe comenzar tan pronto como pueda ejecutar instrucciones. La dirección está en una sección de memoria no volátil (como BIOS o ROM de arranque ) inicializada para contener instrucciones para iniciar el funcionamiento de la CPU, como el primer paso en el proceso de arranque del sistema que contiene la CPU. [ cita requerida ]
Ejemplos
A continuación se muestra una lista de direcciones utilizadas habitualmente por diferentes microprocesadores:
Familia x86 (Intel)
- El vector de reinicio del procesador Intel 8086 se encuentra en la dirección física FFFF0h (16 bytes por debajo de 1 MB). El valor del registro CS en el reinicio es FFFFh y el valor del registro IP en el reinicio es 0000h para formar la dirección segmentada FFFFh:0000h, que se asigna a la dirección física FFFF0h. [1]
- El vector de reinicio del procesador Intel 80286 se encuentra en la dirección física FFFFF0h (16 bytes por debajo de los 16 MB). El valor del registro CS en el reinicio es F000h con la base del descriptor establecida en FF0000h y el valor del registro IP en el reinicio es FFF0h para formar la dirección segmentada FF0000h:FFF0h, que se asigna a la dirección física FFFFF0h en modo real . [2] Esto se modificó para permitir suficiente espacio para cambiar al modo protegido sin modificar el registro CS. [3]
- El vector de reinicio para los procesadores Intel 80386 y posteriores x86 es la dirección física FFFFFFF0h (16 bytes por debajo de los 4 GB). El valor de la porción selectora del registro CS en el reinicio es F000h, el valor de la porción base del registro CS es FFFF0000h y el valor del registro IP en el reinicio es FFF0h [4] para formar la dirección segmentada FFFF0000h:FFF0h, que se asigna a la dirección física FFFFFFF0h en modo real. [5] [6]
Otros
- El vector de reinicio para los procesadores ARM es la dirección 0x0 [7] [8] o 0xFFFF0000. [9] Durante la ejecución normal, la RAM se vuelve a asignar a esta ubicación para mejorar el rendimiento, en comparación con la tabla de vectores basada en ROM original. [10]
- El vector de reinicio para los procesadores MIPS32 está en la dirección virtual 0xBFC00000, [11] que se encuentra en los últimos 4 Mbytes de la región de memoria no almacenable en caché KSEG1. [12] El núcleo ingresa al modo kernel tanto al reiniciarse como cuando se reconoce una excepción, por lo que puede asignar la dirección virtual a la dirección física. [13]
- El vector de reinicio para los procesadores PowerPC / Power ISA está en una dirección efectiva de 0x00000100 para procesadores de 32 bits y 0x0000000000000100 para procesadores de 64 bits.
- El vector de reinicio para los procesadores SPARC versión 8 está en una dirección de 0x00000000; [14] el vector de reinicio para los procesadores SPARC versión 9 está en una dirección de 0x20 para reinicio de encendido, 0x40 para reinicio de vigilancia, 0x60 para reinicio iniciado externamente y 0x80 para reinicio iniciado por software. [15]
- El vector de reinicio para la familia de procesadores 68000 es 0x00000000 para el Registro de pila de interrupción inicial (IISR; en realidad no es un vector de reinicio y se utiliza para inicializar el puntero de pila después del reinicio) y 0x00000004 para el contador de programa inicial (reinicio). [16]
Procesadores de 8 bits
- El vector de reinicio para la familia de procesadores 6502 es una dirección de 16 bits almacenada en 0xFFFC y 0xFFFD.
- El vector de reinicio para las familias de procesadores 6800 y 6809 es una dirección de 16 bits almacenada en 0xFFFE y 0xFFFF.
- Sin reinicio de vector
- Para 8051 / 8080 / 8085 / Z80 , el reinicio inicia la ejecución del código en la dirección 0x0000.
- Para AVR , el reinicio inicia la ejecución del código en la dirección 0x0000; a menudo, se coloca aquí una instrucción de salto relativo (RJMP) para saltar a la rutina de manejo de reinicio dentro de los 4K inferiores de memoria.
- Para PIC , el reinicio inicia la ejecución del código en la dirección 0x0000.
Véase también
Referencias
- ^ "iAPX 86,88 User's Manual" (PDF) . Intel . 1981. System Reset, p. 2-29, tabla 2-4 . Consultado el 15 de abril de 2018 .
- ^ "Hoja de datos del procesador AMD 80286" (PDF) . AMD . 1985. p. 13.
El 286 comienza la ejecución en modo real con la instrucción en la ubicación física FFFFF0H.
- ^ "iAPX 286 Programmer's Reference Manual" (PDF) . Intel. 1983. Apéndice D, Consideraciones de compatibilidad de software de iAPX 86/88, pág. D-2 . Consultado el 15 de abril de 2018 .
Después del reinicio, CS:IP = F000:FFF0 en el iAPX 286. Este cambio se realizó para permitir suficiente espacio de código para ingresar al modo protegido sin volver a cargar CS.
- ^ "80386 Programmer's Reference Manual" (PDF) . Intel. 1990. Sección 10.1 Estado del procesador después del reinicio, páginas 10-1 - 10.3.
- ^ "80386 Programmer's Reference Manual" (PDF) . Intel. 1990. Sección 10.2.3 Primera instrucción, pág. 10-4 . Consultado el 3 de noviembre de 2013 .
La ejecución comienza con la instrucción a la que se dirige el contenido inicial de los registros CS e IP. Para permitir que el software de inicialización se coloque en una ROM en la parte superior del espacio de direcciones, se establecen los 12 bits superiores de las direcciones emitidas para el segmento de código, hasta la primera instrucción que carga el registro CS, como un salto lejano o una llamada. Como resultado, la obtención de instrucciones comienza desde la dirección 0FFFFFFF0H.
- ^ "Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32" (PDF) . Intel. Mayo de 2012. Sección 9.1.4 Primera instrucción ejecutada, pág. 2611. Archivado desde el original (PDF) el 8 de agosto de 2012 . Consultado el 23 de agosto de 2012 .
La primera instrucción que se obtiene y ejecuta después de un reinicio de hardware se encuentra en la dirección física FFFFFFF0h. Esta dirección está 16 bytes por debajo de la dirección física superior del procesador. La EPROM que contiene el código de inicialización del software debe estar ubicada en esta dirección.
- ^ "5.9.1. Tabla de vectores y reinicio". Manual de referencia técnica de Cortex-M3 . Consultado el 10 de noviembre de 2017 .
- ^ "Tabla 4-11 Registros de restablecimiento de AArch64". Manual de referencia técnica del procesador CortexARM Cortex-A72 MPCore r0p3 . Consultado el 30 de enero de 2024 .
- ^ "Documentación – Arm Developer". developer.arm.com . Consultado el 21 de junio de 2024 .
- ^ "Secuencia de arranque para un sistema integrado basado en ARM -2 - DM". www.embeddedrelated.com . Consultado el 10 de noviembre de 2017 .
- ^ "Arquitectura MIPS32 para programadores; Vol III: La arquitectura de recursos privilegiados MIPS32" (PDF) . MIPS Technologies.
- ^ Noergaard, Tammy (28 de febrero de 2005). Arquitectura de sistemas integrados: una guía completa para ingenieros y programadores. Elsevier. ISBN 9780080491240.
- ^ "Manual del usuario del software del núcleo del procesador MIPS32 M4K" (PDF) . cdn2.imgtec.com . 29 de agosto de 2008. Archivado desde el original (PDF) el 2017-08-26.
- ^ Manual de arquitectura SPARC, versión 8. SPARC International . pág. 75.
- ^ Manual de arquitectura SPARC, versión 9. SPARC International. págs. 109–112.
- ^ Labrosse, Jean J. (2008). Software integrado. Newnes. ISBN 9780750685832.