IIC2343 / Syllabus-2024-2

44 stars 0 forks source link

instrucciones con labels etapa 2 #116

Open amandasolb opened 3 weeks ago

amandasolb commented 3 weeks ago

Tenia una duda sobre los tests que están en el sussbembler, hay unas instrucciones que involucran labels como CMP A, label o MOV B, label. Mi duda va con que si tenemos que implementar esas instrucciones y como se haría eso.

Javipipi commented 3 weeks ago

¡Hola!, instrucciones como CMP A, label y MOV B, label es lo mismo que CMP A, Lit y MOV B, Lit. En este caso la posición del label es el valor del literal, por ejemplo en este código:

DATA:
t0 1
t1 9
t2 4
CODE:
MOV B, t2

B va a valer 2.

amandasolb commented 3 weeks ago

holaa, me referia a labels como por ejemplo en el test call hay una funcion (func2) y en algun momento en el codigo aparece CMP A, func2. No hay nada en el DATA ademas. Muchas gracias.

Javipipi commented 3 weeks ago

Cuando pones un label, el label está asociado a una dirección y no a un valor, si la función func2 está en la posición 10 de tu código, entonces estarías haciendo CMP A, 10.

rinsoni commented 3 weeks ago

Pero no se supone que los labels no tienen direccion asociada? Es decir, estos son solo referencias para la instruccion que viene justo despues de los labels. Por ejemplo si tenemos el siguiente codigo: CODE: MOV A, 3 MOV B, 5 oli: ADD A, B MOV B, 1

Al final, lo único asociado a memoria sería MOV A,3 —> Direccion 0. MOV B,5 —> Direccion 1. ADD A, B —> Direccion 2. MOV B, 1—> Direccion 3. Y según lo que estoy entendiendo, quieren que consideremos el label, es decir: MOV A,3 —> Direccion 0. MOV B,5 —> Direccion 1. oli —> Dirección 2 ADD A, B —> Direccion 3. MOV B, 1—> Direccion 4. Pero eso no tendría sentido, según lo que hemos visto en clases

Javipipi commented 3 weeks ago

Con dirección me refiero al valor del PC donde está esa subrutina. Como tú mismo dices, los labels son referencias para la instrucción que viene, pero esa referencia está asociada al valor del PC donde se ubica esa subrutina, tu primer ejemplo está correcto, porque el label "oli" te va a referenciar la posición de la siguiente instrucción, en este caso el ADD A, B. Si luego hicieses un MOV B, oli, B valdrá 2, porque tu ADD A, B está en la posición 2.