Está en la página 1de 3

Los vectores en JAVA

En JAVA, un vector se declara escribiendo:


static int v [] = new int [N]
En este caso se trata de un vector de N enteros de 32 bits. De forma similar se declararan vectores de
byte, short, long, char boolean. La representacin del vector en la memoria del computador
se realiza como muestra la figura.











En la direccin v hay un puntero que apunta a una posicin de memoria en la que est el tamao del
vector (siempre 4 bytes) seguido de los elementos del vector.

En TASM el vector se declarara as:

.data
v dd aux ; puntero
aux dd N ; tamao
dd N DUP (?) ; elementos del vector

La sentencia a = v[j] se traducira en TASM as:

MOVZX EBX, word ptr v ; tomo el desplazamiento
MOV ES, v+2 ; tomo el segmento
MOV ESI, j ; ndice
MOV EAX, ES:4[EBX+ESI*4] ; el desplazamiento 4 es para
; saltar el tamao del vector
MOV a,EAX

El tamao del vector puede referenciarse en JAVA escribiendo v.length. As, para recorrer todo el
vector, se puede escribir:
for (i=0; i < v.length; i++)
Este tipo de vectores se denominan estticos, porque antes de iniciarse la ejecucin se reserva, en el
segmento de datos, un espacio de memoria para todo el vector.

En JAVA es posible trabajar con vectores dinmicos. En este caso, en el momento de la declaracin de
datos escribiramos nicamente:
v int [];
Antes de iniciar la ejecucin, se reservara en memoria nicamente un espacio para el puntero al vector
(todava no sabemos el tamao que tendr el vector). En el cdigo del programa podemos escribir:
v = new int [N];
En el momento de ejecutar esta sentencia el computador buscara en memoria un espacio libre de
(N+1)*4 bytes (los que se necesitan para albergar el tamao del vector y sus N elementos de tipo int),
e inicializara el puntero que se reserv antes de empezar la ejecucin con la direccin lgica a partir de
la cual est el espacio libre que albergar el vector.


v: Puntero
N
v[0]
v[1]
v[2]
v[3]
Tamao del vector


Las matrices en JAVA

En JAVA, una matriz se declara escribiendo:
static int mat [][] = new int [N][M]
En este caso se trata de una matriz de N x M enteros de 32 bits. De forma similar se declararan
matrices de byte, short, long, char boolean. La representacin del vector en la memoria del
computador se realiza como muestra la figura.

















En la direccin mat hay un puntero que apunta a una posicin de memoria en la que est el nmero de
filas y un vector de punteros a las filas. Cada uno de esos punteros apunta a una posicin de memoria
en la que est el nmero de elementos de la fila (nmero de columnas de la matriz) seguido de los
elementos de la fila.

En TASM, una matriz de 2 filas y 4 columnas se declarara as:
.data
mat dd aux ; puntero
aux dd 2 ; nmero de filas
dd fila0 ; punteros a las filas
dd fila1
fila0 dd 4 ; nmero de elementos de la fila
0
dd 4 DUP (?) ; fila 0
fila1 dd 4
dd 4 DUP (?)


La sentencia a = mat[i][j] se traducira en TASM as:

MOVZX EBX, word ptr mat ; tomo el desplazamiento
MOV ES, mat+2 ; tomo el segmento
MOV ESI, i ; ndice de la fila
; tomo el puntero a la fila i
MOVZX EAX, word ptr ES:4[EBX+ESI*4]
MOV ES, ES:6[EBX+ESI*4]
MOV ESI, j
MOV EAX, ES:4[EAX+ESI*4]; acceso al elemento j de la fila i
MOV a, EAX



mat: Puntero
Nmero de filas
N
Puntero a fila 0
Puntero a fila 1
Puntero a fila 2
Puntero a fila 3
M
mat [0][0]
mat [0][1]
mat [0][2]
mat [0][3]
M
mat [1][0]
mat [1][1]
mat [1][2]
mat [1][3]

Ejercicios

Traducir a TASM la siguiente sentencia JAVA (A y B son vectores de int):
for (i = 0; i < N; i++)
A[i] = A[i] + B[i];























Traducir a TASM la siguiente sentencia JAVA (A es un vector de int y mat es una matriz de
byte):
for (i = 0; i < N; i++)
A[i] = A[i] + mat[4][i];

También podría gustarte