Red de conocimiento informático - Conocimiento sistemático - El papel de ebp y esp en el montaje

El papel de ebp y esp en el montaje

ebp y esp son SP de 32 bits, BP

esp es el puntero de la pila

ebp es el puntero de dirección base

ESP y SP La relación es como la relación entre AX, AL y AH.

Los registros contenidos en la CPU de 32 bits son:

4 registros de datos (EAX, EBX, ECX y EDX)

p>

2 Registros de índice y puntero (ESI y EDI) 2 Registros de puntero (ESP y EBP)

6 Registros de segmento (ES, CS, SS, DS, FS y GS)

1 registro de puntero de instrucción (EIP) 1 registro de bandera (EFlags)

1 registro de datos

El registro de datos se utiliza principalmente para almacenar operandos y operaciones Resultados y otra información, ahorrando así el tiempo necesario para ocupar el bus y acceder a la memoria para leer los operandos.

La CPU de 32 bits tiene cuatro registros de propósito general de 32 bits EAX, EBX, ECX y EDX. El acceso a los datos inferiores de 16 bits no afectará a los datos superiores de 16 bits. Estos

registros inferiores de 16 bits se denominan: AX, BX, CX y DX, que son consistentes con los registros de CPU anteriores.

Los cuatro registros de 16 bits se pueden dividir en ocho registros independientes de 8 bits (AX: AH-AL, BX: BH-BL, CX: CH-CL, DX: DH-DL), cada uno Cada registro

tiene su propio nombre y se puede acceder a él de forma independiente. Los programadores pueden aprovechar las características "divisibles y combinadas" de los registros de datos para procesar de manera flexible información de palabras/bytes.

Los registros AX y AL suelen denominarse 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 utilizan con frecuencia. El registro BX se denomina registro de dirección base (Registro Base). Se puede utilizar como puntero de memoria;

El registro CX se denomina registro de conteo (Count Register). En operaciones de bucle y cadena, utilícelo para controlar el número de bucles; en operaciones de bits

, al desplazar varios bits, utilice CL para especificar el número de bits a desplazar;

Registrar DX se llama registro de datos (Registro de datos). Al realizar operaciones de multiplicación y división, se puede utilizar como operando predeterminado para participar en la operación y también se puede utilizar para almacenar la dirección del puerto de E/S.

En CPU de 16 bits, AX, BX, CX y DX no se pueden utilizar como direcciones base y registros de índice para almacenar la dirección de la unidad de almacenamiento, pero en CPU de 32 bits, son 32 bits

Los registros EAX, EBX, ECX y EDX no solo pueden transmitir datos y almacenar datos temporalmente para guardar los resultados de operaciones aritméticas y lógicas, sino que también pueden usarse como registros de puntero.

Entonces , estos registros de 32 bits son más versátiles.

2. Registro de índice

La CPU de 32 bits tiene dos registros de propósito general de 32 bits, ESI y EDI. Los 16 bits inferiores corresponden a SI y DI en la CPU anterior. El acceso a los 16 bits de datos inferiores no afecta a los 16 bits de datos superiores.

Los registros ESI, EDI, SI y DI se denominan registros de índice (Index Register). Se utilizan principalmente para almacenar el desplazamiento de la unidad de almacenamiento dentro del segmento.

Pueden. Se puede utilizar para implementar múltiples modos de direccionamiento para operandos de memoria, lo que proporciona comodidad para acceder a unidades de almacenamiento en diferentes formas de dirección.

El registro índice no se puede dividir en registros de 8 bits. Como registro de propósito general, también puede almacenar operandos y resultados de operaciones aritméticas y lógicas.

Se pueden utilizar como punteros de memoria generales. Durante la ejecución de instrucciones de manipulación de cadenas, tienen requisitos específicos y también funciones especiales.

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 16 bits de datos inferiores no afecta a los 16 bits de datos superiores.

Los registros EBP, ESP, BP y SP se denominan registros de puntero (Pointer Register), que se utilizan principalmente para almacenar el desplazamiento de la unidad de almacenamiento en la pila.

Pueden. Se puede utilizar para implementar una variedad de El modo de direccionamiento de operandos de memoria proporciona comodidad para acceder a unidades de almacenamiento en diferentes formas de dirección.

