arm_saltos
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
arm_saltos [2020/05/27 19:28] – [Subrutinas] andrew | arm_saltos [2020/05/27 19:54] (actual) – [Subrutinas] andrew | ||
---|---|---|---|
Línea 16: | Línea 16: | ||
< | < | ||
- | < | + | < |
+ | - 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). | + | 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). |
- | + | ||
- | 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 | + | |
- | + | ||
- | ==== SWI ==== | + | |
- | SWI (Software Interrupt) provoca la excepción SWI | + | |
- | + | ||
- | Sintaxis | + | |
- | + | ||
- | SWI{< | + | |
- | + | ||
- | Donde: | + | |
- | + | ||
- | < | + | |
- | + | ||
- | < | + | |
- | + | ||
- | + | ||
- | Operaciones principales realizadas por la instrucción: | + | |
- | Si pasa la condicíon(cond) | + | ldr pc, =etiqueta |
- | | + | |
- | R14_svc | + | |
- | SPSR_svc | + | |
- | CPSR[4:0] = 0b10011 | + | |
- | CPSR[5] | + | |
- | CPSR[7] | + | |
- | PC = 0x00000008 | + | |
[[oc_raspi0|Volver]] | [[oc_raspi0|Volver]] |
×
iphelper toolbox
you see this when javscript or css is not working correct
Untested
arm_saltos.1590607695.txt.gz · Última modificación: 2020/05/27 19:28 (editor externo)