Bienvenido: Ingresar
location: Diferencias para "WebHome/ASMIntroduccionARM/ASMSaltoARM"
Diferencias entre las revisiones 4 y 6 (abarca 2 versiones)
Versión 4 con fecha 2010-06-01 17:33:05
Tamaño: 4421
Comentario:
Versión 6 con fecha 2010-06-01 17:34:58
Tamaño: 4594
Comentario:
Los textos eliminados se marcan así. Los textos añadidos se marcan así.
Línea 60: Línea 60:
||||||cond|| ||||||| 1 ||0 ||1 ||L ||valor inmediato con signo de 24 bits |||||||||||||||||||||| ||
|||||| cond    || 1 || 0 || 1 || L |||||||||||||||||||||||||||||||||||||||||||||||| valor inmediato con signo de 24 bits ||
Línea 78: Línea 77:

---- /!\ '''Edit conflict - other version:''' ----

---- /!\ '''Edit conflict - your version:''' ----

---- /!\ '''End of edit conflict''' ----

Instrucciones de Salto

Estas instrucciones permiten un salto hacia adelante o hacia atras, cubriendo una brecha de +/-32Mb.

Al ser el PC un registro de propósitos generales (R15) un salto puede ser generado también al escribir un valor en el PC, estos saltos no utilizan instrucciones específicas de salto, se sirven de las instrucciones de movimiento y carga.

Con respecto a las subrutinas, existe una variante del Salto, permitiendo saltar dentro de la franja de +/-32 Mb, el Salto conservando el Vinculo (Branch with Link o BL), reserva la dirección de la instrucción posterior al salto en el LR (R14).

Otra modalidad de salto es el Salto y Cambio (Branch and Exchange BX), esta instrucción copia el contenido de un registro de propósitos generales (Rm) al PC (igual que Mov PC,Rm) con la funcionalidad adicional de que si el bit[0] del valor transferido es 1, el procesador conmuta a Thumb, esto permite trabajar conjuntamente con codigo ARM y Thumb.

Si sumamos a esto, una instrucción que guarde el contenido del PC al LR nos queda.

MOV LR,PC
BX Rm

Esto permite llamar a subrutinas desde ARM a Thumb y Thumb a ARM.

Las restricciones de los 32Mb, se eliminan utilizando instrucciones de carga que modifiquen directamente el PC, permitiendo saltar a cualquier posición de los 4Gb de espacio, ( esto se conoce como salto largo) al igual que el caso de la instruccion BX, la carga del PC puede ser precedida de Mov LR,PC para llamar a subrutinas.

Algo a tener en cuenta, es que en la carga de PC desde un valor de memoria, no tiene en cuenta el valor del bit[0], no permitiendo cambiar de modo Thumb - ARM,

Ejemplos

  • B label ; Salto incondicional a label
    BCC label ; Salto condicional a label si el acarreo es cero
    BEQ label ; Salto condicional a label si la bandera de cero es uno de otra forma si los numero comparados son iguales
    MOV PC, #0 ; R15 = 0, saltar a la posición 0
    BL func ; llamar a la subrutina func . .
    MOV PC, LR ; R15=R14, retornar a la posición posterior a un BL
    MOV LR, PC ; guardar la dirección de en la instrucción siguiente en LR
    LDR PC, =func ; cargar una dirección de 32-bit

Instrucciones Específicas de Salto

  • Veremos a continuación solo las instrucciones específicas de salto, quedando las instrucciones que modifican al PC tratandolo como un registro de propositos generales como un caso particular de las instrucciones de carga y modificación

B, BL Salto y Salto Conservando el Vinculo.

El Salto convencional (B) o el Salto conservando el vinculo (BL) permiten el salto a un determinada posición en forma incondicional o condicional. El Salto BL tambien guarda la posicion de retorno en el LR o R14

B{L}{<cond>} <direcciondestino>

donde:

L

Determina si se guarda o no la posición de retorno.

cond

Es la condición que debe ser cierta para que el salto se efectúe, si esta condición es omitida, se usa la condición AL (always) transformándose en una salto incondicional.

direcciondestino

Especifica la dirección a saltar, la misma es calculada de la siguiente form:

  • Se extiende con signo de 24 bits a un nro de 30 bits.
  • Se corre dos bits a la izquierda (se multiplica por 4).
  • Se suma el contenido del PC. (en el momento de la suma el PC ya estará desplazado 8 bytes hacia adelante)

Esta instrucción permite un rango de salto de aproximadamente +/-32Mb

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

cond

1

0

1

L

valor inmediato con signo de 24 bits

BX Salto y Cambio

  • Salta a una posición de memoria con la opción de cambio a modo Thumb.

BX{<cond>}  <Rm>

cond

Idem a B y BL.

Rm

Registro de propósitos múltiples que posee la dirección de salto o dirección de destino, si bit[0] de Rm es 0 el destino es una rutina ARM si el bit es 1 el destino es una rutina Thumb

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

cond

0

0

0

1

0

0

1

0

llenar con 1

llenar con 1

llenar con 1

0

0

0

1

Rm


/!\ Edit conflict - other version:



/!\ Edit conflict - your version:



/!\ End of edit conflict


UntitledWiki: WebHome/ASMIntroduccionARM/ASMSaltoARM (última edición 2011-06-29 14:06:42 efectuada por GuillermoSteiner)