Ayuda con ensamblador :$

zildjian

Holaholita mediavideros! Pues veréis, en una práctica que me han mandado en la uni, y tengo 2 dudas:

  ·Cómo declarar un vector de medida indefinida
  ·Cómo acceder a, por ejemplo v1[5]

Gracias por adelantado! :)

maRc

Depende de para que máquina sea el ensamblador.

zildjian

Para la Maquina Senzilla de la UPC :)

NeB1

es que depende de cual de los 3 tipos básicos de ensamblador es (con que pongas algunas instrucciones se sabe enseguida). No obstante, lo normal es:

el vector lo que es indefinido indefinido, no se puede declarar, puedes dejar un hueco en memoria todo lo grande que tu quieras, una variable en el primer hueco, y después, a partir de la direccion de memoria de la variable, le sumas 4 para ir accediendo a elementos consecutivos:

primero: .byte 10;
huecolibre: .space 80;

despues gastas la instrucción "la" para cargar la dirección en un registro (load address);

             la  $s0, primero(+0)    'primer elemento de vector
             la  $s0, primero(+4)    'segunda elemento de vector
             la  $s0, primero(+8)    'tercero elemento de vector
             la  $s0, primero(+12)    'cuarto elemento de vector

esto sería una forma, basada en el ensamblador del MIPS-R2000 con algún fallo porque no me acuerdo bien :P

mezod

#1 IA32, SISA, SISPF?

Fr4nk0

En ensamblador para el IA32, deberias reservar espacio en la pila, y luego acceder desde la marca de pila con el offset (dependiendo del tipo sera +4 para enteros, +8 double, etc). Para ser un vector sin dimension especifica, sería más complicado, pq si te pasas del espacio reservado y quieres meter otro, deberias mover todo lo que hay detras del vector un elemento más (cambiando la marca de pila y reservando espacio) y eso es más chungo.

En cuanto a lo de acceder si por ejemplo el vector empieza justo en la marca de pila ( vector EBP para ia32). pues si es de enteros (4 bytes) se accederia con EBP[4*n] , siendo n el número del elemento al que queremos acceder.

No sé si te ha quedado claro , ni si la duda del ensamblador es para el IA32, pero bueno, por si sirve.

zildjian

Pues no se qué ensamblador es, tiene comandos tipo: load, store, ADDI, SUBI, etc.

Kazjako

MIPS?

mezod

creo que habla del que usan en la FIB, sera SISA.
Como te dicen por aqui arriba creo recordar que no puedes declararte un vector indefinido.
Referente a lo segundo la verdad esque nor ecuerdo exactamente como iba en SISA (luego veras que SISA no sirve para nada...(por eso no lo recuerdo xD)), pero deberias sumar X siendo X la posicion del vector multiplicada por el tamaño de los elemento del vector a la posicion inicial del vector.

Ejemplo.. (ya te digo que no me acuerdo de la sintaxis)
En R0 tienes la posicion inicial del vector "vec".
vec es un vector de enteros. (mira que no me acuerdo si en SISA los enteros eran 2 bytes o 4...yo supondre que son 4 bytes...)
Quieres acceder a vec[7].

XOR R1,R1,R1 (meto un 0 en R1)
ADDI R1,R1,7 (meto un 7 en R1)
MUL R1,R1,4 (multiplico la posicion por el tamaño de los elementos del vector)**
ADD R0,R0,R1 (<-- o ADDI R0,R1,R0 segun como fuera el orden...)
LD R2,0(R1) (cargo la info)

** Si fuera chars seria x 1 (osea no haria falta hacer la multiplicacion)
** En SISA creo recordar que ints eran 2 bytes y longs 4 pero eso ya lo miras tu.. xd)

La verdad esq el codigo es mas ilustrativo que correcto asi que no te fies.

Tambien si te sirve de ayuda, creo recordar que LD R2,28(R1) No seria lo mismo porque estarias sumandole 28 a la info cargada de R1, en lugar de sumarle 28 a la direccion de R1 y luego cargarlo...como en los equivalentes de ia32. Pero mejor eso leelo de la documentacion que estoy menos convencido de lo q digo q....xd

dagavi

#9 respecto a #5 No es SISP-F es SISA-F al igual que SISA (que lo dirás por IC) no es solo SISA es SISA-I que se ejecutaba en el SISP-I

Y lo que dice #1 lo busqué en google tal y como lo dice:
Maquina Senzilla de la UPC

Saliendo esto:
http://webdiis.unizar.es/gaz/gaZ.papeles/ms.pdf

Ya que es raro que hablara de "Maquina Senzilla", se ve que es algo que creó Juanjo Navarro (coordinador y profesor de IC).

PD: #1 tu segunda pregunta es trivial de responder si lo piensas, para acceder a la posición i de un vector pues tendrás que situarte en el primer elemento y saltar hasta el i, obviamente se ve que es: @inicial + i*tamaño_elemento

mezod

joder hablar de Juanjo Navarro en el foro de mediavida ya me parece demasiado, los siento no puedo seguir xD

Riu

de ke asignatura estamos hablando para estar preparado para ponerme casco para cuando me metan la ostia..

BrUn

Que grande Juanjo! XD

Yo ya no me acuerdo de SISA, ni nada de eso :(. IA32 básico, lo máximo que llego.

Usuarios habituales

  • BrUn
  • Riu
  • mezod
  • Kazjako
  • zildjian
  • Fr4nk0
  • NeB1