Lo que voy a decir probablemente sean burradas, así que tomá todo súper con pinzas y desconfianza, y corrijanme todo lo necesario.
Si la palabra de memoria es de 8 bits, entonces tenés 1 byte en cada dirección de memoria. (No sabía que había distintas longitudes de palabra, y no se muy bien cómo afectará cambiar ese valor, igual).
Creo que la pregunta sería "¿Cuántos bytes podés direccionar con direcciones de 31 bits?". Si es esa, con 31 bits tenés 2^31
combinaciones distintas de cosas. Nos interesa que sean
distintas porque no podemos tener dos bytes de memoria con la misma dirección (¿a cuál de los dos nos referimos cuando pedimos leer/escribir esa dirección?). Es anecdótico, pero 2^31 es 2147483648 (2 Gigas, 2 * 2^30).
Entonces con 31 bits tenemos 2-giga cosas diferentes. En este caso, direcciones. Y como cada dirección habla de un byte distinto, entonces con 31 bits direccionamos 2 GB.
Qué diferencia hay entre los puntos 3 y 4, no lo entiendo. ¿Hablaba antes de las direcciones lógicas? ¿O es una pregunta trampa para que digas "los mismos"? Se me ocurre más lo primero.
Creo que en tu intento pusiste que las direcciones lógicas eran de 24 bits, así que hay que hacer el mismo procedimiento que en lo anterior, pero con esa nueva longitud. Animate a hacerlo y lo vemos
Por el punto 5, dice que la instrucción mide 4 bytes, entonces si la instrucción arranca en la dirección 2345:0100, la próxima instrucción empieza 4 bytes después, en 2345:0104.
Aunque me hace pensar un poco lo de acceder al dato en modo de acceso directo. Me parece que eso significa que la instrucción tiene un operando, y que acceso directo significa que el operando está en RAM y en el código está la dirección a la que ir a buscar el dato, entonces después de la instrucción no va la siguiente instrucción, si no la dirección del operando. Si las direcciones lógicas son de 24 bits (3 bytes), entonces en 2345:0100 está la instrucción (4 bytes), después en 0104 está el operando (3 bytes), y recién detrás de eso está la siguiente instrucción: 2345:0107.
Por último, si todos los objetos comparten el mismo segmento de memoria, entonces todos tienen el mismo identificador de segmento en la dirección: 2345. Si el offset es 200, entonces la dirección es 2345:0200.
Esa fue toda mi mentira, ya me corregirán en la fruta que mandé...