2010-01-08 23 views

Respuesta

34

[L1] significa el contenido de la memoria en la dirección L1. Después de ejecutar mov al, [L1] aquí, el registro al recibirá el byte en la dirección L1 (la letra 'w').

+4

Gracias por su respuesta, estoy empezando a aprender asm. Si entiendo esto correctamente, "mov, [L1]" movería 'w' a al, y "mov eax, L1" movería la dirección de L1 a eax. ¿Es eso correcto? – joek1975

+4

sí. y si hiciste 'mov ebx, L1 - mov al, [ebx]' entonces 'al' sería 'w' en ese caso también. – Earlz

+3

La excepción a esto es LEA. –

5

Los corchetes significan la desreferencia de una dirección. Por ejemplo

mov eax, [1234]

medios, MOV los contenidos de dirección de 1234 a EAX. Por lo tanto:

1234 00001 

EAX contendrá 00001.

1

Al igual que con muchos lenguajes de ensamblador, esto significa indirecta. En otras palabras, el primer mov carga al con el contenido de L1 (el byte 'w' en otras palabras), no la dirección.

Su segundo mov carga actualmente eax con la dirección de L1 y se puede eliminar la referencia más adelante que para obtener o establecer su contenido.

En ambos casos, L1 se considera conceptualmente como la dirección.

1

Significan que en lugar de mover el valor del registro o un valor numérico L1 en el registro al, tratar el valor del registro o un valor numérico L1 como un puntero en la memoria, buscar el contenido de esa dirección de memoria, y mover que los contenidos en al.

En este caso, L1 es una ubicación de memoria, pero la misma lógica se aplicaría si un nombre de registro fue en los soportes:

mov al, [ebx] 

también conocido como una carga.

0

Indica que el registro debe usarse como un puntero para la ubicación real, en lugar de actuar sobre el registro en sí.

25

Simplemente significa obtener la memoria en la dirección marcada con la etiqueta L1.

Si te gusta C, y luego pensar en ello como esto: [L1] es lo mismo que *L1

+0

esto puede ser confuso ya que en C '* p' significa que _dereferencia p y deja de recuperar caracteres cuando llegue a' \ 0'_ y no solo a_dereferencia el primer carácter de la secuencia/cadena apuntada por p_ – user2485710

+11

@ user2485710 No, '* p' significa desreferencia el carácter señalado por' p'. Las cadenas no tienen nada que ver con esto. – Navin

20

Operandos de este tipo, tales como [ebp], son llamados memory operands.

Todas las respuestas aquí son buenos, pero no veo que ninguno habla de la salvedad en el seguimiento de esto como una regla rígida - si los soportes, a continuación, eliminar la referencia, , excepto cuando es la instrucción lea.

lea es una excepción a la regla anterior. Decir que hemos

mov eax, [ebp - 4] 

El valor de ebp se resta por 4 y los paréntesis indican que el valor resultante se toma como una dirección y el valor que reside en esa dirección se almacena en eax. Sin embargo, en caso de lea 's, los soportes podrían no significa que:

lea eax, [ebp - 4] 

El valor de ebp se resta por 4 y el valor resultante se almacena en eax. Esta instrucción solo calcularía la dirección y almacenaría el valor calculado en el registro de destino. Ver this post para más detalles.

Cuestiones relacionadas