Sie sind auf Seite 1von 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.

v:

Puntero

N v[0] v[1] v[2] v[3]

Tamao del vector

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 dd dd aux N N ; puntero ; tamao ; elementos del vector

DUP (?)

La sentencia a = v[j] se traducira en TASM as: MOVZX MOV MOV MOV MOV EBX, ES, ESI, EAX, word ptr v v+2 j ES:4[EBX+ESI*4] ; ; ; ; ; tomo el desplazamiento tomo el segmento ndice el desplazamiento 4 es para saltar el tamao del vector

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.

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. mat:

Puntero

N
Puntero a fila 0 Puntero a fila 1 Puntero a fila 2 Puntero a fila 3

Nmero de filas M
mat [0][0]

M
mat [1][0] mat [1][1] mat [1][2] mat [1][3]

mat [0][1] mat [0][2] mat [0][3]

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 MOV ES, mat+2 MOV ESI, i ; tomo el desplazamiento ; tomo el segmento ; 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

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];

Das könnte Ihnen auch gefallen