# ARRAYS

La variable también podría inicializarse con algún valor específico. El valor inicializado se puede especificar en forma hexadecimal, decimal o binaria.

Por ejemplo, podemos definir una palabra variable 'months' de cualquiera de las siguientes maneras:

```
months dw 12
months dw 0CH
months dw 0110B
```

Las directivas de definición de datos también se pueden usar para definir una matriz unidimensional. Definamos una matriz unidimensional de números.

```
NUMBERS	DW  34,  45,  56,  67,  75, 89
```

La definicion anterior declara una matriz de seis palabras, cada una inicializada con los numeros 34, 45, 56, 67, 75, 89. Esto asigna 2x6 = 12 bytes de espacio de memoria consecutivo. La direccion simbolica del primer numero sera numbers y la del segundo numero sera numbers + 2 y asi sucesivamente.

Tomemos otro ejemplo. Puede definir una matriz denominada inventario de 8 inicializar todos los valores con cero, como:

```
inventory dw 0
          dw 0
          dw 0
          dw 0
          dw 0 
          dw 0 
          dw 0
          dw 0
```

Y se pueder abrebiar como :&#x20;

```
inventory dw 0, 0, 0, 0, 0 ,0 ,0
```

La directiva TIMES tambien se puede usra para multiples inicializaciones con el mismo valor. Usando tiempo la matriz inventario se puede definir como:

```
inventory times 8 dw 0
```

`EJEMPLO:`

El siguiente ejemplo demuestra los conceptos anteriores al definir una matriz x de 3 elementos, que almacena 2,3 y 4. Agrega los valores en la matriz y muestra la suma 9.

```
section .data
global x
x:
    db 2
    db 3                ;Toda la section .data almcena el array
    db 4

sum:
    db 0

section .text
    global _text:

_start:                  ; Iniciamos el programa
    
    mov eax, 3           ; Iniciamos eax en 3 para que lea
    mov ebx, 0           ; El ebx en 0 ya que tendra el array
    mov ecx, x           ; Especificamos la direccion de la suma
    
top: add ebx, [ecx]      ; Pasamos el valor de ecx a ebx

    add ecx, 1           ; Aumentamos 1 para el siguiente elemento
    dec eax              ; Decrementamos 1 
    jnz top              ; El bucle se esta hasta que eax sea 0
    
done:
    add ebx, '0'         ; Una ves hecha la suma pasamos a ASCII 
    mov [sum], ebx

display:
    mov edx, 1
    mov ecx, sum
    mov ebx, 1
    mov eax, 4
    int 0x80
    
     mov eax, 1
     int 0x80
          
```
