¿Existen sólo cinco formas de direcciones de memoria de computadora? ¿Por qué?

Ahora que comprende el conocimiento y el uso de la memoria, ¿es la memoria una tarjeta de memoria? La respuesta es no, la memoria es donde se almacenan temporalmente los programas y datos. ¿Para qué es ese recuerdo? Todo el mundo sabe que almacena datos.

En la sección anterior, presentamos cómo leer y escribir memoria, como guardar datos de una dirección de memoria [0x12345678] a otra dirección de memoria [0x87654321] y usar la instrucción MOV para implementarlo.

Solución:

MOV·EAX, Deward PTR DS: [0x12345678]

EAX MOV Deward PTR DS: [0x87654321]

De la respuesta, podemos concluir que la dirección de memoria se compone de algunos números. ¿Es esta la única forma de dirección de memoria? ¿Encontraremos otras manifestaciones al depurar el programa? Cuando depuramos un programa, las direcciones de memoria no vienen solo en una forma, hay otras. * * *Dividido en cinco tipos.

2.6.1 Cinco formas de direcciones de memoria

La primera forma: [número inmediato]

Leer el valor de la memoria:

MOV·EAX, DWORD PTR DS: [0x003EF8CC]

Paso 1: Primero determine el ancho. DWORD significa que el ancho es de cuatro bytes. El registro EAX es un registro de 32 bits y 0x003EF8CC es la memoria de la aplicación. . Como se muestra en la Figura 2-6-1, los datos almacenados en el registro EAX en este momento son 0x 001 d2ba 2;

Paso 2: presione F8 para observar los cambios en los datos almacenados en el registro EAX , como se muestra en la Figura 2. Como se muestra en 6-2, puede ver que los datos almacenados en el registro EAX son los datos almacenados en la dirección de memoria 0x3EF8CC.

Escribe datos en la memoria:

ECX MOV Deward PTR DS: [0x003EF8D0]

Paso 1: Primero determina el ancho DWORD representa cuatro palabras El ancho del sección, el registro ECX es un registro de 32 bits y 0x003EF8D0 es la memoria de la aplicación. Como se muestra en la Figura 2-6-3, los datos almacenados en ECX son 0x0000000 y los datos almacenados en la dirección de memoria 0x03EF8D0 son 001d2ba 2;;

Paso 2: presione F8 y observe la dirección de memoria almacenada en Los cambios en los datos en 0x003EF8D0 se muestran en la Figura 2-6-4.

Tenga en cuenta que los datos almacenados en la dirección de memoria 0x003EF8CC son los datos almacenados en el registro ECX.

Segunda forma: [Registro]

El registro representa un registro de propósito general, que puede ser cualquiera de los ocho registros de propósito general, lo que indica que los datos almacenados en el registro son una dirección de memoria. Cuando nuestro programa se está ejecutando, normalmente guardamos la dirección base en un registro. Aquí solo se pueden utilizar estos 8 registros de uso general de 32 bits porque el número de direcciones de memoria es de 32 bits.

Leer el valor en memoria:

MOV ECX, 0x002FFE18

MOV·EAX, Deward PTR DS: [ECX]

Paso uno: Escriba la instrucción MOVEECX, 0x002fe18 en la ventana de ensamblaje, como se muestra en la Figura 2-6-5. Recuerde, los datos actualmente almacenados en el registro ECX son 0x 111165438.

Paso 2: Presione F8 para ver si la dirección de memoria 0x002FFE18 está escrita en ECX, como se muestra en la Figura 2-6-6:

Paso 3: Mueva la instrucción MOV·EAX , DWORD PTR DS: [ECX] Ventana de escritura de ensamblaje, como se muestra en la Figura 2-6-7:

Paso 4: presione F8 para verificar si los datos correspondientes a la dirección de memoria almacenada en ECX están escritos EAX , como se muestra en la Figura 2-6-8:

Escribir datos en la memoria:

MOV EDX, 0x002FFE1C

MOV·Deward PTR DS: [EDX] , 0x123456

Paso 1: Ingrese el comando en la ventana de ensamblaje.

Paso 2: Presione F8 para observar y escribir la dirección de memoria 0x002FFE1C en EDX, como se muestra en la Figura 2 -6. -10 se muestra:

El tercer paso: presione F8 para observar y escribir el número inmediato 0x00123456 en EDX, como se muestra en la Figura 2-6-11:

La tercera forma: [ Registrar número instantáneo]

Leer el valor en memoria:

MOV ECX, 0x003FF9E4

MOV·EAX, Deward PTR DS: [ECX 4 ]

El primer paso: Ingrese el comando, como se muestra en la Figura 2-6-12:

El segundo paso: Presione F8 para observar y escribir la dirección de memoria 0x003FF9E4 en ECX, como se muestra en la figura Como se muestra en 2-6-13:

