5.7 Acceso a Elementos de Arreglos Multidimencionales

 

 

No hay operador [ ] en ensamblador como en C. Para acceder a un elemento del arreglo, se debe calcular la dirección. Considere las dos definiciones siguientes de arreglos:

array1            db        5, 4, 3, 2, 1      ; arreglo de bytes

array2                         dw       5, 4, 3, 2, 1     ; arreglo de palabras

A continuación algunos ejemplos usando estos arreglos.

1 mov al, [array1] ; al = array1[0]

2 mov al, [array1 + 1] ; al = array1[1]

3 mov [array1 + 3], al ; array1[3] = al

4 mov ax, [array2] ; ax = array2[0]

5 mov ax, [array2 + 2] ; ax = array2[1] (NO array2[2]!)

6 mov [array2 + 6], ax ; array2[3] = ax

7 mov ax, [array2 + 1] ; ax = ??

 

En la línea 5, se referencia el elemento 1 del arreglo, no el segundo. ¿Por qué? Las palabras son unidades de 2 bytes, para moverse al siguiente elemento del arreglo uno se debe mover 2 bytes adelante, no uno. La línea 7 leerá un byte del primer elemento y uno del segundo. En C, el compilador mira el tipo de apuntador para determinar cuántos bytes mover en una expresión aritmética para que el programador no tenga que hacerla. Sin embargo el ensamblador es el que calcula el tamaño de los elementos del arreglo cuando se mueve de elemento en elemento.

 

Inicio