1 ARQUITECTURA DEL ALPHA Para comprender con posterioridad el porqué del funcionamiento del simulador es necesario conocer la arquitectura del microprocesador en la que nos hemos basado. Ese es el objetivo de este segundo apartado en el que se explicarán las principales características de la arquitectura del Alpha 21164PC. En los sucesivos subapartados se explicaran los tipos de datos que soporta el Alpha, el conjunto de registros que maneja, los formatos de instrucciones, como accede a memoria, su microarquitectura(lanzamiento de múltiples instrucciones) y PALcode(tratamiento de las excepciones). A continuación se detallan una serie de puntos que diferencian al Alpha de cualquier otro microprocesador y que nos servirán a modo de introducción: Arquitectura real de 64 bits. Todos los registros son de 64 bits y todas las operaciones se realizan entre registros de 64 bits. No es una arquitectura de 32 bits que más tarde fue ampliada a una de 64 bits. Manipulación de bytes y words. La arquitectura del Alpha lee y escribe bytes y words entre registros y memoria mediante las instrucciones LDBU y STB(bytes) y LDWU y STW(words). Memoria compartida multiprocesador. La secuencia de interbloqueo básica que se emplea en un sistema multiprocesador en el que se quiere acceder a la memoria compartida consiste en: cargabloqueo, modificación y almacenamiento-condicional. Si la secuencia se ejecuta sin interrupciones, excepciones o una escritura por parte de otro procesador, entonces el almacenamiento condicionado tiene éxito. En otro caso el almacenamiento fracasa y el programa debe retroceder de forma eventual y reintentar la secuencia. PALcode. Es una librería de arquitectura privilegiada, que consiste en un juego de subrutinas que son específicas de una implementación de sistema operativo Alpha particular. Estas subrutinas proporcionan al sistema operativo primitivas para facilitar el cambio de contexto, interrupciones, excepciones y manejo de memoria. PALcode es similar a las librerías de la BIOS que son proporcionadas en los ordenadores personales. Las subrutinas se pueden invocar por hardware o por software(mediante las instrucciones CALL_PAL). Direccionamiento. La unidad básica direccionable es el byte. Las direcciones virtuales son de 64 bits. Una implementación puede soportar un espacio de direcciones virtuales más pequeño. Las direcciones virtuales vistas por el programa son traducidas a direcciones de memoria física por un mecanismo de manejo de memoria. Una implementación debe incluir soporte tanto para el direccionamiento little–endian como para el big-endian. 2. MODELO DE PROGRAMACIÓN 2.1 TIPOS DE DATOS 2.1.1 BYTE Un byte son 8 bits contiguos de memoria que comienzan en el límite de un byte direccionable. Los bits son numerados de derecha a izquierda, de 0 a 7, como se muestra en la figura: Un byte se especifica por su dirección A. Un byte es un valor de 8 bits. El byte esta soportado en el Alpha sólo por las instrucciones de carga, almacenamiento, extensión de signo, extracción, enmascaramiento, inserción y zap. 2.1.2 WORD Una palabra(word) son dos bytes contiguos que empiezan en el límite de un byte arbitrario. Los bits son numerados de derecha a izquierda, de 0 a 15, como se muestra en la figura: Una palabra se especifica por su dirección, la dirección del byte que contiene el bit 0. Una palabra es un valor de 16 bits. La palabra se soporta en la arquitectura Alpha sólo por las instrucciones de carga, almacenamiento, extensión de signo, extracción, enmascaramiento e inserción. 2.1.3 LONGWORD Una palabra larga(longword) son cuatro bytes contiguos que comienzan en el límite de un byte arbitrario. Los bits se numeran de derecha a izquierda, de 0 a 31, como se muestra en la figura: Una longword se especifica por su dirección A, la dirección del byte que contiene el bit 0. Una longword es un valor de 32 bits. Cuando se interpreta de forma aritmética, una longword es un entero en complemento a dos en el cual el bit más significativo es el 0 y el 31 es el de signo. La palabra larga sólo es soportada en el Alpha por las instrucciones de carga y almacenamiento con extensión de signo y por las aritméticas que operan sobre longwords. 2.1.4 QUADWORD Una cuádruple palabra(quadword) son ocho bytes contiguos que comienzan en el límite de un byte arbitrario. Los bits son numerados de derecha a izquierda, de 0 a 63, como se muestra en la figura: Una quadword se especifica por su dirección A, la dirección del byte que contiene el bit 0. Es un valor de 64 bits. Cuando se interpreta aritméticamente, una quadword puede ser un entero en complemento a dos, siendo el bit 0 el menos significativo y el 63 el de signo, o como un entero sin signo, en cuyo caso el bit más significativo sería el 63. 2.1.5 FORMATOS VAX EN COMA FLOTANTE Los números VAX en coma flotante se almacenan en memoria según un juego de formatos y en los registros de coma flotante según un segundo juego de formatos. Las instrucciones de carga y almacenamiento en coma flotante pasan de un formato a otro realojando los bits, no se realiza ningún tipo de redondeo ni de chequeo de rango por dichas instrucciones. F_floating. Son cuatro bytes contiguos en memoria. Los bits se etiquetan del 0 al 31 como se ve en la figura: En un registro flotante de 64 bits se justifica a la izquierda como se aprecia en la figura: G_floating. Ocupa ocho bytes contiguos de memoria que comienzan en el límite de un byte arbitrario. Los bits se etiquetan de 0 a 63 como se ve en la figura: En un registro de coma flotante se almacena según el siguiente formato: D_floating. Ocupa ocho bytes contiguos de memoria, ver figura: En un registro de coma flotante se almacena según muestra la figura: 2.1.6 FORMATOS IEEE EN COMA FLOTANTE El estándar IEEE para aritmética binaria en coma flotante, ANSI/IEEE 754-1985, define cuatro formatos en coma flotante en dos grupos, básico y extendido, cada uno tiene dos anchos, simple y doble. La arquitectura del Alpha soporta los formatos simple y doble básicos, con el formato básico doble como si fuera el formato extendido simple. S_Floating. Un dato IEEE en simple precisión, o S_Floating, ocupa cuatro bytes contiguos de memoria empezando en el límite de un byte arbitrario. Los bits se etiquetan del 0 al 31 como muestra la figura: Cuando esta almacenado en un registro de coma flotante, se justifica a la izquierda como indica la figura: T_Floating. Un dato IEEE en doble precisión, o T_Floating, ocupa ocho bytes contiguos de memoria, los bits se etiquetan del 0 al 63 como muestra la figura: Cuando el dato esta almacenado en un registro de coma flotante adquiere el formato siguiente: X_Floating. El soporte para el tipo de dato IEEE de precisión extendida en coma flotante(128 bits) es inicialmente proporcionado a través de software. Ocupa 16 bytes contiguos en memoria, los bits se etiquetan del 0 al 127 como se muestra en la figura: Un dato X_Floating ocupa dos registro de coma flotante consecutivos(como F4/F5) como se muestra a continuación: 2.1.7 FORMATO DE UNA LONGWORD EN UNIDADES DE COMA FLOTANTE Un operando entero de tipo longword ocupa 64 bits en un registro de coma flotante adquiriendo el siguiente formato: 2.1.8 FORMATO DE UNA QUADWORD EN UNIDADES DE COMA FLOTANTE Un operando entero de tipo quadword ocupa 64 bits en un registro de coma flotante con el formato que indica la figura: 2.2 SOPORTE PARA DIRECCIONAMIENTO BIG-ENDIAN Las implementaciones que incluyan soporte para direccionamiento big-endian deben proporcionar los siguientes aspectos: La convención numérica elegida durante la secuencia de arranque no podrá cambiarse durante el tiempo de ejecución y afectará a todo el código ejecutado tanto por el sistema operativo como por el usuario. Si se elige el convenio big-endian las instrucciones de carga/almacenamiento de longwords invertirán el bit 2 de la dirección virtual, de esta manera se accederá a la mitad de una quadword en lugar de a lo que se accedería bajo la convención little-endian. Si se elige la convención big-endian las instrucciones de manipulación de bytes(extracción, inserción y enmascaramiento) invertirán los bits del 2 al 0 de la dirección virtual. Las instrucciones se consideran siempre bajo la convención little-endian, y son independientes de la convención numérica elegida, de esta manera la instrucción más a la derecha de una quadword se ejecutará siempre la primera. En una máquina little-endian los bytes se numeran de derecha a izquierda, como se muestra en la figura: En una big-endian se numeran de izquierda a derecha como se puede ver: 2.3 REGISTROS DEL ALPHA El hardware del estado del procesador incluye: 2.3.1 CONTADOR DE PROGRAMA Es un registro especial que direcciona el flujo de instrucciones. Según cada instrucción es decodificada, el PC avanza a la siguiente instrucción secuencial, desde ese momento el PC recibe el nombre de PC actual. Cualquier instrucción que utilice el valor del PC, utilizará el PC actualizado. El PC sólo incluye los bits del 63 al 2, puesto que los bits 1 y 0 se leen como cero y se ignora cualquier escritura sobre ellos. Esta cantidad es una dirección longword alineada. El PC es un operando implícito en las instrucciones de salto condicional y de salto a subrutina. El PC no es accesible como un registro de entero. 2.3.2 REGISTROS DE ENTEROS Hay 32 registros de enteros(R0 al R31), cada uno de 64 bits. El registro R31 tiene un significado especial para la arquitectura del Alpha. Cuando R31 se especifica como operando fuente, se devuelve un operando cero. Para todos los casos excepto para las instrucciones de salto incondicional(Uncondicional Branch) y saltos(Jump), los resultados de las instrucciones que especifiquen el registro R31 como destino son descartados. En el caso de las anteriormente mencionadas instrucciones de salto, el PC no es salvado en el registro R31. 2.3.3 REGISTROS DE COMA FLOTANTE Hay 32 registros de coma flotante(F0 al F31), cada uno de 64 bits. Cuando el registro F31 se especifica como operando fuente, un cero verdadero es devuelto. Los resultados de las instrucciones que especifiquen el registro F31 como operando destino son descartados. 2.3.4 REGISTROS DE BLOQUEO Hay dos registros por procesador asociados a las instrucciones de carga/almacenamiento en memoria compartida, LDx_L y STx_C, que son la bandera de bloqueo(lock_flag) y el registro bloqueado de dirección física(locked_physical_address). 2.3.5 REGISTROS OPCIONALES Registros de prebúsqueda de memoria. Si las instrucciones de prebúsqueda, FETCH y FETCH_M, están implementadas, dicha implementación deberá incluir dos juegos de registros de estado de prebúsqueda que serán utilizados por las instrucciones en cuestión, y no serán directamente accesibles por software. Registros de compatibilidad VAX. Las instrucciones de compatibilidad VAX RC y RS incluyen el registro intr_flag. 2.3.6 REGISTROS INTERNOS DEL PROCESADOR Los registros internos del procesador(IPRs) se organizan de la siguiente manera: IPRs de la unidad de búsqueda/decodificación y salto(IDU). En este grupo de registros se encuentran aquellos que se utilizan para el tratamiento de las excepciones. IPRs de la unidad de traducción de direcciones de memoria(MTU). IPRs de la unidad de control de cache y de la interface de bus(CBU). Registros de almacenaje PAL. La IDU mantiene un banco de 24 registros temporales PAL. 2.4 FORMATOS DE INSTRUCCIÓN Todos los formatos de instrucción son de 32 bits, con los 6 bits de mayor peso como el campo código de operación. Cualquier campo de registro(Ra, Rb, Fa o Fb) no utilizado debe valer 31. 2.4.1 FORMATO DE INSTRUCCIÓN DE MEMORIA Se utiliza para transferir datos entre registros y memoria, para cargar una dirección efectiva y para saltos a subrutina. Tiene el formato que se muestra a continuación: Tiene un campo de 6 bits para el código de operación, dos campos de registros de dirección de 5 bits, Ra y Rb, y un campo desplazamiento con signo de 16 bits. El campo desplazamiento se trata como un offset de tipo byte. Se extiende de signo y se suma con el contenido del registro Rb para formar una dirección virtual. El desbordamiento se ignora al realizar este cálculo. La dirección virtual se utiliza como una dirección de memoria de carga/almacenamiento o como un resultado, dependiendo de la instrucción. Formato de instrucción de memoria con un código de función. Reemplazan el campo desplazamiento en el formato de instrucción de memoria por un código de función que designa un juego de instrucciones misceláneas. El formato es el que muestra la figura: Los códigos de función desconocidos producen resultados impredecibles; además del campo código de operación y del de función hay otros dos campos, Ra y Rb, cuyo uso dependerá de la instrucción. Formato de memoria de las instrucciones de salto(Jump). Para instrucciones de salto computado el campo desplazamiento se usa para proporcionar la posible dirección de salto. Los cuatro códigos de operación de las distintas instrucciones de salto se pasan en los bits 15 y 14 del campo desplazamiento. 2.4.2 FORMATO DE INSTRUCCIÓN DE SALTO(BRANCH) Se utiliza para instrucciones de salto condicional y para las de salto a subrutina relativo al PC. Formato: Tiene 6 bits para el código de operación, un campo para el registro de dirección de 5 bits(Ra), y un campo de desplazamiento con signo de 21 bits. El desplazamiento es tratado como un offset de tipo longword, es decir, es desplazado a la izquierda 2 bits, extendido de signo y sumado al PC actualizado para formar una dirección virtual. El desbordamiento se ignora al realizar dicho cálculo. 2.4.3 FORMATO DE INSTRUCCIÓN DE OPERACIÓN Se utiliza por las instrucciones que realizan operaciones registro entero-registro entro. Permite especificar un registro destino(Rc) y dos registros fuente(Ra y Rb), uno de los cuales puede ser un dato inmediato. Las siguientes figuras muestran los dos posibles casos cuando el bit 12 de la instrucción es 0 o 1: El formato contiene un campo de código de operación de 6 bits y un campo función de 7 bits. 2.4.4 FORMATO DE INSTRUCCIÓN DE OPERACIÓN EN COMA FLOTANTE Se utiliza en instrucciones que realizan operaciones registro flotante-registro flotante. El formato especifica un registro destino(Fc), y dos registros fuente(Fa y Fb) y es como sigue: Contiene un campo de código de operación de 6 bits y un campo función de 11 bits. Las instrucciones de conversión en coma flotante utilizan un subjuego de las instrucciones de operación en coma flotante y realizan operaciones de conversión registro-registro. Fb es el operando fuente y Fa debe ser F31. Las instrucciones que mueven datos entre registros de coma flotante y registros de enteros son un subjuego del formato de instrucción de operación en coma flotante. Los campos fuente no utilizados deben ser 31. 2.4.5 FORMATO DE INSTRUCCIÓN PALcode El formato de la librería de arquitectura privilegiada(PALcode) se utiliza para especificar funciones extendidas del procesador. Tiene el formato que muestra la figura: El campo función de 26 bits especifica la operación. Los operandos fuente y destino se especifican en la descripción de la instrucción individual. 2.5 ACCESO A MEMORIA Sólo se puede acceder a longwords o quadwords alineadas, una longword alineada es un dato cuya dirección es múltipla de cuatro y una quadword es un dato cuya dirección es múltipla de ocho. Se permite acceder a los datos tanto bajo la vista little-endian como bajo la vista big-endian. Las direcciones virtuales son de 64 bits y son mapeadas a direcciones físicas utilizando tamaños de página completos. La protección de memoria se realiza por página base. En una implementación multiprocesador, la memoria principal compartida tiene las mismas direcciones físicas en todos los procesadores. La memoria tiene granularidad longword, es decir, dos procesadores pueden acceder simultáneamente a longwords adyacentes sin interferirse entre ellos. El microprocesador Alpha 21164PC presenta una memoria cache de instrucciones de mapeo directo de 16KB y una cache de datos(write-through) de puerto dual de mapeo directo 8KB. 2.6 MICROARQUITECTURA A continuación se describe la arquitectura del chip y de las principales unidades funcionales. La figura de la página 2-13 muestra un diagrama de bloques del 21164PC, que consiste en lo siguiente: Unidad de búsqueda/decodificación y salto(IDU). Unidad de ejecución de enteros(IEU). Unidad de ejecución de coma flotante(FPU). Unidad de traducción de dirección de memoria(MTU). Unidad de control de cache e interface de bus(CBU). Cache de datos(Dcache). Cache de instrucciones(Icache). Interface de memoria serie de sólo-lectura(SROM). 2.6.1 UNIDAD DE BÚSQUEDA/DECODIFICACIÓN Y SALTO(IDU) La función principal de la IDU es la de manejar y lanzar instrucciones a la IEU, MTU y FPU. También maneja la cache de instrucciones. Prebúsqueda y decodificación de instrucciones. La IDU maneja grupos naturalmente alineados de cuatro instrucciones(INT16), no avanza a un nuevo grupo de instrucciones hasta que todas las instrucciones de un grupo han sido lanzadas. Predicción de salto. Es necesaria para predecir y comenzar a buscar el flujo de instrucciones destino antes de que la instrucción de salto sea lanzada. Cada instrucción en la cache de instrucciones contiene dos bits de estado de historia para grabar el resultado de una instrucción de salto. Buffer de traducción de instrucciones. La IDU incluye un buffer de traducción de instrucciones(ITB) de 48 entradas completamente asociativo. El buffer almacena la traducción de las direcciones del flujo de instrucciones(Istream) más recientemente utilizado. Interrupciones. La IDU soporta tres fuentes de interrupción: • • • Interrupciones hardware. Interrupciones software. Interrupciones asíncronas del sistema. 2.6.2 UNIDAD DE EJECUCIÓN DE ENTEROS(IEU) Contiene dos cauces de ejecución de enteros de 64 bits(E0 y E1), la unidad incluye: Dos sumadores. Dos cajas lógicas. Un desplazador. Manipulación lógica a nivel de byte. Un multiplicador de enteros. 2.6.3 UNIDAD DE EJECUCIÓN EN COMA FLOTANTE(FPU) Puede ejecutar instrucciones en punto flotante en los formatos IEEE y VAX. La FPU contiene: Un banco de registros en coma flotante de 64 bits de 40 entradas. Un registro de control accesible por el usuario. Un cauce de multiplicación en coma flotante. Un cauce de suma en coma flotante. 2.6.4 UNIDAD DE TRADUCCIÓN DE DIRECCIONES DE MEMORIA(MTU) Contiene tres secciones principales: Un buffer de traducción de datos(DTB). Traduce a direcciones físicas las direcciones virtuales que se reciben de la IEU. Tiene 64 entradas, es completamente asociativo y almacena las entradas de tabla de página(PTEs) del flujo de datos más recientemente utilizado. Un banco de direcciones fallidas(MAF). Si un dato no se encuentra en la cache de datos(se produce un fallo de cache), entonces la dirección, el número de registro destino, y el resto de información se pasa al banco de direcciones fallidas. Un buffer de escritura de direcciones. Tiene seis entradas de 32 bytes. Proporciona un recurso finito que recibe datos que deben ser almacenados para así minimizar el número de ciclos que la CPU permanece parada. 2.6.5 UNIDAD DE CONTROL DE CACHE E INTERFACE DE BUS(CBU) Procesa todos los accesos enviados por la MTU e implementa todas las funciones de interface externas relacionadas con la memoria, particularmente las funciones del protocolo de coherencia para el cacheo “write back”. 2.6.6 ORGANIZACIÓN DE LA CACHE El 21164PC tiene dos caches de primer nivel, una de datos y otra de instrucciones, también proporciona control para una cache externa de segundo nivel. 2.6.7 ENCAUZAMIENTO El 21164PC tiene un cauce de 7 estados(o 7 ciclos) para las instrucciones de operación de enteros y para las de referencia de memoria y un cauce de 9 estados para las de operación en coma flotante. Estados del cauce y lanzamiento de instrucciones. El cauce del 21164PC divide el procesado de las instrucciones en cuatro estados estáticos y en un número de estados dinámicos de ejecución. Los cuatro primeros estados consisten en la búsqueda de la instrucción, buffer y decodificación, lógica slotting y lógica issue-check; estos estados son estáticos y en ellos las instrucciones pueden permanecer durante múltiples ciclos mientras esperan por un recurso o están paradas por otras razones. Los estados dinámicos(IEU y FEU) siempre avanzan estados y no se ven afectados por parones en el cauce. Después de ser lanzada, una instrucción no puede pararse en posteriores estados del cauce, el estado issue es responsable de asegurarse de que todos los conflictos de recursos se han resuelto antes de permitir a la instrucción continuar Abortos y excepciones. En ambos casos el cauce debe ser vaciado de todas las instrucciones subsiguientes a la que causó la condición de aborto. 2.6.8 REGLAS PARA EL LANZAMIENTO DE INSTRUCCIONES La función lógica slotting de la IDU determinará que instrucciones serán lanzadas. Detecta y resuelve todos los conflictos de recursos estáticos(cauces). El conjunto de instrucciones seleccionadas por la función slotting, será lanzado si no se detectan conflictos por registros o recursos dinámicos en el estado 3(issue) del cauce. El 21164PC siempre lanza las instrucciones en orden. La función slotting detiene su proceso cuando alguna de las siguientes reglas no se cumple: Una instrucción de carga no se puede lanzar simultáneamente con una de almacenamiento. Todas las instrucciones son descartadas en el estado slotting después de que una instrucción de salto condicional o de salto a subrutina se predice como tomado. Después de una instrucción de salto condicional que se predice como no tomado, no se pueden lanzar juntas instrucciones de salto condicional o de salto a subrutina. No todas las instrucciones que pasan del estado slotting al estado issue son lanzadas. Después del estado slotting el lanzamiento de las instrucciones dependerá de la disponibilidad de los registros para las operaciones de lectura y escritura y también de la disponibilidad de la unidad de división en punto flotante y de la de multiplicación de enteros. Hay dependencias de tipo productor-consumidor, productor-productor(también conocidas como conflictos de escritura después de escritura), y dependencias de disponibilidad de las unidades funcionales dinámicas. La lógica de la IDU en el estado 3 del cauce(issue-check) detecta todos estos conflictos. Dependencia productor-productor. Causa parones en el lanzamiento para preservar el orden de escritura. Si dos instrucciones escriben el mismo registro, son forzadas por la IDU a hacerlo en diferentes ciclos. Esto es necesario para asegurarse de que el resultado correcto se deja en el banco de registros después de que ambas instrucciones han sido ejecutadas. Dependencia productor-consumidor. Este tipo de dependencia puede ocurrir en situaciones de lanzamiento múltiple cuando un registro es rehusado. En estos casos la latencia es igual o mayor que la de productor-productor. Resumiendo, ninguna instrucción puede ser lanzada mientras no se garantice que todas las operaciones de escritura sobre los registros destino se completarán en orden de lanzamiento y que no hay operaciones de escritura sobre los registros fuente, o que esas operaciones se pueden resolver mediante bypass. 2.7 PALcode PALcode está escrita en código máquina estándar con algunas implementaciones específicas que proporcionan acceso al hardware de más bajo nivel. PALcode tiene características que lo hacen aparecer como una combinación de microcódigo, ROM BIOS, y rutinas de servicio del sistema. PALcode existe por otras razones más importantes: Hay algunas funciones demasiado complicadas para ser implementadas por hardware, pero que no pueden ser manejadas por las rutinas de un sistema operativo normal. Hay funciones que deben ejecutarse automáticamente, que involucran largas secuencias de código que pueden necesitar un acceso total al hardware de más bajo nivel. Hay algunas instrucciones necesarias para mantener la compatibilidad con arquitecturas más antiguas. En todos estos casos, las rutinas PALcode se utilizan para proporcionar la función deseada. PALcode se puede invocar mediante los siguientes eventos: Reset. Excepciones del hardware del sistema. Excepciones del manejo de memoria. Interrupciones. Instrucciones CALL_PAL. PALcode se ejecuta en un ambiente especial denominado PALmode, mientras que la máquina permanece en este estado, el programa tiene acceso privilegiado a todo el hardware del sistema y las interrupciones no están habilitadas. 2.7.1 INVOCANDO PALcode Cada uno de los eventos que dan paso al modo PAL, proporcionan acceso a una serie de rutinas, cada una de las cuales está indexada como un offset a partir de una dirección base. La dirección base del PALcode se puede programar(se almacena en el IPR PAL_BASE), normalmente es el código de reset del sistema el que inicializa dicho registro. Cuando ocurre un evento que necesita invocar al PALcode, el 21164PC lo primero que hace es vaciar el cauce, el valor actual del PC se guarda en el IPR EXC_ADDR, y la rutina PALcode apropiada se ejecuta. La máquina ha pasado al modo PAL. Cuando la instrucción HW_REI se ejecuta al final de la rutina PALcode, el hardware ejecuta un salto a la dirección contenida en el IPR EXC_ADDR. El LSB se utiliza para indicarle al hardware que se está en modo PAL, generalmente cuando se vuelve de una rutina PAL, el LSB se pone a cero, en cuyo caso, el hardware carga el nuevo PC, habilita las interrupciones y el mapeo de memoria, y devuelve el control al usuario. 2.7.2 PUNTOS DE ENTRADA AL PALcode El 21164PC tiene dos tipos de puntos de entrada al PALcode, que son las CALL_PAL y las traps: Entrada CALL_PAL. Se utilizan cuando la IDU encuentra una instrucción CALL_PAL en el flujo de instrucciones(Istream). Las instrucciones CALL_PAL comienzan en los siguientes offsets: • • Las instrucciones CALL_PAL privilegiadas comienzan en el offset 2000H. Las no privilegiadas en el 3000H. Puntos de entrada al PALcode mediante traps. En la siguiente tabla se muestran los offsets a partir del IPR EXC_ADDR para cada una de las traps. El listado de los puntos de entrada se realiza de mayor a menor prioridad: 2.8 JUEGO DE INSTRUCCIONES DEL ALPHA 21164PC A continuación(página 2-20) se muestra un listado del juego de instrucciones comunes; existen otros tres juegos de instrucciones. PALcode, uno por cada sistema operativo, Open VMS, Digital UNIX y Windows NT. El juego de instrucciones está ordenado alfabéticamente, el contenido de las columnas es: Mnemonic: Nemónico de la instrucción. Format. Formato de la instrucción, el significado de las distintas siglas es el siguiente: • • • • • • • Bra:: formato instrucción de salto(Branch). F_P: formato instrucción operación en coma flotante. Mem: formato instrucción de memoria(carga/almacenamiento). Mfc: formato memoria con campo función. Mbr: instrucciones de salto con formato memoria(jump). Opr: formato instrucción de operación sobre enteros. Pcd: formato instrucción PALcode. Opcode: la notación para el código de operación depende del tipo de instrucción: • • • • • • • Branch: oo, código de operación. Coma flotante: oo.fff, código de operación y función respectivamente. Memoria: oo, código de operación. Memoria con campo función: oo.ffff, código de operación y función. Jump: oo.h, código de operación, la h especifica la instrucción jump de la que se trata. Operación: oo.ff, código de operación y función. PALcode: oo, código de operación.