¿Cómo funciona cs.ds.es.ss en lenguaje ensamblador?
--------------
Los registros son componentes de la unidad central de procesamiento. Los registros son elementos de almacenamiento de alta velocidad con capacidad de almacenamiento limitada que se pueden utilizar para almacenar temporalmente instrucciones, datos y direcciones de bits. Los registros incluidos en la parte de control de la CPU son el registro de instrucciones (IR) y el contador de programa (PC). El registro contenido en la parte aritmética y lógica de la CPU es el Acumulador (ACC).
Los registros se encuentran en la cima de la jerarquía de memoria y son la forma más rápida que tiene un sistema de obtener información sobre sus operaciones. Los registros generalmente se miden en términos de la cantidad de bits que pueden contener, como "registro de 8 bits" o "registro de 32 bits". Los registros ahora se implementan como archivos de registro, pero también se pueden implementar en varias computadoras utilizando inversores individuales, memoria central de alta velocidad, memoria de película delgada y otros medios.
Registro se utiliza generalmente para referirse a un grupo de registros que puede indexarse directamente mediante la salida o entrada de una instrucción. Sería más apropiado llamarlos "registros arquitectónicos".
Por ejemplo, el conjunto de instrucciones x86 define un conjunto de ocho registros de 32 bits, pero una CPU que implementa el conjunto de instrucciones x86 puede contener más de ocho registros.
Los registros son componentes internos de la CPU. Los registros tienen velocidades de lectura y escritura muy altas, por lo que la transferencia de datos entre registros es muy rápida.
[Editar] Propósito de los registros
1. Los datos del registro se pueden utilizar para realizar operaciones aritméticas y lógicas
2. el registro se puede utilizar para señalar una ubicación en la memoria, es decir, direccionar;
3. Se puede utilizar para leer y escribir datos en los dispositivos periféricos de la computadora.
[editar]Registros de datos
8086 tiene 14 registros de 16 bits, que se pueden dividir en cuatro categorías según sus usos: (1) registros de propósito general (2) punteros de instrucción; (3) registro de bandera; (4) registro de segmento.
(1) Hay 8 registros de uso general, que se pueden dividir en dos grupos, un grupo son registros de datos (4) y el otro son registros de puntero y registros de índice (4).
Los registros de datos se dividen en:
AHamp; AL=AX (acumulador): registro de acumulación, frecuentemente utilizado para operaciones aritméticas, está diseñado para almacenar operandos en instrucciones de multiplicación y división; Además, todas las instrucciones de E/S utilizan este registro para la transmisión de datos con dispositivos externos.
BHamp; BL=BX(base): registro de dirección base, usado a menudo para indexar direcciones;
CHamp;CL=CX(count): registro de conteo, usado a menudo para contar; A menudo se utiliza para contener valores calculados, por ejemplo, como un contador implícito en instrucciones de procesamiento de cadenas, rotaciones y cambios.
DHamp;DL=DX(datos): registro de datos, utilizado a menudo para la transmisión de datos.
Se caracterizan por tener cuatro registros de 16 bits, que se pueden dividir en 8 bits altos: AH, BH, CH, DH y 8 bits bajos: AL, BL, CL, DL. Los registros de 8 bits se pueden direccionar y utilizar individualmente.
Los otros dos grupos son registros de puntero y registros de índice, que incluyen:
SP (StackPointer): puntero de pila, utilizado con SS, que apunta a la ubicación actual de la pila;
BP (BasePointer): registro de puntero base, que se puede utilizar como la posición relativa de la dirección base de SS;
SI (SourceIndex): registro de dirección de origen.
SourceIndex): registro de dirección de origen, que se puede utilizar para almacenar el puntero de dirección de origen relativo al segmento DS;
DI (DestinationIndex): registro de dirección de destino, que se puede utilizar para almacenar el puntero de dirección de destino relativo al segmento ES.
Solo se puede acceder a estos cuatro registros de 16 bits mediante operaciones de 16 bits. Se utilizan principalmente para formar la dirección del operando y se utilizan para calcular la dirección efectiva del operando en operaciones de pila e índice. operaciones.
(2) IP del puntero de instrucción (InstructionPointer)
La IP del puntero de instrucción es un registro especial de 16 bits que apunta al byte de instrucción que se eliminará actualmente cuando la BIU elimina un. instrucción del byte de memoria, IP se incrementará automáticamente en 1 para apuntar al siguiente byte de instrucción. Tenga en cuenta que IP apunta al desplazamiento de la dirección dentro del segmento de la dirección de instrucción, también conocida como dirección de desplazamiento (OffsetAddress) o dirección efectiva (EA, EffectiveAddress).
(3) Registro de bandera
8086 tiene un registro de bandera FR de 18 bits. Hay 9 bits significativos en FR, 6 de los cuales son bits de estado y 3 son bits de control. .
OF: El bit de indicador de desbordamiento OF se utiliza para reflejar si los resultados de las operaciones de suma y resta digitales 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. De lo contrario, el valor de OF se borrará a 0.
DF: Indicador de dirección El bit DF se utiliza para determinar la dirección en la que se ajusta el registro de puntero asociado durante la ejecución de instrucciones de manipulación de cadenas.
IF: indicador de habilitación de interrupción El bit IF del indicador de habilitación de interrupción se utiliza para determinar si la CPU responde a una solicitud de interrupción de una interrupción enmascarable externa a la CPU. 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.
TF: Bandera de seguimiento TF. Este indicador se puede utilizar para la depuración del programa. No hay instrucciones especiales para configurar o borrar la bandera TF.
(1) Si TF=1, la CPU está en modo de ejecución de instrucciones de un solo paso. En este momento, después de ejecutar cada instrucción, el valor actual de cada registro en la CPU y el siguiente paso. La CPU se ejecutará y se mostrará una instrucción.
(2) Si TF=0, la CPU está en modo de ejecución continua.
SF: 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 del resultado de la operación. En los sistemas de microcomputadoras, los números con signo se representan mediante números complementarios, por lo que SF también refleja el signo del resultado de la operación. El valor de SF es 0 si el resultado de la operación es positivo, en caso contrario el valor de SF es 1.
ZF: ZF: el bit de 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, el valor de SF es 1; de lo contrario, el valor de SF es 0. Cuando Al juzgar si el resultado de la operación es 0, se puede utilizar este indicador.
AF: En los siguientes casos, el valor del bit de bandera de alimentación auxiliar AF se establece en 1; de lo contrario, su valor es 0:
(1) Cuando ocurre una operación de byte y el byte bajo Cuando el byte alto se alimenta o se toma prestado;
(2) Cuando ocurre una operación de byte y los 4 bits bajos se alimentan o se toman prestados.
PF: 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, es 0.
CF: El indicador CF se utiliza principalmente 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, y 0 en caso contrario. )
4) Registros de segmento
Para aprovechar al máximo el espacio de memoria, 8086 tiene cuatro registros de segmento utilizados específicamente para guardar direcciones de segmento:
CS ( CodeSegment): registro de segmento de código;
DS (DataSegment): registro de segmento de datos;
SS (StackSegment): registro de segmento de pila;
ES (ExtraSegment) : Registros de segmentos adicionales.
Al ejecutar un programa, es necesario determinar las ubicaciones respectivas en la memoria del código, los datos y la pila del programa, y señalar estas ubicaciones iniciales configurando los registros de segmento CS, DS y SS. . Normalmente, DS es fijo y CS se modifica según sea necesario, por lo que los programas pueden escribir en cualquier tamaño inferior a 64 KB de espacio direccionable. Por lo tanto, el tamaño combinado del programa y sus datos está limitado a lo que DS denomina 64 K, razón por la cual los archivos COM no deben tener más de 64 K. El 8086 utiliza la memoria como campo de batalla y se registra como base militar para trabajar más rápido.
Lo anterior es una descripción general de 8086 registros. Desde 80386, la PC ha entrado en la era de 32 bits y su direccionamiento, tamaño de registro, funciones, etc. han cambiado.
============================= Aquí hay información sobre el registro 80386====== ================================
El ancho de los registros es de 32 bits.
A. Registros de propósito general
A continuación se presentarán los registros de propósito general y sus modismos. Como su nombre lo indica, los registros de uso general son registros que se pueden usar a voluntad. La modificación de sus valores generalmente no tiene mucho impacto en el funcionamiento de la computadora. El uso más común de los registros de propósito general es en computación.
EAX: registro de uso general. Se utiliza más comúnmente para realizar cálculos que otros registros. También se utiliza como puntero de compensación de memoria en modo protegido (cuando DS se utiliza como registro de segmento o selector)
EBX: Registro de propósito general. Normalmente utilizado como puntero de compensación de memoria (a diferencia de EAX, ECX, EDX), DS es el registro o selector de segmento predeterminado. En modo protegido también se puede utilizar para este fin.
ECX: Registro de propósito general. Normalmente se utiliza para recuentos de instrucciones específicas. En modo protegido, también se puede utilizar como puntero de compensación de memoria (en cuyo caso DS actúa como registro o selector de segmento).
EDX: registro de uso general. Actúa como registro de desbordamiento para EAX en determinadas operaciones (como multiplicación, división). En modo protegido, también se puede utilizar como puntero de desplazamiento de memoria (en cuyo caso DS actúa como registro de segmento o selector).
Al igual que dividir AX en AH&AL, los registros anteriores incluyen los correspondientes grupos de 16 bits y grupos de 8 bits.
B. Registro especial utilizado como puntero de memoria
ESI: normalmente se utiliza como "puntero de dirección de origen" en las instrucciones de operación de la memoria. Por supuesto, ESI se puede cargar con cualquier valor, pero generalmente nadie lo usa como registro de propósito general. DS es el registro o selector de segmento predeterminado.
EDI: Generalmente se utiliza como "puntero de destino" en las instrucciones de operación de la memoria. Por supuesto, EDI se puede cargar con cualquier valor, pero generalmente nadie lo usa como registro de propósito general. DS es el registro o selector de segmento predeterminado.
EBP: También es un registro que se utiliza como puntero. Normalmente, los compiladores de lenguajes de alto nivel utilizan esto para crear "marcos de pila" para contener variables locales de funciones o procedimientos almacenados, pero igualmente, puede colocar cualquier dato en ellos.
Tenga en cuenta que estos tres registros no tienen grupos de 8 bits correspondientes.
En otras palabras, puede acceder a los 16 bits inferiores de SI, DI y BP como alias, pero no directamente a los 8 bits inferiores.
C. Selector de segmento:
El registro de segmento en modo real se convierte en un selector en modo protegido. La diferencia es que el "registro de segmento" en modo real es de 16 bits, mientras que el selector en modo protegido es de 32 bits.
Selector de segmento o código CS. Junto con el registro IP (descrito más adelante), apunta a la dirección que se está ejecutando actualmente. El procesador ejecuta instrucciones recuperándolas del segmento (modo real) o de la memoria (modo protegido) al que apunta este registro. El contenido de este registro no se puede modificar excepto mediante salto u otras instrucciones de bifurcación.
Segmento de datos DS o selector de datos. Los 16 bits inferiores de este registro, junto con ESI, apuntan a la memoria que procesará la instrucción. Además, todas las instrucciones de manipulación de memoria lo utilizan por defecto para especificar el segmento operativo (modo real) o la memoria (como selector, en modo protegido). Este registro se puede cargar con cualquier valor, pero hay algunas cosas a tener en cuenta al cargar. El método consiste en entregar primero los datos a AX y luego transferirlos de AX a DS (por supuesto, esto también se puede hacer a través de la pila).
ES segmentos extra o selectores extra. Los 16 bits inferiores de este registro, junto con EDI, apuntan a la memoria que procesará la instrucción. Asimismo, este registro también se puede cargar con valores arbitrarios al estilo DS.
Segmento FSF o selector F (¿presumiblemente F es libre?) Este registro se puede utilizar en lugar del registro o selector de segmento predeterminado. Puede cargar cualquier valor de forma similar a DS.
Segmento GSG o selector G (G tiene el mismo significado que F y no se explica en la documentación de Intel). Es casi lo mismo que FS.
Segmento de pila SS o selector de pila. Los 16 bits inferiores de este registro, junto con ESP, apuntan a la dirección de pila utilizada para la siguiente operación de pila (empujar y sacar). Este registro también se puede cargar con valores arbitrarios y puede asignarle valores mediante operaciones dentro y fuera de la pila, pero dado que la pila es importante para muchas operaciones, las modificaciones incorrectas pueden dañar la pila.
*Durante las etapas iniciales de montaje, tenga cuidado de no confundir estos registros. Estos registros son muy importantes y una vez que los domines, podrás hacer cualquier cosa con ellos. El registro o selector de segmento utiliza el registro predeterminado cuando no se especifica. Esta afirmación puede parecerle un poco desconocida ahora, pero aprenderá rápidamente a utilizarla.
Registro de puntero de instrucciones:
EIP Este registro es muy importante. Es un registro de 32 bits de ancho que, junto con CS, apunta a la dirección de la instrucción a ejecutar. El valor de este registro no se puede modificar directamente; la única forma de modificarlo es utilizar una instrucción de salto o bifurcación. (CS es el segmento o selector predeterminado)
Los anteriores son los registros más básicos. A continuación se muestran algunos otros registros de los que quizás no haya oído hablar. (todos de 32 bits de ancho):
CR0, CR2, CR3 (registros de control). Por ejemplo, CR0 se utiliza para cambiar entre el modo real y el modo protegido.
Existen otros registros: D0, D1, D2, D3, D6 y D7 (registros de depuración). Se pueden utilizar como soporte de hardware para que los depuradores establezcan puntos de interrupción condicionales.
Los registros TR3, TR4, TR5, TR6 y TR? (registros de prueba) se utilizan para determinadas pruebas condicionales.