¿Cómo obtengo el valor de una RAM por una dirección dada? [cerrado]

-4

Creo que sé cómo funciona la RAM, pero tengo un ejercicio en el que tengo que leer en la dirección 0x ????

Además, solo me interesa qué valor se devuelve después del comando de lectura. Por ejemplo:

Hay una RAM y toda la RAM está llena (por lo que se repite)

 $22476BFF 273C22FF. . .

Ahora leo el contenido en la dirección "0x2901": (Aquí está mi código, pero en realidad solo necesito una respuesta teórica)

Loop: LD R17,Y+  // Y =0x2901
      ADIW Z,4
      JMP Loop

Descripción: (puedes omitir)

En este código leí con LD R17, Y + el contenido del Registro de la RAM con la dirección de Y y guardo este contenido en el registro R17. (Espero que me entiendas).

Solución:

El contenido que se leyó es "0x47", pero no estoy seguro de por qué.

¿Podría ser que si Y es "0x2900" el contenido sería "0x22"? Si es así, ¿cuál sería en la dirección "0x2908"? (= 0x22, porque se está repitiendo?)

Estoy usando Eclipse como plataforma. No creo que sea necesario, pero estoy usando una placa AVR ATMega162.

O quizás conozcas un ejemplo que sea similar a ese.

Gracias por la ayuda

    
pregunta Deweird

2 respuestas

0

una dirección no es diferente de la dirección de las casas en una calle o en el mundo. con la dirección correctamente formada puede encontrar una casa individual, llamar a la puerta y encontrar lo que está almacenado dentro.

ram es así, pero más simple, el contenido de una dirección tiene un tamaño fijo, un ram de 8 bits de ancho, el contenido es de 8 bits. de forma aproximada, la confusión puede venir porque la misma dirección PUEDE ser accesible como una lectura de 16 bits o una lectura de 32 bits o una lectura de 64 bits. y luego los endios se involucran. grandes finales y pequeños finales.

sí, si asumes que tu ram está lleno con un patrón de repetición de 8 bytes, en teoría si lees un byte en la dirección K, entonces el byte en la dirección K + 8 tendrá el mismo valor, siempre y cuando esas direcciones Están en el espacio que contiene el carnero. Si ese espacio de direcciones es para periféricos o un espacio que no tiene nada detrás, obtendrás algo más.

así que esto es una cosa endiana, pero si la dirección K tiene el valor 0x47 y K + 1 tiene 0x6B, entonces K-1 debería tener 0x22. pero si K + 1 tiene 0x22, entonces K-1 debería tener 0x6B. Es decir, si estás hablando genéricamente, teóricamente. Su plataforma avr específica la respuesta es conocida. aunque no ha mostrado sus datos en un formato comprensible, por lo que aún está sujeto a interpretación.

    
respondido por el old_timer
0

Debe pensar en la RAM como una pared gigante llena de agujeros y los agujeros están numerados con etiquetas, es decir, su dirección.

Cuando programa su controlador, todas sus variables se lanzan a estos cubículos en RANDOM . No sabes qué se almacena en la RAM hasta que accedes a esa memoria. En general, las cosas como cadenas o matrices, se mantienen juntas, pero no siempre es el caso para cada RAM.

Por lo tanto, suponer que el byte 0x22 estará en la dirección de ubicación 0x2900 no es seguro, A MENOS QUE , lo pones tú mismo.

    
respondido por el R. Johnson

Lea otras preguntas en las etiquetas