Red de conocimiento informático - Conocimiento sistemático - ¿Cómo utilizar cs.ds.es.ss en lenguaje ensamblador?

¿Cómo utilizar cs.ds.es.ss en lenguaje ensamblador?

Si desea saber cómo utilizarlos, debe comprender su propósito, cómo cooperan con otros registros y cómo se logra el direccionamiento de registros y de memoria. Simplemente hablar de estos registros de segmento, sin involucrar otros registros, no puede comprenderlos ni dominarlos realmente. El aprendizaje debe realizarse paso a paso: "No construyas una plataforma alta en la arena"

---------------

El registro es parte integrante de la unidad central de procesamiento. Los registros son componentes de almacenamiento de alta velocidad con capacidad de almacenamiento limitada. Se pueden utilizar para almacenar temporalmente instrucciones, datos y direcciones. En la unidad de control del procesador central, los registros incluidos son el registro de instrucciones (IR) y el contador de programa (PC). En los componentes aritmético y lógico de la unidad central de procesamiento, el registro incluido es el acumulador (ACC).

Los registros son la cima de la jerarquía de memoria y la forma más rápida para que el sistema obtenga datos operativos. Los registros generalmente se miden por la cantidad de bits que pueden contener, por ejemplo, un "registro de 8 bits" o un "registro de 32 bits". Actualmente, los registros se implementan como archivos de registro, pero también se pueden implementar utilizando flip-flops separados, memoria central de alta velocidad, memoria de película delgada y otros medios en varias máquinas.

Registro se suele utilizar para referirse a un grupo de registros que pueden indexarse ​​directamente mediante la salida o entrada de una instrucción. Es más apropiado llamarlos "registros arquitectónicos".

Por ejemplo, las instrucciones x86 definen 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 dentro 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 este párrafo] Propósito de los registros

1. Los datos del registro se pueden utilizar para realizar operaciones aritméticas y lógicas

2. La dirección; almacenado en el registro Se puede usar para señalar una determinada ubicación en la memoria, es decir, direccionar;

3. Se puede usar para leer y escribir datos en periféricos de computadora.

[Editar este párrafo] Registros de datos

8086 tiene 14 registros de 16 bits. Estos 14 registros se pueden dividir en (1) registros de propósito general y (2) punteros de instrucciones según. a sus usos, (3) registro de bandera y (4) registro de segmento, etc. 4 categorías.

(1) Hay 8 registros de uso general, que se pueden dividir en 2 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, a menudo utilizado para operaciones diseñadas para almacenar operandos en instrucciones como multiplicación y división. todas las instrucciones I/All O utilizan este registro para transferir datos a dispositivos externos.

BHamp;BX (base): registro de dirección base, utilizado a menudo para el índice de direcciones;

CHAmp; ; CL=CX (recuento): Registro de conteo, a menudo usado para contar; a menudo se usa para guardar valores calculados, como un contador implícito en instrucciones de cambio, bucles e instrucciones de procesamiento de cadenas.

DHamp; = DX(datos): Registro de datos, utilizado a menudo para la transferencia de datos.

Su característica es que estos cuatro registros de 16 bits se pueden dividir en los 8 bits superiores: AH, BH, CH, DH y los ocho bits inferiores: AL, BL, CL, DL. Estos dos conjuntos de registros de 8 bits se pueden direccionar por separado y utilizar de forma independiente.

El otro grupo es el registro de puntero y el registro de índice, que incluyen:

SP (puntero de pila): el puntero de pila, utilizado junto con SS, puede apuntar a la ubicación actual de la pila;

p>

BP (Puntero base): registro de puntero base, que se puede utilizar como una posición de dirección base relativa de SS;

SI (Índice de origen): Índice de origen El registro se puede utilizar para almacenar el puntero de índice de origen del segmento DS;

DI (Índice de destino): registro de índice de destino, que se puede utilizar para almacenar el puntero de índice de destino relativo al segmento ES.

Estos cuatro registros de 16 bits solo pueden realizar operaciones de acceso en 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 y operaciones de índice. .

