MIPS: ¿el editor MARS no muestra el valor correcto para la cadena ASCII?

3

Estoy usando el simulador de MARS para explorar la CPU de MIPS. Tengo un programa de montaje simple:

.data
ascii1: .asciiz "8C@2"

Espero que el valor en la dirección de memoria para ascii1 sea 0x38434032 (el equivalente hexadecimal para el patrón de bits ascii para "8C @ 2"). Pero no lo es. Aquí hay una captura de pantalla de lo que muestra MARS: enlace

Alguien puede explicar por qué el valor en 0x1001000 no es 0x38434032.

    
pregunta Brian Carlton

2 respuestas

5

Ha encontrado el concepto de orden de bytes Big-Endian y Little-Endian .

Usted espera:

0x38434032

Pero tengo:

0x32404338

Tenga en cuenta que los bytes están simplemente en orden inverso:

38 43 40 32
32 40 43 38

Wikipedia lo explica brevemente:

  

En computación, endianness es el ordenamiento de subunidades direccionables individualmente (palabras, bytes o incluso bits) dentro de una palabra de datos más larga almacenada en la memoria externa. Los casos más típicos son el ordenamiento de bytes dentro de una palabra de 16, 32 o 64 bits, donde a menudo se hace referencia al endianness simplemente como orden de bytes. 1 El contraste habitual es primero entre el byte más versus el menos significativo, llamados big-endian y little-endian respectivamente.

MIPS es generalmente Big Endian, mientras que los procesadores a los que puede estar acostumbrado (como Intel) son Little Endian.

Muchos procesadores le permiten establecer si son big endian o little endian en algunos bits de configuración.

    
respondido por el Adam Davis
1

Esto se puede leer en el tema de ayuda 'depuración': "Todos los datos se almacenan en el orden de bytes little-endian (cada palabra consiste en el byte 3 seguido del byte 2, luego 1 y luego 0). Tenga en cuenta que cada palabra puede contener 4 los caracteres de una cadena y esos 4 caracteres aparecerán en el orden inverso al de la cadena literal ".

    
respondido por el Fredy Rivera

Lea otras preguntas en las etiquetas