Paso 3: Presione F8 para observar y escribir los datos almacenados en [ECX 4] (0X003FF9E4 4) en EAX, como se muestra en la Figura 2-6-14 :

Escribir datos en memoria:

MOV EDX, 0x002EFA50

MOV palabra doble PTR DS: [EDX 0xC], 0x123456

Paso 1: Ingrese el comando;

Paso 2: Presione F8 para observar y escribir la dirección de memoria 0x002EFA50 en EDX;

Paso 2: Presione F8 para observar y escribir el número inmediato 0x00123456 Ingrese [EDX 0xC] (0x002EFA50 0xC).

La cuarta forma: [Registro Registro * {1, 2, 4, 8}]

1, 2, 4, 8 se denominan factores de escala. Si está interesado y necesita saber más, puede consultar el documento técnico de Intel.

Leer el valor de la memoria:

MOV EAX, 0x0012FFC4

MOV·ECX, 0x2

MOV·EDX, Deward PTR DS : [EAX ECX*4]

Paso uno: Ingrese el comando;

Paso dos: Presione F8 para observar y escribir la dirección de memoria 0x0012FFC4 en EAX;

Paso 3: Presione F8 para observar y escribir el valor inmediato 0x2 (0x00000002) en ECX

Paso 4: Presione F8 para observar y escribir [EAX ECX * 4] (0x 12fc 4 0x 2 * The valor de 4) se escribe en EDX;

Significa poner 2 en FCC, el ancho es de 4 bytes (DWORD) y la dirección de memoria es 0x12fc4 2 * 4, que es 0x12FFCC.

Escribir datos en memoria:

MOV EAX, 0x12FFC4

MOV·ECX, 0x2

MOV DWORD PTR DS: [EAX ECX *4], 0x12345678

Paso 1: Ingrese el comando;

Paso 2: Presione F8 para observar y escribir la dirección de memoria 0x0012FFC4 en EAX; 3: Presione F8 para observar y escribir el número inmediato 0x2 (0x00000002) en ECX;

Paso 4: Presione F8 para observar y escribir el número inmediato 0x12345678 en [EAX ECX * 4] (0x 0012fc 4 0x2 *4).

La quinta forma: [Registro de registro * {1, 2, 4, 8} número inmediato]

Leer el valor de la memoria:

MOV EAX, 0x0012FFC4

MOV·ECX, 0x2

MOV·EDX, Deward PTR DS: [EAX ECX*4 1]

Paso 1: Instrucciones de entrada

p>

Paso 2: Presione F8 para observar y escribir la dirección de memoria 0x0012FFC4 en EAX

Paso 3: Presione F8 para observar y escribir el número inmediato 0x2 (0x00000002) en ECX;

Paso 4: Presione F8 para observar y escribir [EAX ECX * 4 1] (0x 0012fc 4 0x 2 * 4 1) en EDX.

Escribir datos en memoria:

MOV EAX, 0x0012FFC4

MOV·ECX, 0x2

MOV·Deward PTR DS : [EAX ECX*4 1], EDX

El primer paso: escribe la dirección de memoria 0x0012FFC4 en EAX;

El segundo paso: escribe el número inmediato 0x2 (0x00000002) en ECX;

Paso 3: Escriba datos EDX en [EAX ECX * 4 1] (0x 0012fc 4 0x 2 * 4 1).

Cada título tiene significado. Actualmente, sólo existen cinco formas de direcciones de memoria. El formato general de estos formularios de cinco minutos es: [Registro*Número Número Instantáneo].

Algunas personas definitivamente se preguntarán: ¿Por qué solo hay cinco representaciones y los factores de escala solo pueden ser 1, 2, 4 y 8? La razón más probable es (adivina): la computadora solo reconoce el lenguaje de máquina, por lo que tenemos que traducir la representación de la dirección de memoria al lenguaje de máquina para lograrlo. Cuantas más combinaciones haya, más complicado será traducir, por lo que los técnicos de CPU tienen que formular una regla: solo se pueden usar cinco representaciones, de lo contrario no se pueden reconocer. Si está interesado y necesita saber más, puede consultar el documento técnico de Intel.

Nota:

1. Si agrega un número inmediato 0xFFFFFFFF, es probable que el resultado de la operación exceda el rango de 32 bits de 0xFFFFFFFF y la computadora solo retendrá los últimos 32. bits.

2. Si el factor de la escala de multiplicación es 0, entonces la computadora ignorará automáticamente 0. Aunque el resultado de ejecución es el mismo que el factor de escala de multiplicación de 1, es un resultado de ejecución incorrecto.

3. Recuerda que el factor de escala solo puede ser 1, 2, 4 u 8.

Piénselo: ¿qué sucede si la dirección de memoria calculada supera los 32 bits?