This video lecture discusses addressing modes in the ARM architecture. The purpose is to identify ARM addressing modes, present basic register and memory access instructions, and explain how to calculate addresses for data access in memory.
[R3]) indicates the address in the register, not the register's value itself. The ld and st instructions are used to load/store data based on the register's value.en este vídeo clase hablaremos sobre los modos de direccionamiento objetivos identificar los modos de direccionamiento de rm presentar instrucciones básicas de acceso a registro y memoria para acceder a los datos en la memoria necesitamos darle un nombre de lo contrario no podríamos referirnos a que datos queremos acceder afortunadamente una computadora tiene un nombre para cada byte de memoria es la dirección una dirección es un número de 32 bits que identifica cada vez es decir 8 bit de la memoria la memoria es como un arreglo de by donde cada byte tiene su propia dirección al cargar o almacenar datos desde asia la memoria necesitamos calcular una dirección esta dirección se puede calcular de muchas maneras cada una de estas formas se denomina modo de direccionamiento la arquitectura a rm se ha dirigido a sistemas embebidos estos sistemas generalmente se usan en productos de fabricación masiva teléfonos móviles televisores entre otros en este contexto los márgenes son muy ajustados por lo que un diseñador siempre tratará de usar la menor cantidad posible de componentes un centavo ahorrado en cientos de miles o incluso millones de dispositivo puede ser significativo un componente relativamente costoso es la memoria aunque cada día los precios disminuyen de todo modo en entornos de memoria restringida poder ahorrar la es bueno y el conjunto de instrucciones a rm fue diseñado con este objetivo en mente en la arquitectura a rm los accesos a memoria se hacen mediante instrucciones específicas ld efe y str luego veremos otras variantes el resto de instrucciones toman operando desde registro o valores inmediatos sin excepciones en este caso la arquitectura nos fuerza a que trabajemos de un modo determinado primero cargamos los registros desde memoria luego procesamos el valor de estos registros con el amplio abanico de instrucciones del rm para finalmente volcar los resultados de este registro a memoria existen otras arquitecturas como la intel x86 donde las instrucciones de procesado nos permiten leer o escribir directamente de memoria ningún método es mejor que otro todo es cuestión de diseño normalmente se opta y direccionamiento a memoria en instrucciones de procesado en arquitectura con un número reducido de registro donde se emplea la memoria como almacén temporal en el caso de aire m caso disponemos de suficiente registro por lo que podemos hacer el procesamiento sin necesidad de interactuar con la memoria lo que por otro lado también es más barato veamos cada uno de los modos de direccionamiento direccionamiento por registro este modo involucra el uso de registros que contienen los datos a manipular la memoria principal no es accedida en este modo como consecuencia es relativamente rápido las instrucciones en este modo utilizan 4 bits para identificar el registro en binario desde 0 0 0 0 hasta 11 11 y el decimal desde 0 hasta 15 que corresponde con el registro r 0 ar-15 veamos una instrucciones utilizando el modo registro la primera línea de código que se muestra en la diapositiva copia el contenido del registro r2 al registro r7 la segunda línea suma el contenido de los registros r1 r3 y el resultado se guarda en r1 y la tercera línea realiza una resta el contenido del registro el r2 es restado 17 y el resultado se almacena en r 7 observemos que para los tres casos el primer operando representa el registro destino y los otros los operan 2 y direccionamiento inmediato en modo de direccionamiento inmediato el operador origen es una constante en este modo cuando la instrucción es compilada el operador viene inmediatamente después del boicot de la instrucción por esta razón en este modo la instrucción se ejecuta rápidamente por ejemplo las siguientes instrucciones utilizan direccionamiento de inmediato la primera 9 o copia el valor excesiva el 25 en el registro r 9 la segunda instrucción 9 o copia el valor decimal 62 en el registro r 3 la última instrucción suma el número decimal 40 al contenido del registro rc y el resultado es guardado en el mismo registro en el modo registro indirecto se utiliza un registro para contener la dirección de memoria donde el valor del operador está almacenado la función de registro es similar a un puntero en otros lenguajes de programación por ejemplo veamos la siguiente línea de código en la primera línea la instrucción str almacena el contenido del registro r5 en la dirección de memoria principal apuntada por rca observemos el uso de corchetes para indicar que no queremos el valor de registro de rey sino el valor de la memoria al que es apuntado por este en la segunda línea la instrucción ld efe carga el registro es de 10 el valor que se encuentra en una dirección de memoria dicha dirección está contenida en el registro r 3 nuevamente note el uso de corchete para indicar que registro de la r-3 es un puntero es importante notar el uso de el ere para colocar o mover un valor hacia un registro en lugar de utilizar la instrucción móvil esto se debe a que la instrucción modo no puede trabajar con valores de 32 bit si la dirección de memoria o el valor a utilizar tiene más de 8 bit debemos utilizar ld efe usando el modo registro indirecto podemos implementar los diferentes punteros dado que los registros son de 32 bits de ancho pueden almacenar cualquier dirección de memoria veamos un código sencillo ence comparándolo con su equivalente en ensamblador es importante notar que en cee podemos escribir directamente un valor a memoria en ensamblador debemos hacerlo a través de los registros por eso el valor 25 primero se carga al registro r 0 luego se utiliza la instrucción str para almacenar el valor 25 que está en r 0 en la dirección de memoria en una sesión posterior veremos el uso de las diferentes instrucciones para acceder a la memoria entre ellas srb porque dependiendo del tipo de dato apuntado se puede utilizar str stv etcétera h en este ejemplo como en el dato apuntado es de tipo char 8-bit se utiliza str hasta el momento hemos revisado los modos de direccionamiento más importante existen otras variantes derivadas de estos por ejemplo el direccionamiento inmediato con desplazamiento o rotación el cual permite realizar operaciones intermedias puede observar en la diapositiva que se realizan tres operaciones una multiplicación por dos otra por cuatro y una división entre ocho veremos más detalle de esta en la expresión de operaciones sobre bits en el direccionamiento a memoria sin actualizar registros puntero permite realizar operaciones sobre la dirección de memoria lo común será sumar una cantidad de bay a una dirección base para acceder a otra dirección de memoria esto es muy utilizado en el manejo de arreglo y lo veremos con más detalle en sesiones posteriores existe otro modo el direccionamiento a memoria actualizado registro puntero en este modo de direccionamiento el registro que genera la dirección se actualiza con la propia dirección de esta forma podemos recorrer un arreglo con un solo registro sin necesidad de hacer el incremento del puntero en una instrucción aparte hay dos métodos de actualizar dichos registros antes de ejecutar la instrucción pre indexado o después de la misma post indexado su detalle también lo veremos en la sección de arreglos cambia tu pensamiento y cambiarás tu mundo hasta la próxima