[2021][Febrero][Problema 6]

[2021][Febrero][Problema 6]

de Sebastian Herrera Recondo -
Número de respuestas: 1

Buenas, no termino de entender porque en la primera solución planteada se accede a la posicion de memoria de la rom haciendo una mascara de la dirección con 0xFFFF y en la segunda no. Tiene algo que ver con el signo de i? Entiendo que esa mascara lo unico que hace es quedarse con los 16 bits menos significativos, pero no entiendo porque es necesario hacerla si nunca se opera con el resto de los bits


En respuesta a Sebastian Herrera Recondo

Re: [Examen Febrero 2021][Ejercicio 6]

de Gustavo Brown -
En la primer solución el rango del bucle (i) va de -32768 a 32767, porque recorre los números válidos para la entrada (en complemento a 2).
Pero al momento de guardar el mapeo ROM[numero] = valor_calculado se debe indizar la ROM de acuerdo al código binario de 16 bits asociado al número. Es decir, un número que va de 0 a 65535. Pero los enteros en esa solución son de 20+ bits (la solución dice tomar por ejemplo 32 bits).
Entonces al aplicarle la máscara con 0xFFFF se está quedando con los 16 bits menos significativos del número a mapear que corresponden con la dirección de la ROM que se desea asignar.

Por ejemplo, suponete que i vale -1.
Si uno accediera directamente a ROM[i] estaría mal porque estaría accediendo a ROM[-1] y ROM va de 0 a 65535.
Pero si vemos el código binario en complemento a 2 de 32 bits de -1 es 0xFFFFFFFF. Al aplicarle la máscara con 0xFFFF el resultado da 0xFFFF (65535) es es el índice que hay que utilizar para mapear el caso i=-1.

En la segunda solución el bucle va de 0 a 65535 (es decir los indices de la ROM que quiere asignar).

Saludos,
    Gustavo