(2) IP del puntero de instrucción (puntero de instrucción)

El IP del puntero de instrucción es un registro especial de 16 bits, que apunta al byte de instrucción que actualmente debe recuperarse. la BIU lo recupera de la memoria. Después de un byte de instrucción, IP se incrementa automáticamente en 1 y apunta 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 (Dirección de desplazamiento) o dirección efectiva (EA, Dirección efectiva).

(3) Registro de bandera FR (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. 3 bits 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 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.

DF: el bit DF del indicador de dirección 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.

IF: El bit IF del indicador de habilitación de interrupción se utiliza para determinar si la CPU responde a las solicitudes de interrupción emitidas por interrupciones enmascarables externas a la CPU. 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.

TF: Bandera de seguimiento TF. Este indicador se puede utilizar para la depuración del programa. La bandera TF no tiene instrucciones dedicadas para configurar o borrar.

(1) Si TF = 1, la CPU está en el 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. Se muestran las instrucciones que debe ejecutar la CPU.

(2) Si TF=0, está en modo de trabajo continuo.

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 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.

ZF: El indicador 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.

AF: En las siguientes circunstancias, el valor del indicador de acarreo auxiliar AF se establece en 1; de lo contrario, su valor es 0:

(1) Durante la operación de palabra, el byte bajo ocurre cuando se transporta o se toma prestado del byte alto;

(2) Durante la operación de byte, cuando los 4 bits bajos se transportan o se toman prestados de los 4 bits bajos a los 4 bits altos.

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

CF: El indicador de acarreo CF se utiliza principalmente 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. )

4) Registro de segmento (Registro de segmento)

Para utilizar todo el espacio de memoria, 8086 establece cuatro registros de segmento, que se utilizan especialmente para guardar direcciones de segmento:

CS (Segmento de código): Registro de segmento de código;

DS (Segmento de datos): Registro de segmento de datos;

SS (Segmento de pila): Registro de segmento de pila;

ES (Extra Segment): Registro de segmento adicional.

Cuando se va a ejecutar un programa, es necesario determinar qué ubicaciones de memoria utilizarán el código, los datos y la pila del programa, y ​​configurar los registros de segmento CS, DS y SS para que apunten. estos lugares de partida. Por lo general, el DS se repara y el CS se modifica según sea necesario. Por lo tanto, el programa se puede escribir en cualquier tamaño mientras el espacio direccionable sea inferior a 64 K. Por lo tanto, el tamaño combinado del programa y sus datos está limitado a 64 K como lo indica DS. Es por eso que los archivos COM no deben tener más de 64 K. 8086 utiliza la memoria como campo de batalla y se registra como base militar para acelerar el trabajo.

Lo anterior es una descripción general de los registros 8086. Desde 80386, la PC ha entrado en la era de los 32 bits y su modo de direccionamiento, tamaño de registro, funciones, etc.

============================= La siguiente es información sobre los registros de 80386 ==== == ================================

Los registros son todos de 32 bits de ancho.

A. Registros de propósito general

A continuación se presentan los registros de propósito general y su uso común. Como su nombre lo indica, los registros de uso general son aquellos registros que puede usar según sus propios deseos. La modificación de sus valores generalmente no tiene un gran impacto en el funcionamiento de la computadora. El uso más común de los registros de propósito general son los cálculos.

EAX: registro de propósito general. En comparación con otros registros, se utiliza más comúnmente para realizar operaciones. En modo protegido, también se puede utilizar como puntero de desplazamiento de memoria (en este momento, DS actúa como registro o selector de segmento)

EBX: registro de propósito general. Generalmente utilizado como puntero de desplazamiento de memoria (en relación con EAX, ECX, EDX), DS es el registro o selector de segmento predeterminado. En modo protegido, también puede desempeñar esta función.

ECX: Registro de propósito general. Normalmente se utiliza para contar instrucciones específicas. En modo protegido, también se puede utilizar como puntero de desplazamiento de memoria (en este caso, DS actúa como registro o selector de segmento).

