Ensamblador Ensamblador Por qué SP se puede configurar directamente, pero IP no...
2 registros de cambio de dirección y puntero (ESI y EDI) 2 registros de puntero (ESP y EBP)
6 registros de segmento (ES , CS, SS, DS,
1 registro de puntero de instrucción (EIP) 1 registro de bandera (EFlags)
El registro de datos se utiliza para almacenar operandos y resultados de operaciones y otra información, ahorrando así el tiempo necesario para leer operandos y acceder al bus y la memoria. La CPU de 32 bits tiene cuatro registros de propósito general de 32 bits: EAX, EBX, ECX y EDX. Estos cuatro registros de 16 bits se pueden dividir en ocho. El registro tiene su propio nombre y el programador puede acceder a él de forma independiente. Esta característica "desmontable" del registro de datos permite el procesamiento flexible de información de palabras/bytes.
Los registros AX y AL a menudo se denominan acumuladores y. las operaciones que utilizan acumuladores pueden requerir menos tiempo. El acumulador se puede utilizar para multiplicación, división, entrada/salida y otras operaciones, y se utiliza con frecuencia. El registro BX se denomina registro de dirección base (el registro BX se denomina registro base). registro de dirección base y se puede utilizar como puntero de memoria; el registro CX se denomina registro en operaciones de bucle y cadena, se utiliza para controlar el número de bucles en operaciones de bits, cuando se desplazan varios bits. para especificar el número de bits que se desplazarán;
Registro DX Llamado registro de datos. Puede usarse como operando predeterminado para operaciones de multiplicación y división, y también puede usarse para almacenar direcciones de puertos de E/S. En las CPU de 16 bits, AX, BX, CX y DX no se pueden utilizar como direcciones base y registros de índice para el almacenamiento, pero en las CPU de 32 bits, sus registros de 32 bits EAX, EBX, ECX. Y EDX no solo puede transferir datos, almacenar datos temporalmente para guardar los resultados de operaciones aritméticas y lógicas, sino que también puede usarse como registros de puntero, por lo que estos registros de 32 bits se usan más ampliamente
2. Registros de direcciones variables
La CPU de 32 bits tiene dos registros de uso general de 32 bits, ESI y EDI, y sus 16 bits inferiores son los mismos que en el pasado, SI y DI de la CPU correspondían, y el acceso a los datos inferiores de 16 bits no afectaría a los datos superiores de 16 bits.
Los registros ESI, EDI, SI y DI se denominan registros de índice (registros de índice y se utilizan principalmente para el desplazamiento). de la unidad de almacenamiento en el segmento de almacenamiento. Estos desplazamientos se pueden utilizar para direccionar varios operandos de almacenamiento, de modo que se pueda acceder cómodamente a la unidad de almacenamiento en forma de diferentes direcciones. El registro de dirección variable no se puede dividir en 8 bits. Registros de propósito general, también pueden almacenar operandos y resultados de operaciones aritméticas y lógicas. También se pueden utilizar como punteros de memoria de uso general. Tienen requisitos y funciones especiales al ejecutar instrucciones de manipulación de cadenas.
3. Registro de puntero
La CPU de 32 bits tiene dos registros de propósito general de 32 bits, EBP y ESP. Los 16 bits inferiores corresponden a SBP y SP en la CPU anterior. El acceso a los datos de bits no afectará a los 16 bits de datos superiores.
Los registros EBP, ESP, BP y SP se denominan registros de puntero (Pointer Register). Se utilizan principalmente para almacenar el desplazamiento de la unidad de almacenamiento en la pila. Con estos desplazamientos se direccionan varios operandos de Memoria. para facilitar el acceso a ubicaciones de memoria en diferentes direcciones. Los registros de puntero no se pueden dividir en registros de 8 bits. Como registros de propósito general, también pueden almacenar operandos y resultados de operaciones aritméticas y lógicas.
Se utilizan principalmente para acceder a unidades de almacenamiento en la pila. Las disposiciones específicas son las siguientes:
BP es el registro de puntero base y puede acceder directamente a los datos en la pila. /p>
SP es el registro del puntero de la pila y solo puede acceder a los datos en la parte superior de la pila.
4. Registro de segmento
El registro de segmento se configura según el modo de gestión del segmento de memoria. La dirección física de la unidad de memoria se compone del valor del registro de segmento y el desplazamiento
, de modo que dos valores con menos dígitos se pueden combinar en una dirección de memoria para acceder a un espacio físico más grande.
Registros de segmento en la CPU:
CS - registro de segmento de código, cuyo valor es el valor del segmento de código
DS - registro de segmento de datos (; segmento de datos ) DS - registro de segmento de datos, cuyo valor es el valor del segmento de datos
ES - registro de segmento adicional, cuyo valor es el valor del segmento de datos adicional
<; p>SS - Registro de segmento de pila cuyo valor es el valor del segmento de pila;FS - Registro de segmento adicional cuyo valor es el valor del segmento de datos adicional.
FS - registro de segmento adicional, cuyo valor es el valor del segmento de datos adicionales
GS - registro de segmento adicional (registro de segmento adicional), cuyo valor es el valor del segmento de; el segmento de datos adicionales. En un sistema de CPU de 16 bits, tiene solo 4 registros de segmento, por lo que un programa puede acceder directamente hasta 4 segmentos en uso en un momento dado; en un sistema de microcomputadora de 32 bits, tiene 6 registros de segmento, por lo que en Programas desarrollados; En este entorno se puede acceder hasta 6 segmentos simultáneamente. En cada modo, los registros de segmento tienen diferentes funciones. Las regulaciones relevantes se describen brevemente a continuación:
Modo real: los significados de los primeros cuatro registros de segmento CS, DS, ES y SS son los mismos que los de los registros de segmento correspondientes en las CPU anteriores. La dirección de la unidad de memoria todavía usa "segmento: Valor: Desplazamiento" del formulario. Para acceder a los datos en un segmento de memoria, debe utilizar el registro de segmento y el desplazamiento de la unidad de memoria.
Modo protegido: En este modo la situación es mucho más complicada. El registro de segmento ya no se carga con un valor de segmento, sino con un valor llamado "Selector".
5. Registro de puntero de instrucción
La CPU de 32 bits extiende el puntero de instrucción a 32 bits y lo registra como EIP. Los 16 bits inferiores de EIP son los mismos que la IP en. CPU anteriores.
El puntero de instrucción EIP, IP (Instruction Pointer, puntero de instrucción) es el desplazamiento en el segmento de código que almacena la instrucción que se ejecutará a continuación. En un sistema con captura previa de instrucciones, la siguiente instrucción a ejecutar generalmente se captura previamente en la cola de instrucciones a menos que se produzca una bifurcación. Por lo tanto, no es necesario considerar la existencia de la cola de instrucciones al comprender su funcionalidad.
En modo real, dado que la extensión máxima de cada segmento es 64K, los 16 bits superiores del EIP deben ser todos 0. En este momento, equivale a usar solo los 16 bits inferiores de IP para reflejar la secuencia de ejecución de las instrucciones en el programa.
6. Registro de bandera
I. Bandera de resultado de la operación
1. Llevar bandera CF (carry flag)
Carry flag CF Principalmente Se utiliza para reflejar si la operación produce un acarreo o un préstamo. Su valor es 1 si el bit más alto del resultado de la operación resultó en un acarreo o préstamo; de lo contrario, es 0. Los usos de esta bandera incluyen: operaciones de suma y resta de números de varias palabras (bytes), operaciones de comparación de números grandes y pequeños sin signo, operaciones de cambio, cambios entre palabras (bytes), valores especiales para instrucciones que cambian el valor CF , etc.
2. Indicador de verificación de paridad PF (indicador de verificación de paridad)
El indicador de verificación de paridad PF se utiliza para reflejar la paridad del número de "1" en el resultado de la operación. Si el número de "1" es un número par, el valor de PF es 1; de lo contrario, es 0.
Utilice PF para realizar comprobaciones de paridad o para generar bits de paridad.
Durante la transmisión de datos, si se utiliza la verificación de paridad, este indicador se puede utilizar para proporcionar confiabilidad de la transmisión.
3. Bandera de transporte auxiliar AF (bandera de transporte auxiliar)
Cuando ocurren las siguientes situaciones, el valor del indicador de transporte auxiliar AF se establece en 1; de lo contrario, su valor es 0:
(1) Durante una operación de palabra, cuando se produce un acarreo o préstamo desde el byte bajo al byte alto.
(2) Durante una operación de byte, cuando se realiza un acarreo o préstamo; del byte bajo al byte alto ocurre cuando se transportan o toman prestados 4 bits;
Para los seis indicadores de resultados de operación anteriores, en situaciones de programación generales, los indicadores CF, ZF, SF y OF se usan con más frecuencia, mientras que los indicadores PF y AF se usan con menos frecuencia.
4. Bandera cero ZF (bandera cero)
La bandera cero ZF se utiliza para reflejar si el resultado de la operación es 0. Si el resultado de la operación es 0, su valor es 1, de lo contrario es 0.
5. Bit de bandera SF (Bandera de signo)
El bit de bandera SF se utiliza para reflejar el bit de bandera del resultado de la operación. Es el mismo que el bit más alto de la operación. resultado. En los sistemas de microcomputadoras, los números con signo están representados por números en complemento a dos, por lo que SF también refleja el signo del resultado de la operación.
6. Bandera de desbordamiento (Bandera de desbordamiento)
La bandera de desbordamiento (Bandera de desbordamiento, OF) se utiliza para reflejar si los resultados de la suma y resta de números con signo se desbordan. Si el resultado de la operación excede el rango que puede representar el número actual de bits, se denomina desbordamiento y el valor de OF se establece en 1. Desbordamiento y redondeo son dos conceptos diferentes, así que no los confundas. Si no está seguro, consulte el capítulo correspondiente del curso Principios de organización informática.
Banderas de control de estado
Las banderas de control de estado se utilizan para controlar el funcionamiento de la CPU y solo instrucciones especiales pueden cambiarlas.
1. Trap Flag TF (Trap Flag)
Cuando el trap flag TF se establece en 1, la CPU ingresa al modo de ejecución de un solo paso, es decir, cada vez que se ejecuta una instrucción. ejecutado, una solicitud de interrupción de un solo paso. Este modo se utiliza principalmente para la depuración de programas. No hay instrucciones especiales en el conjunto de instrucciones para cambiar el valor del indicador TF, pero el programador puede cambiar su valor utilizando otros métodos.
2. Indicador de habilitación de interrupción IF (Indicador de habilitación de interrupción)
El indicador de habilitación de interrupción IF se utiliza para determinar si la CPU responde a la solicitud de interrupción emitida por el enmascarable externo de la CPU. interrumpir. Sin embargo, independientemente del valor de este indicador, la CPU debe responder a las solicitudes de interrupción emitidas por interrupciones no enmascarables externas a la CPU, así como a las solicitudes de interrupción generadas internamente por la CPU. Las disposiciones específicas son las siguientes:
(1) Cuando IF = 1, la CPU puede responder a la solicitud de interrupción emitida por la interrupción enmascarable externa de la CPU
(2) Cuando IF; = 0, la CPU no responde a las solicitudes de interrupción emitidas por interrupciones enmascarables externas de la CPU.
El sistema de instrucciones de la CPU también tiene instrucciones especiales para cambiar el valor IF del bit de bandera.
3. Indicador de dirección (indicador de dirección)
El indicador de dirección DF se utiliza para determinar la dirección en la que se ajusta el registro de puntero relevante durante la ejecución de instrucciones de operación de cadena. Consulte la Sección 5.2.11: Instrucciones de manipulación de cadenas para obtener más detalles. El sistema de instrucciones del microordenador también proporciona instrucciones especiales para cambiar el valor del bit de bandera DF.
III. Bits de bandera agregados al registro de bandera de 32 bits
1. Bandera de privilegio de E/S IOPL (nivel de privilegio de E/S)
I/ O El indicador de privilegio está representado por dos bits binarios y también se denomina campo de nivel de privilegio de E/S. Este campo especifica el nivel de permiso solicitado para ejecutar una instrucción de E/S. Si el nivel de privilegio actual es numéricamente menor o igual que el valor de IOPL, la instrucción de E/S se puede ejecutar; de lo contrario, se produce una excepción de protección;
2. Indicador de tarea anidada NT (tarea anidada)
El indicador de tarea anidada NT se utiliza para controlar la ejecución de la instrucción de retorno de interrupción IRET. Las disposiciones específicas son las siguientes:
(1) Cuando NT = 0, utilice los valores guardados en la pila para restaurar EFLAGS, CS y EIP, y realice operaciones regulares de retorno de interrupción
;(2) Cuando NT = 1, el retorno de interrupción se logra mediante la conversión de tareas.
3.Restart Flag RF (Restart Flag)
El indicador de reinicio RF se utiliza para controlar si se aceptan fallas de depuración. Regulación: RF = 0, es decir "aceptar" el fallo de depuración, en caso contrario rechazarlo. El procesador establece RF en 0 cuando una instrucción se ejecuta exitosamente y en 1 cuando se acepta una falla que no es de depuración.
4. Indicador de modo virtual 8086 VM (modo virtual 8086)
Si el valor de este indicador es 1, significa que el procesador está en el estado de funcionamiento del modo virtual 8086. de lo contrario significa que el procesador está en modo de protección general.
5. Indicador de modo de protección general VM (modo virtual 8086)
Si el valor de este indicador es 1, significa que el procesador está en el estado de funcionamiento del modo virtual 8086. de lo contrario significa que el procesador está en modo de protección general.