El registro de puntero no se puede dividir en registros de 8 bits. Como registro de propósito general, también puede almacenar operandos y resultados de operaciones aritméticas y lógicas.

Se utilizan principalmente para acceder a unidades de almacenamiento en la pila y estipulan que:

BP es el registro de puntero base (Base Pointer), que se puede utilizar para acceder directamente a los datos en la pila;

SP es el registro del puntero de la pila, que solo puede acceder a la parte superior de la pila.

4. Registro de segmento

El registro de segmento se configura de acuerdo con el modo de gestión de la segmentación de la memoria. La dirección física de una unidad de memoria se compone del valor del registro de segmento y un desplazamiento. De esta manera, dos valores con menos dígitos se pueden combinar en una dirección de memoria que puede acceder a un espacio físico más grande.

Registro de segmento interno de la CPU:

CS——Registro de segmento de código (Registro de segmento de código), su valor es el valor del segmento del código;

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;

ES—Registro de segmento adicional, cuyo valor es el valor del segmento del segmento de datos adicional;

ES p>

SS——Registro de segmento de pila (Registro de segmento de pila), su valor es el valor del segmento de el segmento de pila;

FS——Registro de segmento adicional (Registro de segmento adicional), su valor son datos adicionales El valor del segmento del segmento;

GS - Registro de segmento adicional (Registro de segmento adicional Registro), su valor es el valor del segmento del segmento de datos adicional.

En un sistema de CPU de 16 bits, tiene solo 4 registros de segmento, por lo que el programa tiene como máximo 4 segmentos en uso en cualquier momento a los que se puede acceder directamente en una microcomputadora de 32 bits

En el sistema cuenta con 6 registros de segmentos, por lo que los programas desarrollados en este entorno pueden acceder hasta 6 segmentos al mismo tiempo.

La CPU de 32 bits tiene dos modos de trabajo diferentes: modo real y modo protegido. En cada modo, la función del registro de segmento es diferente. Las regulaciones relevantes se describen brevemente a continuación:

En la práctica: los primeros cuatro registros de segmento CS, DS, ES y SS tienen exactamente el mismo significado que los registros de segmento correspondientes en la CPU anterior, la dirección lógica. de la unidad de memoria todavía está en forma de "valor de segmento: desplazamiento". Para acceder a los datos dentro de un segmento de memoria, se debe utilizar el desplazamiento del registro del segmento y la unidad de almacenamiento.

Modo de protección: En este modo, la situación es mucho más complicada. Lo que se carga en el registro del segmento ya no es el valor del segmento, sino 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 tienen la misma función que la IP en. la CPU anterior.

Los punteros de instrucción EIP e IP (Instruction Pointer) almacenan el desplazamiento en el segmento de código de la instrucción que se ejecutará la próxima vez. En un sistema con la función de captación previa de instrucciones, la instrucción que se ejecutará la próxima vez generalmente se ha captado previamente en la cola de instrucciones, a menos que se produzca una bifurcación. Por tanto, a la hora de entender sus funciones no hay que considerar la existencia de colas de instrucciones.

En modo real, dado que el rango máximo de cada segmento es 64K, los 16 bits altos en el EIP deben ser 0. En este momento, equivale a usar solo los 16 bits bajos

La IP de

refleja el orden de ejecución de las instrucciones del programa.

6. Registro de bandera

1. 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. Si el bit más alto del resultado de la operación produce un acarreo o un préstamo, entonces su valor es 1; de lo contrario, su valor es 0.

Las situaciones en las que se utiliza este bit de bandera incluyen: suma y resta de números de varias palabras (bytes), comparación de tamaño de números sin signo, operaciones de cambio, cambio entre palabras (bytes), instrucciones especiales para cambiar el Valor de CF, etc.

2. Indicador de paridad PF (Indicador de paridad)

El indicador 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, su valor es 0.

Utilice PF para realizar comprobaciones de paridad o generar bits de paridad. Durante el proceso de transmisión de datos, para proporcionar confiabilidad de la transmisión, este indicador se puede usar si se utiliza un método de verificación de paridad.

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:

p>

