.arm
.global _start
_start:
        b reset
        b loop
        b loop
        b loop
        b loop
        nop
        b loop
        b loop

/* ==============================
*  TEST CODE
*  buscar el punto xy mas alejado del origen 
*  ==============================
*/
reset:
        ldr r4,=VEC1
        mov r5,r4
        mov r2,#3
                
otro:   mov r0,r4
        mov r1,r5
        bl mayor 
        cmp r0,#0       
        bne nomayor 
        mov r5,r4
nomayor:
        add r4,#4
        subs r2,#1
        bne otro

loop:   b loop
        
        .ltorg

@ -----------------------------------------------------------------------------
@ funcion dado dos pares de numeros consecutivos de tipo hword con signo apuntado por r0  
@ devolver en r0 = r0 * r0 + r1 * r1
@ -----------------------------------------------------------------------------
modulo:
        push {r1,r2,r3} 
        ldrsh r1,[r0],#2
        mul r2,r1,r1
        ldrsh r1,[r0]
        mul r3,r1,r1
        add r0,r2,r3
        pop {r1,r2,r3}
        mov pc,lr

@ ----------------------------------------------------------------------------
@ dado dos punteros r0 y r1 que apuntan a sendos pares de numero, devolver 0 en r0 
@ si |r0| > |r1| 1 en caso contrario
mayor: 
        push {r2,lr}
        bl modulo 
        mov r2,r0
        mov r0,r1
        bl modulo 
        cmp r2,r0
        mov r0,#1
        bls mayor_no
        mov r0,#0
mayor_no:
        pop {r2,lr}
        mov pc,lr         
/* fin función */

/* ==============================
*  CONTANTES
*  ==============================
*/
VEC1:   .hword 10,20, 4,-3, 8,4
        .space 200
STACK:
        .balign 4
        .end