EDX: registro de propósito general. Se utiliza como registro de desbordamiento de EAX en determinadas operaciones (como multiplicación y división). En modo protegido, también se puede utilizar como puntero de desplazamiento de memoria (en este caso, DS actúa como un registro de segmento o selector).

Al igual que AX se divide en AHamp AL, los registros anteriores incluyen grupos de 16 bits y grupos de 8 bits correspondientes.

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 normalmente nadie lo utiliza como registro de propósito general. DS es el registro o selector de segmento predeterminado.

EDI: Generalmente se utiliza como "puntero de dirección de destino" en las instrucciones de operación de la memoria. Por supuesto, el EDI se puede cargar con cualquier valor, pero normalmente nadie lo utiliza como registro de propósito general.

DS es el registro o selector de segmento predeterminado.

EBP: También es un registro que actúa como puntero. Normalmente, lo utilizan compiladores de lenguajes de alto nivel para construir 'marcos de pila' para contener variables locales de funciones o procedimientos, pero, nuevamente, puede contener cualquier dato que desee en ellos. SS es su registro o selector de segmento predeterminado.

Tenga en cuenta que estos tres registros no tienen grupos de 8 bits correspondientes. En otras palabras, puede acceder a sus 16 bits inferiores a través de SI, DI y BP como alias, pero no hay forma de acceder directamente a sus 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.

Fragmento CS o selector de código. Junto con el registro IP (descrito más adelante), apunta a la dirección que se está ejecutando actualmente. Cuando el procesador se ejecuta, recupera instrucciones del segmento (modo real) o de la memoria (modo protegido) al que apunta este registro. No puede modificar el contenido de este registro excepto con saltos u otras instrucciones de rama.

Segmento de datos DS, o selector de datos. Los 16 bits inferiores de este registro, junto con ESI, apuntan a la memoria que será procesada por 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, sin embargo, se debe tener cierto cuidado al hacerlo). El método consiste en enviar primero los datos a AX y luego transferirlos de AX a DS (por supuesto, también se puede hacer a través del segmento adicional

ES o del selector adicional). 16 bits junto con EDI apuntan a la memoria a procesar. De manera similar, este registro se puede cargar con cualquier valor de manera similar al segmento DS F o al selector F (se especula que F puede. ser gratuito. ?). Puede utilizar este registro como alternativa al registro o selector de segmento predeterminado. Puede cargarse con cualquier valor de forma similar al segmento GS o al selector G (. el significado de G). Como F, no explicado en la documentación de Intel). Es casi idéntico al segmento de pila FS o al selector de pila. (La dirección de la pila que se utilizará mediante push y pop). Este registro también se puede cargar con cualquier valor. Sin embargo, dado que la pila es muy importante para muchas operaciones, lo es. Las modificaciones incorrectas pueden causar daños a la pila.

* Tenga cuidado de no confundir estos registros en la etapa de ensamblaje inicial. Son muy importantes y una vez que los domine, podrá hacer lo que quiera con ellos. El registro de segmento o selector se utiliza a menos que se especifique. Esta oración puede parecer un poco confusa ahora, pero sabrás cómo hacerlo más adelante.

Registro de puntero de instrucción:

Este registro. Es muy importante. Este es un registro de 32 bits de ancho, que junto con CS apunta a la dirección de la instrucción a ejecutar y no se puede modificar directamente el valor del registro, la única forma de modificarlo es un salto o rama. instrucción (CS es el segmento o selector predeterminado)

Arriba están los registros más básicos, a continuación se muestran algunos otros registros que quizás nunca hayas oído hablar de ellos (todos tienen 32 bits de ancho):

CR0, CR2, CR3 (registro de control). Como ejemplo, CR0 se utiliza para cambiar entre el modo real y el modo protegido.

Hay algunos otros registros, D0, D1, D2. D3, D6 y D7 (registros de depuración), que se pueden utilizar como soporte de hardware para que el depurador establezca puntos de interrupción condicionales.

Los registros TR3, TR4, TR5, TR6 y TR? (registros de prueba) se utilizan para determinadas pruebas de condición.