⚙️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 :

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
          

Última actualización