Una variable es una ubicación de memoria usada para un propósito especifico, con un nombre dado por el programador. Por ejemplo, el programa de encontrar el mayor numero tiene tres variables, de la cuál una es usada para almacenar el mayor numero encontrado.
Hay casos en que las variables, por ser mas que los registros, deben guardarse en memoria y, al momento de usarse, después cargarse en los registros. Esto es algo que se va a ver mas adelante.
Los índices, en este caso de la lista de números, son la posición en la que se encuentra cada numero. El primer elemento siempre tiene índice cero y a medida que se avanza por la lista, el índice incrementa en uno. Por eso mismo, al usar el registro %edi
como índice, se lo carga con el valor 0.
La siguiente instrucción es importante:
movl data_items(,%edi,4), %eax
Para entender esta instrucción hay que tener en cuenta que:
• data_items es la ubicación en memoria del comienzo de la lista de los números No es la lista, solo el primer elemento
• Cada elemento tiene, para su almacenamiento, 4 ubicaciones de memoria, por que se declaro que los elementos de la lista
son de tipo .long
• %edi
esta almacenando 0 en este punto del programa.
Básicamente, lo que esta instrucción dice es "comienza en el principio de data_items, y toma el primero elemento, y recuerda que cada elemento tiene 4 ubicaciones de memoria para su almacenamiento. Entonces, guarda ese elemento de la lista en %eax
". La forma general es la siguiente:
movl BEGINNINGADDRESS(,%INDEXREGISTER,WORDSIZE)
Como %eax
esta almacenando en este momento al primer numero, es el mayor numero que encontró el programa, por lo que se lo copia en %ebx