Herramientas de usuario

Herramientas del sitio


arm_saltos

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
arm_saltos [2020/05/27 19:34] – [SWI] andrewarm_saltos [2020/05/27 19:54] (actual) – [Subrutinas] andrew
Línea 16: Línea 16:
 <cond> Es la condicion para que se ejecute la instrucción. <cond> Es la condicion para que se ejecute la instrucción.
  
-<dirección_destino> Especifica la dirección a donde hay que saltar. +<dirección_destino> Especifica la dirección a donde hay que saltar. Puede ser una etiqueta, pero se codifica en 24 bits. La dirección de destino se calcula de la siguiente manera:  
 +  - Extender a 30 bits el signo de los 24 bits en complemento A dos (signed_immed_24).  
 +  - Hacer un shift a izquierda de dos bits para formar un valor de 32 bits (SignExtend_30).  
 +  - El nuevo PC es: PC = PC + (SignExtend_30(signed_immed_24) << 2)
    
 Si agregamos el sufijo L, la instrucción B es BL y se llama (Branch and Link), y se usa para llamar a una subrutina, mediante un salto a la subrutina y escribiendo en el registro LR (R14) la dirección de la siguiente instrucción. Si agregamos el sufijo L, la instrucción B es BL y se llama (Branch and Link), y se usa para llamar a una subrutina, mediante un salto a la subrutina y escribiendo en el registro LR (R14) la dirección de la siguiente instrucción.
Línea 137: Línea 139:
 Vemos en el último nivel (nivel2) podemos ahorrarnos el tener que almacenar y recuperar lr en la pila. Vemos en el último nivel (nivel2) podemos ahorrarnos el tener que almacenar y recuperar lr en la pila.
  
-Las instrucciones de salto en la arquitectura ARM abarcan una zona muy extensa, hasta 64 Mb (32 Mb hacia adelante y otros 32 Mb hacia atrás). El código de operación ocupa 8 de los 32 bits, dejándonos 24 bits para  codificar el destino del salto. En principio con 24 bits podemos direccionar 16 Mb [-2<sup>23</sup>-1; 2<sup>23</sup>-1], sin embargo la arquitectura ARM se aprovecha del hecho de que las instrucciones están alineadas a direcciones múltiplo de 4 (en binario acaban en 00), por lo que el rango real es de 64 Mb [-2<sup>25</sup>-1; 2<sup>25</sup>-1]. +Las instrucciones de salto en la arquitectura ARM abarcan una zona muy extensa, hasta 64 Mb (32 Mb hacia adelante y otros 32 Mb hacia atrás). Este rango esta determinado por los 24 bits para codificar el destino del salto. En caso de necesitar un salto mayor recurrimos a la misma solución de la carga de inmediatos del mov, solo que el registro a cargar es el pc.
- +
-En caso de necesitar un salto mayor recurrimos a la misma solución de la carga de inmediatos del mov, solo que el registro a cargar es el pc.+
  
-     ldr pc, = etiqueta+     ldr pc, =etiqueta
  
  
  
 [[oc_raspi0|Volver]] [[oc_raspi0|Volver]]
× iphelper toolbox

you see this when javscript or css is not working correct

Untested
IP Address:
First usable:
Subnet:
Last usable:
CIDR:
Amount of usable:
Network address:
Reverse address:
Broadcast address:

arm_saltos.1590608093.txt.gz · Última modificación: 2020/05/27 19:34 (editor externo)