<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>WebHome/ASMIntroduccionARM/ASMInstruccionesCyAARM</title><revhistory><revision><revnumber>10</revnumber><date>2010-09-29 02:15:42</date><authorinitials>DanielMarchetti</authorinitials></revision><revision><revnumber>9</revnumber><date>2010-09-09 13:30:43</date><authorinitials>GuillermoSteiner</authorinitials><revremark>Se cambia nombre desde &quot;ASMInstruccionesCyAARM&quot;</revremark></revision><revision><revnumber>8</revnumber><date>2010-08-09 11:17:15</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>7</revnumber><date>2010-08-09 11:15:50</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>6</revnumber><date>2010-06-08 18:26:17</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>5</revnumber><date>2010-06-08 18:25:30</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>4</revnumber><date>2010-06-04 17:31:08</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>3</revnumber><date>2010-06-04 17:29:35</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>2</revnumber><date>2010-06-04 17:24:47</date><authorinitials>GuillermoSteiner</authorinitials></revision></revhistory></articleinfo><section><title>Instrucciones de Carga y Almacenamiento en Memoria</title><para>Estas instrucciones permiten cargar o almacenar un registro desde o hacia la memoria, todas las instrucciones de procesamiento de datos realizan operaciones aritméticas y lógicas pero siempre entre registros, en el momento de requerir realizar estas operaciones entre variables, deberemos primero cargar las mismas desde la memoria con una instrucción de <emphasis>Carga en Memoria</emphasis>, realizar las operaciones aritméticas o lógicas requeridas siempre entre registros y finalmente guardar los resultados en memoria mediante una instrucción de <emphasis>Almacenamiento en Memoria.</emphasis> </para><para>La arquitectura ARM soporta dos tipos de instrucciones de carga y almacenamiento de un registro. </para><itemizedlist><listitem><para>Cargar o Almacenar un word (32bits) o un byte sin signo (8bits)  </para></listitem><listitem><para>Cargar o Almacenar medio word sin signo o con signo (16bits) o extender un byte con signo. (todas las operaciones que operan con signo, se refieren únicamente a operaciones de carga no de almacenamiento)  </para></listitem></itemizedlist><para>En ambos tipos de instrucciones, siempre existe un registro base y un offset para formar la dirección de la memoria. </para><para><emphasis role="strong">Registro base</emphasis>, puede ser cualquier registro de propósitos generales, incluyendo el PC, esto permite acceder en forma relativa al PC y hacer al código independiente de la posición en donde se ubique. </para><para><emphasis role="strong">Offset o Corrimiento</emphasis>, tenemos varias alternativas </para><itemizedlist><listitem><para><emphasis role="strong">Inmediato</emphasis>, el offset es un numero sin signo, el cual puede ser sumado o restado al registro base, el offset inmediato se usa para acceder a datos que están a una distancia fija del comienzo de los datos.Para el caso de acceso a word sin signos o bytes el offset es un numero de 12 bits, para el caso de medio word o bytes con signo, el numero es de 8 bits.  </para></listitem><listitem><para><emphasis role="strong">Registro</emphasis>, el offset es cualquier registro de propósitos múltiples (excepto en PC), este registro puede ser sumado o restado al registro base, este método es muy usado para acceder a array o vectores.  </para></listitem><listitem><para><emphasis role="strong">Registro escalado</emphasis>, el offset es un registro de propósitos múltiples, desplazado una cantidad fija de bits, el valor resultante, es sumado o restado al registro base, el método de desplazamiento es el mismo utilizado en las instrucciones de procesamiento de datos, siendo el desplazamiento a la izquierda el mas utilizado, lo que permite acceder de esta forma a array de estructuras, escalando el offset por el tamaño de la estructura.Los registros escalados, solo pueden utilizarse en instrucciones para acceso a word o bytes sin signo.  </para></listitem></itemizedlist><para>Además el offset y el registro base, interactúan de tres formas distintas. </para><itemizedlist><listitem><para><emphasis role="strong">Direccionamiento por corrimiento</emphasis>, la dirección de memoria está formada por la suma o resta del corrimiento con el registro base.  </para></listitem><listitem><para><emphasis role="strong">Direccionamiento pre-indexado</emphasis>, la dirección de memoria está formada de la misma forma que la anterior, pero esta dirección de memoria calculada, es escrita luego en el registro base.  </para></listitem><listitem><para><emphasis role="strong">Direccionamiento post-indexado</emphasis>, se toma el dato de la dirección apuntada por el registro base y luego se actualiza este sumándole o restándole el corrimiento.  <emphasis role="strong">IMPORTANTE</emphasis> en este modo, si el offset es un registro, este nunca puede ser el mismo que el registro destino, los resultados en este caso son impredecibles.  </para></listitem></itemizedlist><section><title>Carga y Almacenamiento de word o bytes sin signo</title><para>Son las instrucciones que: </para><para>Cargan un valor simple de la memoria de tamaño word o byte y lo escriben en un registro de propósitos generales. </para><para>Almacenan el valor que posee un registro de propósitos generales a la memoria ocupando un byte o un word. </para><para>Tienen el siguiente formato. </para><screen><![CDATA[LDR||STR{cond}{B}{T} Rd,dirección]]></screen><para><emphasis role="strong">cond</emphasis> indica la condición para ejecutar la instrucción. </para><para><emphasis role="strong">B</emphasis> indica si opero con Byte en lugar de Word </para><para><emphasis role="strong">T</emphasis> indica si el acceso se efectúa con los privilegios de user, esto permite desde cualquier modo con privilegios acceder a memoria simulando un privilegio restringido (User Mode), este modo únicamente esta habitado para el modo de direccionamiento post-indexado </para><para><emphasis role="strong">Rd</emphasis> Registro destino </para><para><emphasis role="strong">dirección</emphasis> está formada por el registro base y el offset. </para><informaltable><tgroup cols="32"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><colspec colname="col_3"/><colspec colname="col_4"/><colspec colname="col_5"/><colspec colname="col_6"/><colspec colname="col_7"/><colspec colname="col_8"/><colspec colname="col_9"/><colspec colname="col_10"/><colspec colname="col_11"/><colspec colname="col_12"/><colspec colname="col_13"/><colspec colname="col_14"/><colspec colname="col_15"/><colspec colname="col_16"/><colspec colname="col_17"/><colspec colname="col_18"/><colspec colname="col_19"/><colspec colname="col_20"/><colspec colname="col_21"/><colspec colname="col_22"/><colspec colname="col_23"/><colspec colname="col_24"/><colspec colname="col_25"/><colspec colname="col_26"/><colspec colname="col_27"/><colspec colname="col_28"/><colspec colname="col_29"/><colspec colname="col_30"/><colspec colname="col_31"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para> 31 </para></entry><entry colsep="1" rowsep="1"><para> 30 </para></entry><entry colsep="1" rowsep="1"><para> 29 </para></entry><entry colsep="1" rowsep="1"><para> 28 </para></entry><entry colsep="1" rowsep="1"><para> 27 </para></entry><entry colsep="1" rowsep="1"><para> 26 </para></entry><entry colsep="1" rowsep="1"><para> 25 </para></entry><entry colsep="1" rowsep="1"><para> 24 </para></entry><entry colsep="1" rowsep="1"><para> 23 </para></entry><entry colsep="1" rowsep="1"><para> 22 </para></entry><entry colsep="1" rowsep="1"><para> 21 </para></entry><entry colsep="1" rowsep="1"><para> 20 </para></entry><entry colsep="1" rowsep="1"><para> 19 </para></entry><entry colsep="1" rowsep="1"><para> 18 </para></entry><entry colsep="1" rowsep="1"><para> 17 </para></entry><entry colsep="1" rowsep="1"><para> 16 </para></entry><entry colsep="1" rowsep="1"><para> 15 </para></entry><entry colsep="1" rowsep="1"><para> 14 </para></entry><entry colsep="1" rowsep="1"><para> 13 </para></entry><entry colsep="1" rowsep="1"><para> 12 </para></entry><entry colsep="1" rowsep="1"><para> 11 </para></entry><entry colsep="1" rowsep="1"><para> 10 </para></entry><entry colsep="1" rowsep="1"><para> 09 </para></entry><entry colsep="1" rowsep="1"><para> 08 </para></entry><entry colsep="1" rowsep="1"><para> 07 </para></entry><entry colsep="1" rowsep="1"><para> 06 </para></entry><entry colsep="1" rowsep="1"><para> 05 </para></entry><entry colsep="1" rowsep="1"><para> 04 </para></entry><entry colsep="1" rowsep="1"><para> 03 </para></entry><entry colsep="1" rowsep="1"><para> 02 </para></entry><entry colsep="1" rowsep="1"><para> 01 </para></entry><entry colsep="1" rowsep="1"><para> 00 </para></entry></row><row rowsep="1"><entry align="center" colsep="1" nameend="col_3" namest="col_0" rowsep="1"><para> cond  </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 1  </para></entry><entry colsep="1" rowsep="1"><para> I  </para></entry><entry colsep="1" rowsep="1"><para> P  </para></entry><entry colsep="1" rowsep="1"><para> U  </para></entry><entry colsep="1" rowsep="1"><para> B  </para></entry><entry colsep="1" rowsep="1"><para> W  </para></entry><entry colsep="1" rowsep="1"><para> L  </para></entry><entry align="center" colsep="1" nameend="col_15" namest="col_12" rowsep="1"><para> Rn  </para></entry><entry align="center" colsep="1" nameend="col_19" namest="col_16" rowsep="1"><para> Rd  </para></entry><entry align="center" colsep="1" nameend="col_31" namest="col_20" rowsep="1"><para> dirección  </para></entry></row></tbody></tgroup></informaltable><para><emphasis role="strong">Bit I</emphasis> método de direccionamiento </para><para><emphasis role="strong">Bits P,U,W</emphasis> dependen del tipo de direccionamiento </para><para><emphasis role="strong">Bit L</emphasis> Carga L = 1 Almacenamiento L = 0; </para><para><emphasis role="strong">Bit B</emphasis> Byte (B=1) y word (B=0) </para><para><emphasis role="strong">Rn</emphasis> Registro base </para><para><emphasis role="strong">Rd</emphasis> Registro donde se guarda el valor o desde donde se toma el valor a escribir </para></section><section><title>Carga y Almacenamiento de medio word y bytes con signo</title><para>Realiza la misma operaciones que la anterior, pero esta vez utilizando medio word o bytes con signo. </para><screen><![CDATA[LDR||STR{cond}H||SH||SB Rd,dirección]]></screen><para><emphasis role="strong">cond</emphasis> indica la condición para ejecutar la instrucción. </para><para><emphasis role="strong">H</emphasis> indica que opero con medio word sin signo </para><para><emphasis role="strong">SH</emphasis> indica que opero con medio word con signo </para><para><emphasis role="strong">SB</emphasis> indica que opero con byte con signo </para><para><emphasis>Nota:</emphasis> el modificador SH y SB son solo para instrucciones de Carga (LDR) </para><para><emphasis role="strong">Rd</emphasis> Registro destino </para><para><emphasis role="strong">dirección</emphasis> está formada por el registro base y el offset </para><informaltable><tgroup cols="32"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><colspec colname="col_3"/><colspec colname="col_4"/><colspec colname="col_5"/><colspec colname="col_6"/><colspec colname="col_7"/><colspec colname="col_8"/><colspec colname="col_9"/><colspec colname="col_10"/><colspec colname="col_11"/><colspec colname="col_12"/><colspec colname="col_13"/><colspec colname="col_14"/><colspec colname="col_15"/><colspec colname="col_16"/><colspec colname="col_17"/><colspec colname="col_18"/><colspec colname="col_19"/><colspec colname="col_20"/><colspec colname="col_21"/><colspec colname="col_22"/><colspec colname="col_23"/><colspec colname="col_24"/><colspec colname="col_25"/><colspec colname="col_26"/><colspec colname="col_27"/><colspec colname="col_28"/><colspec colname="col_29"/><colspec colname="col_30"/><colspec colname="col_31"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para> 31 </para></entry><entry colsep="1" rowsep="1"><para> 30 </para></entry><entry colsep="1" rowsep="1"><para> 29 </para></entry><entry colsep="1" rowsep="1"><para> 28 </para></entry><entry colsep="1" rowsep="1"><para> 27 </para></entry><entry colsep="1" rowsep="1"><para> 26 </para></entry><entry colsep="1" rowsep="1"><para> 25 </para></entry><entry colsep="1" rowsep="1"><para> 24 </para></entry><entry colsep="1" rowsep="1"><para> 23 </para></entry><entry colsep="1" rowsep="1"><para> 22 </para></entry><entry colsep="1" rowsep="1"><para> 21 </para></entry><entry colsep="1" rowsep="1"><para> 20 </para></entry><entry colsep="1" rowsep="1"><para> 19 </para></entry><entry colsep="1" rowsep="1"><para> 18 </para></entry><entry colsep="1" rowsep="1"><para> 17 </para></entry><entry colsep="1" rowsep="1"><para> 16 </para></entry><entry colsep="1" rowsep="1"><para> 15 </para></entry><entry colsep="1" rowsep="1"><para> 14 </para></entry><entry colsep="1" rowsep="1"><para> 13 </para></entry><entry colsep="1" rowsep="1"><para> 12 </para></entry><entry colsep="1" rowsep="1"><para> 11 </para></entry><entry colsep="1" rowsep="1"><para> 10 </para></entry><entry colsep="1" rowsep="1"><para> 09 </para></entry><entry colsep="1" rowsep="1"><para> 08 </para></entry><entry colsep="1" rowsep="1"><para> 07 </para></entry><entry colsep="1" rowsep="1"><para> 06 </para></entry><entry colsep="1" rowsep="1"><para> 05 </para></entry><entry colsep="1" rowsep="1"><para> 04 </para></entry><entry colsep="1" rowsep="1"><para> 03 </para></entry><entry colsep="1" rowsep="1"><para> 02 </para></entry><entry colsep="1" rowsep="1"><para> 01 </para></entry><entry colsep="1" rowsep="1"><para> 00 </para></entry></row><row rowsep="1"><entry align="center" colsep="1" nameend="col_3" namest="col_0" rowsep="1"><para> cond  </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> P  </para></entry><entry colsep="1" rowsep="1"><para> U  </para></entry><entry colsep="1" rowsep="1"><para> I  </para></entry><entry colsep="1" rowsep="1"><para> W  </para></entry><entry colsep="1" rowsep="1"><para> L  </para></entry><entry align="center" colsep="1" nameend="col_15" namest="col_12" rowsep="1"><para> Rn  </para></entry><entry align="center" colsep="1" nameend="col_19" namest="col_16" rowsep="1"><para> Rd  </para></entry><entry align="center" colsep="1" nameend="col_23" namest="col_20" rowsep="1"><para> dirección  </para></entry><entry colsep="1" rowsep="1"><para> 1  </para></entry><entry colsep="1" rowsep="1"><para> S  </para></entry><entry colsep="1" rowsep="1"><para> H  </para></entry><entry colsep="1" rowsep="1"><para> 1  </para></entry><entry align="center" colsep="1" nameend="col_31" namest="col_28" rowsep="1"><para> dirección </para></entry></row></tbody></tgroup></informaltable><para><emphasis role="strong">Bit I</emphasis> Método de direccionamiento </para><para><emphasis role="strong">Bits P,U,W</emphasis> dependen del tipo de direccionamiento. </para><para><emphasis role="strong">Bit L</emphasis> Carga L = 1 Almacenamiento L = 0; </para><para><emphasis role="strong">Bit S</emphasis> S = 1 indica una operación con signo S = 0 indica operación sin signo </para><para><emphasis role="strong">Bit H</emphasis> H = 1 indica operación con medio word y H = 0 indica operación con bytes </para><para><emphasis>Nota:</emphasis> El estado de estos bits se determinarían mediante los prefijos H = medio word, SH = medio word con signo y SB = byte con signo, otra designación como por ejemplo S = 0 y H = 0 el cual indicaría byte sin signo en realizad no existe como instrucción, se debe usar para esto la instrucción de carga y almacenamiento de word o bytes sin signo, esto ocurre también con el intento de utilizar operaciones de almacenamiento con signo </para><para><emphasis role="strong">Rn</emphasis> Es el registro base </para><para><emphasis role="strong">Rd</emphasis> especifica el registro a ser cargado o almacenado. </para></section><section><title>direccionamiento</title><section><title>Modo de direccionamiento</title><para>Los doce bits menos significativos pueden configurarse de tres formas distintas </para><para>El bit 25 o I indica el tipo de offset </para><itemizedlist><listitem><para>I = 1 offset inmediato  </para></listitem><listitem><para>I = 0 offset por registro o por registro escalado.<emphasis role="strong"/><emphasis role="strong"/>  </para></listitem></itemizedlist><para><emphasis role="strong">Inmediato</emphasis> </para><informaltable><tgroup cols="32"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><colspec colname="col_3"/><colspec colname="col_4"/><colspec colname="col_5"/><colspec colname="col_6"/><colspec colname="col_7"/><colspec colname="col_8"/><colspec colname="col_9"/><colspec colname="col_10"/><colspec colname="col_11"/><colspec colname="col_12"/><colspec colname="col_13"/><colspec colname="col_14"/><colspec colname="col_15"/><colspec colname="col_16"/><colspec colname="col_17"/><colspec colname="col_18"/><colspec colname="col_19"/><colspec colname="col_20"/><colspec colname="col_21"/><colspec colname="col_22"/><colspec colname="col_23"/><colspec colname="col_24"/><colspec colname="col_25"/><colspec colname="col_26"/><colspec colname="col_27"/><colspec colname="col_28"/><colspec colname="col_29"/><colspec colname="col_30"/><colspec colname="col_31"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para> 31 </para></entry><entry colsep="1" rowsep="1"><para> 30 </para></entry><entry colsep="1" rowsep="1"><para> 29 </para></entry><entry colsep="1" rowsep="1"><para> 28 </para></entry><entry colsep="1" rowsep="1"><para> 27 </para></entry><entry colsep="1" rowsep="1"><para> 26 </para></entry><entry colsep="1" rowsep="1"><para> 25 </para></entry><entry colsep="1" rowsep="1"><para> 24 </para></entry><entry colsep="1" rowsep="1"><para> 23 </para></entry><entry colsep="1" rowsep="1"><para> 22 </para></entry><entry colsep="1" rowsep="1"><para> 21 </para></entry><entry colsep="1" rowsep="1"><para> 20 </para></entry><entry colsep="1" rowsep="1"><para> 19 </para></entry><entry colsep="1" rowsep="1"><para> 18 </para></entry><entry colsep="1" rowsep="1"><para> 17 </para></entry><entry colsep="1" rowsep="1"><para> 16 </para></entry><entry colsep="1" rowsep="1"><para> 15 </para></entry><entry colsep="1" rowsep="1"><para> 14 </para></entry><entry colsep="1" rowsep="1"><para> 13 </para></entry><entry colsep="1" rowsep="1"><para> 12 </para></entry><entry colsep="1" rowsep="1"><para> 11 </para></entry><entry colsep="1" rowsep="1"><para> 10 </para></entry><entry colsep="1" rowsep="1"><para> 09 </para></entry><entry colsep="1" rowsep="1"><para> 08 </para></entry><entry colsep="1" rowsep="1"><para> 07 </para></entry><entry colsep="1" rowsep="1"><para> 06 </para></entry><entry colsep="1" rowsep="1"><para> 05 </para></entry><entry colsep="1" rowsep="1"><para> 04 </para></entry><entry colsep="1" rowsep="1"><para> 03 </para></entry><entry colsep="1" rowsep="1"><para> 02 </para></entry><entry colsep="1" rowsep="1"><para> 01 </para></entry><entry colsep="1" rowsep="1"><para> 00 </para></entry></row><row rowsep="1"><entry align="center" colsep="1" nameend="col_3" namest="col_0" rowsep="1"><para> cond  </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 1  </para></entry><entry colsep="1" rowsep="1"><para> 1  </para></entry><entry colsep="1" rowsep="1"><para> P  </para></entry><entry colsep="1" rowsep="1"><para> U  </para></entry><entry colsep="1" rowsep="1"><para> B  </para></entry><entry colsep="1" rowsep="1"><para> W  </para></entry><entry colsep="1" rowsep="1"><para> L  </para></entry><entry align="center" colsep="1" nameend="col_15" namest="col_12" rowsep="1"><para> Rn  </para></entry><entry align="center" colsep="1" nameend="col_19" namest="col_16" rowsep="1"><para> Rd  </para></entry><entry align="center" colsep="1" nameend="col_31" namest="col_20" rowsep="1"><para> offset de 12 bits  </para></entry></row></tbody></tgroup></informaltable><para>Instrucciones de word y bytes sin signo: como vemos el offset solo puede tener una longitud máxima de 12 bits </para><para>Instrucciones de medio word y bytes con signo: los bits 4 a 7 tiene otro uso, y no son usados como offset, por lo tanto el espacio del offset se reduce a 8 bits ( 0 a 3 y 8 a 11) </para><para><emphasis role="strong">Offset por registro escalado</emphasis> </para><informaltable><tgroup cols="32"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><colspec colname="col_3"/><colspec colname="col_4"/><colspec colname="col_5"/><colspec colname="col_6"/><colspec colname="col_7"/><colspec colname="col_8"/><colspec colname="col_9"/><colspec colname="col_10"/><colspec colname="col_11"/><colspec colname="col_12"/><colspec colname="col_13"/><colspec colname="col_14"/><colspec colname="col_15"/><colspec colname="col_16"/><colspec colname="col_17"/><colspec colname="col_18"/><colspec colname="col_19"/><colspec colname="col_20"/><colspec colname="col_21"/><colspec colname="col_22"/><colspec colname="col_23"/><colspec colname="col_24"/><colspec colname="col_25"/><colspec colname="col_26"/><colspec colname="col_27"/><colspec colname="col_28"/><colspec colname="col_29"/><colspec colname="col_30"/><colspec colname="col_31"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para> 31 </para></entry><entry colsep="1" rowsep="1"><para> 30 </para></entry><entry colsep="1" rowsep="1"><para> 29 </para></entry><entry colsep="1" rowsep="1"><para> 28 </para></entry><entry colsep="1" rowsep="1"><para> 27 </para></entry><entry colsep="1" rowsep="1"><para> 26 </para></entry><entry colsep="1" rowsep="1"><para> 25 </para></entry><entry colsep="1" rowsep="1"><para> 24 </para></entry><entry colsep="1" rowsep="1"><para> 23 </para></entry><entry colsep="1" rowsep="1"><para> 22 </para></entry><entry colsep="1" rowsep="1"><para> 21 </para></entry><entry colsep="1" rowsep="1"><para> 20 </para></entry><entry colsep="1" rowsep="1"><para> 19 </para></entry><entry colsep="1" rowsep="1"><para> 18 </para></entry><entry colsep="1" rowsep="1"><para> 17 </para></entry><entry colsep="1" rowsep="1"><para> 16 </para></entry><entry colsep="1" rowsep="1"><para> 15 </para></entry><entry colsep="1" rowsep="1"><para> 14 </para></entry><entry colsep="1" rowsep="1"><para> 13 </para></entry><entry colsep="1" rowsep="1"><para> 12 </para></entry><entry colsep="1" rowsep="1"><para> 11 </para></entry><entry colsep="1" rowsep="1"><para> 10 </para></entry><entry colsep="1" rowsep="1"><para> 09 </para></entry><entry colsep="1" rowsep="1"><para> 08 </para></entry><entry colsep="1" rowsep="1"><para> 07 </para></entry><entry colsep="1" rowsep="1"><para> 06 </para></entry><entry colsep="1" rowsep="1"><para> 05 </para></entry><entry colsep="1" rowsep="1"><para> 04 </para></entry><entry colsep="1" rowsep="1"><para> 03 </para></entry><entry colsep="1" rowsep="1"><para> 02 </para></entry><entry colsep="1" rowsep="1"><para> 01 </para></entry><entry colsep="1" rowsep="1"><para> 00 </para></entry></row><row rowsep="1"><entry align="center" colsep="1" nameend="col_3" namest="col_0" rowsep="1"><para> cond  </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 1  </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> P  </para></entry><entry colsep="1" rowsep="1"><para> U  </para></entry><entry colsep="1" rowsep="1"><para> B  </para></entry><entry colsep="1" rowsep="1"><para> W  </para></entry><entry colsep="1" rowsep="1"><para> L  </para></entry><entry align="center" colsep="1" nameend="col_15" namest="col_12" rowsep="1"><para> Rn  </para></entry><entry align="center" colsep="1" nameend="col_19" namest="col_16" rowsep="1"><para> Rd  </para></entry><entry align="center" colsep="1" nameend="col_24" namest="col_20" rowsep="1"><para> cantidad shift </para></entry><entry align="center" colsep="1" nameend="col_26" namest="col_25" rowsep="1"><para> shift </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry align="center" colsep="1" nameend="col_31" namest="col_28" rowsep="1"><para> Rm </para></entry></row></tbody></tgroup></informaltable><para>Instrucciones de word y bytes sin signo: Los bits 5 y 6 indico el tipo de offset y en 7 a 11 la cantidad de bits a correr. </para><para>Instrucciones de medio word y bytes con signo: no existe este modo con estas instrucciones. </para><para><emphasis role="strong">Offset por registro</emphasis> </para><informaltable><tgroup cols="32"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><colspec colname="col_3"/><colspec colname="col_4"/><colspec colname="col_5"/><colspec colname="col_6"/><colspec colname="col_7"/><colspec colname="col_8"/><colspec colname="col_9"/><colspec colname="col_10"/><colspec colname="col_11"/><colspec colname="col_12"/><colspec colname="col_13"/><colspec colname="col_14"/><colspec colname="col_15"/><colspec colname="col_16"/><colspec colname="col_17"/><colspec colname="col_18"/><colspec colname="col_19"/><colspec colname="col_20"/><colspec colname="col_21"/><colspec colname="col_22"/><colspec colname="col_23"/><colspec colname="col_24"/><colspec colname="col_25"/><colspec colname="col_26"/><colspec colname="col_27"/><colspec colname="col_28"/><colspec colname="col_29"/><colspec colname="col_30"/><colspec colname="col_31"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para> 31 </para></entry><entry colsep="1" rowsep="1"><para> 30 </para></entry><entry colsep="1" rowsep="1"><para> 29 </para></entry><entry colsep="1" rowsep="1"><para> 28 </para></entry><entry colsep="1" rowsep="1"><para> 27 </para></entry><entry colsep="1" rowsep="1"><para> 26 </para></entry><entry colsep="1" rowsep="1"><para> 25 </para></entry><entry colsep="1" rowsep="1"><para> 24 </para></entry><entry colsep="1" rowsep="1"><para> 23 </para></entry><entry colsep="1" rowsep="1"><para> 22 </para></entry><entry colsep="1" rowsep="1"><para> 21 </para></entry><entry colsep="1" rowsep="1"><para> 20 </para></entry><entry colsep="1" rowsep="1"><para> 19 </para></entry><entry colsep="1" rowsep="1"><para> 18 </para></entry><entry colsep="1" rowsep="1"><para> 17 </para></entry><entry colsep="1" rowsep="1"><para> 16 </para></entry><entry colsep="1" rowsep="1"><para> 15 </para></entry><entry colsep="1" rowsep="1"><para> 14 </para></entry><entry colsep="1" rowsep="1"><para> 13 </para></entry><entry colsep="1" rowsep="1"><para> 12 </para></entry><entry colsep="1" rowsep="1"><para> 11 </para></entry><entry colsep="1" rowsep="1"><para> 10 </para></entry><entry colsep="1" rowsep="1"><para> 09 </para></entry><entry colsep="1" rowsep="1"><para> 08 </para></entry><entry colsep="1" rowsep="1"><para> 07 </para></entry><entry colsep="1" rowsep="1"><para> 06 </para></entry><entry colsep="1" rowsep="1"><para> 05 </para></entry><entry colsep="1" rowsep="1"><para> 04 </para></entry><entry colsep="1" rowsep="1"><para> 03 </para></entry><entry colsep="1" rowsep="1"><para> 02 </para></entry><entry colsep="1" rowsep="1"><para> 01 </para></entry><entry colsep="1" rowsep="1"><para> 00 </para></entry></row><row rowsep="1"><entry align="center" colsep="1" nameend="col_3" namest="col_0" rowsep="1"><para> cond  </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 1  </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> P  </para></entry><entry colsep="1" rowsep="1"><para> U  </para></entry><entry colsep="1" rowsep="1"><para> B  </para></entry><entry colsep="1" rowsep="1"><para> W  </para></entry><entry colsep="1" rowsep="1"><para> L  </para></entry><entry align="center" colsep="1" nameend="col_15" namest="col_12" rowsep="1"><para> Rn  </para></entry><entry align="center" colsep="1" nameend="col_19" namest="col_16" rowsep="1"><para> Rd  </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry colsep="1" rowsep="1"><para> 0 </para></entry><entry align="center" colsep="1" nameend="col_31" namest="col_28" rowsep="1"><para> Rm </para></entry></row></tbody></tgroup></informaltable><para>Instrucciones de word y bytes sin signo: Es un caso particular del anterior, donde los bits correspondiente al shift ( tipo y cantidad ) están en cero indicando la ausencia de corrimiento. </para><para>Instrucciones de medio word y bytes con signo:funciona de la misma manera que las instrucciones de word y bytes sin signo. </para></section><section><title>Tipo de direccionamiento</title><para>Como vimos anteriormente existen un grupos de bits que indican de que manera se vincula el offet con el registro base </para><para><emphasis role="strong">bit P</emphasis> indica si la operación de suma o resta entre registro base y offset, se realiza antes de acceder a la memoria </para><itemizedlist><listitem><para>P = 0 se accede y luego se suma o restan los operadores, corresponde a direccionamiento post-indexado  </para></listitem><listitem><para>P = 1 se suma o resta los operadores y luego se accede a memoria corresponde a Direccionamiento por corrimiento o Direccionamiento pre-indexado  </para></listitem></itemizedlist><para><emphasis role="strong">bit U</emphasis> indica la operación entre base y offset  </para><itemizedlist><listitem><para>U = 0 se suman los operadores  </para></listitem><listitem><para>U = 1 se restan los operadores  </para></listitem></itemizedlist><para><emphasis role="strong">bit W</emphasis> tiene dos funciones </para><para>en el caso de P = 0 o sea direccionamiento post-indexado </para><itemizedlist><listitem><para>W = 0 acceso normal a memoria  </para></listitem><listitem><para>W = 1 acceso sin privilegios (modo usuario) corresponde al modificador T (LDRT,STRT, etc)  </para></listitem></itemizedlist><para>en el caso de P = 1 indica si actualiza o no el registro base (el caso de post-indexado siempre actualiza el registro base) </para><itemizedlist><listitem><para>W = 0 el registro base no se actualiza Direccionamiento por corrimiento  </para></listitem><listitem><para>W = 1 el registro base es actualizado Direccionamiento pre-indexado  </para></listitem></itemizedlist></section><section><title>Tabla de direccionamiento</title><para>Teniendo los modos de direccionamiento y los bits que definen el tipo de direccionamiento, podemos realizar una tabla que defina todos los modos y tipos de dirección que son posibles dependiendo del tipo de instrucción y de operaciones restringidas (modificador T) o no. </para><para>IWB = Instrucciones de carga y Almacenamiento de word y bytes sin signo. </para><para>IHB = Instrucciones de Carga y Almacenamiento de medio word y bytes con signo. </para><informaltable><tgroup cols="6"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><colspec colname="col_3"/><colspec colname="col_4"/><colspec colname="col_5"/><tbody><row rowsep="1"><entry align="center" colsep="1" nameend="col_1" namest="col_0" rowsep="1"><para> IWB          </para></entry><entry colsep="1" rowsep="1"><para> IHB </para></entry><entry colsep="1" rowsep="1"><para> Modo                           </para></entry><entry colsep="1" rowsep="1"><para> Descripción         </para></entry><entry colsep="1" rowsep="1"><para> Ejemplo </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> con T </para></entry><entry colsep="1" rowsep="1"><para> sin T </para></entry><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"/></row><row rowsep="1"><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;, #+/-&lt;offset_12&gt;]</code>  </para></entry><entry colsep="1" rowsep="1"><para> offset inmediato    </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R1,[R2, #+1024]</code> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para>  X  </para></entry><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;, #+/-&lt;offset_8&gt;]</code>   </para></entry><entry colsep="1" rowsep="1"><para> offset inmediato    </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R1,[R2, #+100]</code>  </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"><para>  X  </para></entry><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;, +/-&lt;Rm&gt;]</code>          </para></entry><entry colsep="1" rowsep="1"><para> offset por registro </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R1,[R2, R3]</code> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;, +/-&lt;Rm&gt;, &lt;shift&gt; #&lt;shift_imm&gt;]</code>  </para></entry><entry colsep="1" rowsep="1"><para> offset por registro escalado </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R1,[R2, -R4, LSL 3]</code> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;, #+/-&lt;offset_12&gt;]!</code> </para></entry><entry colsep="1" rowsep="1"><para> offset inmediato pre indexado </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R1,[R2, #-1024]!</code> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para>  X  </para></entry><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;, #+/-&lt;offset_8&gt;]!</code>  </para></entry><entry colsep="1" rowsep="1"><para> offset inmediato pre indexado </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R1,[R2, #+100]!</code> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"><para>  X  </para></entry><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;, +/-&lt;Rm&gt;]!</code>  </para></entry><entry colsep="1" rowsep="1"><para> offset por registro pre indexado </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R1,[R2, -R4]!</code> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;, +/-&lt;Rm&gt;, &lt;shift&gt; #&lt;shift_imm&gt;]!</code> </para></entry><entry colsep="1" rowsep="1"><para> offset por registro escalado pre indexado </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R2,[R4, R3, LSL 3]!</code> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;], #+/-&lt;offset_12&gt;</code>  </para></entry><entry colsep="1" rowsep="1"><para> offset inmediato post-indexado </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R1,[R2],#+1024</code> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para>  X  </para></entry><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;], #+/-&lt;offset_8&gt;</code>  </para></entry><entry colsep="1" rowsep="1"><para> offset inmediato post-indexado </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R1,[R2], #+100</code> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"><para>  X  </para></entry><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;], +/-&lt;Rm&gt;</code>  </para></entry><entry colsep="1" rowsep="1"><para> offset por registro post-indexado </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R1,[R2],R3</code> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"><para>  X    </para></entry><entry colsep="1" rowsep="1"/><entry colsep="1" rowsep="1"><para> <code>[&lt;Rn&gt;], +/-&lt;Rm&gt;, &lt;shift&gt; #&lt;shift_imm&gt;</code>  </para></entry><entry colsep="1" rowsep="1"><para>  offset por registro escalado post-indexado </para></entry><entry colsep="1" rowsep="1"><para> <code>LDR R1,[R2],R3, LSL #2</code> </para></entry></row></tbody></tgroup></informaltable></section></section></section></article>