(1). Durante la operación de palabra, se produce un acarreo o préstamo del byte bajo al byte alto.

(2) Durante la operación de byte, se produce un acarreo; o tomar prestado del byte bajo al byte alto ocurre cuando se transportan o toman prestados los 4 bits altos.

Para los seis indicadores de resultados de operación anteriores, en condiciones generales de programación, 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, en caso contrario su valor es 0. Este indicador se puede utilizar al juzgar si el resultado de la operación es 0.

5. Indicador de signo SF (Indicador de signo)

El indicador de signo SF se utiliza para reflejar el bit de signo del resultado de la operación, que es el mismo que el bit más alto de la operación. resultado. En los sistemas de microcomputadoras, los números con signo utilizan representación en complemento, por lo que SF también refleja el signo del resultado de la operación. Cuando el resultado de la operación es un número positivo, el valor de SF es 0; de lo contrario, su valor es 1.

6. Bandera de desbordamiento OF (Bandera de desbordamiento)

La bandera de desbordamiento OF se utiliza para reflejar si los resultados de las operaciones de suma y resta con signo se desbordan. Si el resultado de la operación excede el rango que puede ser representado por el número actual de operandos, se llama desbordamiento y el valor de OF se establece en 1. De lo contrario, el valor de OF se borra a 0.

"Overflow" y "carry" son dos conceptos con significados diferentes, así que no los confundas. Si no está seguro, consulte los capítulos pertinentes del curso "Principios de composición informática".

2. Indicadores de control de estado

Los indicadores de control de estado se utilizan para controlar las operaciones de la CPU y requieren instrucciones especiales para cambiarlos.

1. Trap Flag TF (Trap Flag)

Cuando el indicador de seguimiento 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. Se ejecuta, se genera un solo paso. Este método se utiliza principalmente para la depuración de programas.

No hay ninguna instrucción especial en el sistema de instrucciones para cambiar el valor del indicador TF, pero los programadores pueden cambiar su valor de otras maneras.

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 las solicitudes de interrupción emitidas por interrupciones enmascarables externas al UPC. Pero independientemente del valor de este indicador, la CPU debe responder a las solicitudes de interrupción emitidas por interrupciones no enmascarables fuera de la CPU, así como a las solicitudes de interrupción generadas dentro de la CPU. Las disposiciones específicas son las siguientes:

(1) Cuando IF = 1, la CPU puede responder a solicitudes de interrupción emitidas por interrupciones enmascarables externas a la CPU

(2) Cuando IF; =0, la CPU no responde a las solicitudes de interrupción emitidas por interrupciones enmascarables externas a la CPU.

El sistema de instrucciones de la CPU también tiene instrucciones especiales para cambiar el valor del indicador IF.

3. Indicador de dirección DF (Bandera de dirección)

El indicador de dirección DF se utiliza para determinar la dirección en la que se ajusta el registro del puntero cuando se ejecuta la instrucción de operación de cadena. Las disposiciones específicas se dan en la Sección 5.2.11 - Instrucciones de operación de cadenas. En el sistema de instrucciones del microordenador, también se proporcionan instrucciones especiales para cambiar el valor del bit de bandera DF.

3. 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/ Privilegio O La bandera está representada por dos bits binarios y también se denomina campo de nivel de privilegio de E/S. Este campo especifica el nivel de privilegio requerido para ejecutar instrucciones de E/S. Si el nivel de privilegio actual es numéricamente menor o igual que el valor de IOPL, entonces se puede ejecutar la instrucción de E/S; de lo contrario, se producirá 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, restaure EFLAGS, CS y EIP con los valores guardados en la pila y realice operaciones regulares de retorno de interrupción;

(2), cuando NT=1, el retorno de la interrupción se realiza 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: Cuando RF = 0, significa "aceptar" la falla de depuración, de lo contrario se rechaza. El procesador establece RF en 0 después de ejecutar exitosamente una instrucción y en 1 cuando se recibe una falla que no es de depuración.

4. Bandera de modo virtual 8086 VM (modo virtual 8086)

Si el valor de esta bandera es 1, significa que el procesador está funcionando en modo virtual 8086; de lo contrario, el El procesador está funcionando en modo de protección general.