Valor numérico en decimal de la palabra de 32 bits almacenada en la dirección 1000H

0

Estoy un poco confundido sobre cómo abordar estas tres preguntas.

Suponiendo que la alineación aritmética y operando del complemento de dos, proporcione el valor numérico en decimal de la palabra de 32 bits almacenada en la dirección 1000H y de cada media palabra de 16 bits almacenada en las direcciones 1000H y 1002H en (1) Little Endian y ( 2) Grandes convenciones de almacenamiento de Endia.

1000H:  23H
1001H:  F7H
1002H:  32H
1003H:  AB

Preguntas:

  1. Para la primera pregunta, tenemos 23H a 1000H. ¿Es esta una palabra hexadecimal? ¿Para qué sirve la H? 23 serían 35 en decimal

  2. ¿Pero el complemento de dos supondría binario? 35 en binario sería 11011101. También entiendo big vs little endian, pero me falta algo aquí.

pregunta Carlo

1 respuesta

5

Supongo que la "H" al final de cada número indica una representación hexadecimal. Usaré subíndices como \ $ 23_ {16} \ $, \ $ 35_ {10} \ $ y \ $ 00100011_ {2} \ $ para representar hexadecimal, decimal y binario, respectivamente.

En la memoria de la computadora, los datos se direccionan en límites de bytes (8 bits). Cuando un tipo de datos de más de 8 bits se almacena en la memoria, abarcará tantas ubicaciones de memoria de 8 bits como sea necesario para adaptarse a su tamaño.

La primera parte de la pregunta pregunta cuál es el equivalente decimal del entero de 32 bits que se almacena en la dirección \ $ 1000_ {16} \ $. Puede traducir eso a "¿Cuál es el equivalente decimal del entero de 32 bits que comienza en la dirección \ $ 1000_ {16} \ $?" Como es de 32 bits, sabes que se extenderá sobre el espacio de memoria de cuatro bytes. Por lo tanto, la representación de la memoria contigua del entero de 32 bits es \ $ 23F732AB_ {16} \ $.

En Big Endian, no tenemos que cambiar el orden de los bytes para representar el valor real. Pero como los números se almacenan como enteros con signo (complemento a dos), necesitamos verificar el primer bit para ver si el número es negativo. El MSB es \ $ 23_ {16} \ $, que en binario es \ $ {\ color {rojo} 0} 0100011_ {2} \ $. El bit de signo es bajo, por lo que el valor es positivo y no es necesaria la conversión del complemento a dos:
$$ 23F732AB_ {16} = 603402923_ {10} $$

La representación de Little Endian del entero es \ $ AB32F723_ {16} \ $. En este caso, el MSB es \ $ AB_ {16} \ $, que es \ $ {\ color {rojo} 1} 0101011_ {2} \ $. El bit de signo está establecido, por lo que este es un número negativo. Para representarlo en decimal, primero debemos "un-dos complementarlo" restando uno y volteando todos los bits. Esto da como resultado una representación hexadecimal de \ $ 54CD08DD_ {16} \ $. Traducir al decimal y agregar el signo negativo te da:
$$ AB32F723_ {16} = - 1422723293_ {10} $$

Recuerde que los valores numéricos se pueden representar libremente en la base que desee. Puede tomar el complemento a dos de un número hexadecimal al igual que un número binario. La razón por la que probablemente esté un poco confundido es que le enseñaron un método para realizar el complemento de dos usando solo números binarios. Pero eso fue solo por conveniencia. Simplemente, es más fácil realizar una operación complementaria de dos en la representación binaria de un número.

Los enteros de 16 bits funcionarán de manera similar a los de 32 bits. Cada una abarcará dos ubicaciones de memoria de 8 bits, por lo que tendrá \ $ 23F7_ {16} \ $ y \ $ 32AB_ {16} \ $ como dos valores separados de 16 bits. Dejaré el resto del trabajo para que pueda trabajar por su cuenta.

    
respondido por el Dan Laks

Lea otras preguntas en las etiquetas