Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .global main ; makes main accessible from outside this file.
- .thumb ; use thumb
- .data ; set memory location to ram
- ; put your variables here
- arrayLinearX: .float -1.00000, -0.90000, -0.80000, -0.70000, -0.60000, -0.50000, -0.40000, -0.30000, -0.20000, -0.10000, 0.00000, 0.10000, 0.20000, 0.30000, 0.40000, 0.50000, 0.60000, 0.70000, 0.80000, 0.90000, 1.00000, 1.10000, 1.20000, 1.30000, 1.40000, 1.50000, 1.60000, 1.70000, 1.80000, 1.90000, 2.00000, 2.10000, 2.20000, 2.30000, 2.40000, 2.50000, 2.60000, 2.70000, 2.80000, 2.90000, 3.00000
- arrayLinearY: .float -2.67055, -2.25842, -3.58603, -1.78325, -2.11528, -2.95492, -2.36300, -1.59624, -0.54499, -0.30022, -1.68477, 0.17119, 0.37433, -0.33925, 0.52056, -0.56623, 0.22352, 1.44147, 1.42441, 1.98898, 1.61148, 0.60142, 2.45826, 2.85799, 2.57747, 2.96548, 3.16626, 2.69445, 3.45096, 2.71237, 4.01209, 2.89367, 3.61385, 3.38234, 3.71426, 5.39692, 5.36966, 4.84420, 6.34044, 4.73889, 5.77749
- arrayQuadraticaX: .float -2.0000, -1.9000, -1.8000, -1.7000, -1.6000, -1.5000, -1.4000, -1.3000, -1.2000, -1.1000, -1.0000, -0.9000, -0.8000, -0.7000, -0.6000, -0.5000, -0.4000, -0.3000, -0.2000, -0.1000, 0.0000, 0.1000, 0.2000, 0.3000, 0.4000, 0.5000, 0.6000, 0.7000, 0.8000, 0.9000, 1.0000, 1.1000, 1.2000, 1.3000, 1.4000, 1.5000, 1.6000, 1.7000, 1.8000, 1.9000, 2.0000, 2.1000, 2.2000, 2.3000, 2.4000, 2.5000, 2.6000, 2.7000, 2.8000, 2.9000, 3.0000
- arrayQuadraticaY: .float 5.5262, 6.1421, 5.4008, 2.1675, 2.6391, 1.7823, 1.9653, 1.6575, 1.3387, -1.0159, 0.2188, -0.1996, -2.4296, -2.8040, -1.4265, 0.3390, -2.1585, -1.1389, -2.4848, -0.2149, -1.9796, -0.6962, 0.4163, 1.5836, 2.3172, 1.1889, 0.1345, 0.8172, 1.9500, 5.0429, 3.5171, 6.6371, 5.2941, 9.0371, 7.7799, 8.2864, 9.6843, 12.3842, 13.1132, 13.9866, 17.3233, 17.8211, 19.2189, 22.2888, 21.4234, 25.0288, 26.7949, 27.1418, 29.7913, 29.7834, 31.7158
- arrayRaizQuadradaX: .float 0.0000, 0.1000, 0.2000, 0.3000, 0.4000, 0.5000, 0.6000, 0.7000, 0.8000, 0.9000, 1.0000, 1.1000, 1.2000, 1.3000, 1.4000, 1.5000, 1.6000, 1.7000, 1.8000, 1.9000, 2.0000, 2.1000, 2.2000, 2.3000, 2.4000, 2.5000, 2.6000, 2.7000, 2.8000, 2.9000, 3.0000, 3.1000, 3.2000, 3.3000, 3.4000, 3.5000, 3.6000, 3.7000, 3.8000, 3.9000, 4.0000
- arrayRaizQuadradaY: .float 0.5616, 2.9557, 4.0513, 3.0461, 4.4324, 4.6814, 4.1714, 5.1942, 5.1909, 6.7807, 6.1224, 6.8499, 6.4040, 7.5450, 7.1252, 8.1566, 8.4679, 8.8193, 8.4509, 7.9381, 8.4432, 10.0215, 8.7042, 10.2511, 9.8718, 10.9791, 9.3311, 10.2444, 9.7532, 11.6414, 9.9016, 11.6139, 11.8677, 12.1369, 10.7323, 11.5245, 11.4039, 12.6414, 12.0590, 13.1703, 11.8637
- arrayExponencialX: .float -2.0000, -1.9000, -1.8000, -1.7000, -1.6000, -1.5000, -1.4000, -1.3000, -1.2000, -1.1000, -1.0000, -0.9000, -0.8000, -0.7000, -0.6000, -0.5000, -0.4000, -0.3000, -0.2000, -0.1000, 0.0000, 0.1000, 0.2000, 0.3000, 0.4000, 0.5000, 0.6000, 0.7000, 0.8000, 0.9000, 1.0000, 1.1000, 1.2000, 1.3000, 1.4000, 1.5000, 1.6000, 1.7000, 1.8000, 1.9000, 2.0000
- arrayExponencialY: .float 1.5793, 1.2081, 1.2221, 3.8406, 2.8847, 2.8439, 1.4971, 4.0532, 3.3308, 2.4769, 3.1500, 2.8760, 1.8639, 2.5795, 2.3281, 2.7133, 3.1008, 3.9329, 2.8800, 6.1240, 6.5568, 5.2835, 5.6266, 5.4816, 7.8757, 6.4885, 6.1056, 9.0221, 8.2907, 8.4747, 9.8185, 9.6001, 10.6723, 14.5551, 15.7621, 15.7083, 15.3183, 17.4936, 19.6350, 23.1819, 22.4711
- .text ; set memory location to flash
- ptArrayLinearX: .word arrayLinearX
- ptArrayLinearY: .word arrayLinearY
- ptArrayQuadraticaX: .word arrayQuadraticaX
- ptArrayQuadraticaY: .word arrayQuadraticaY
- ptArrayQuadradaX: .word arrayRaizQuadradaX
- ptArrayQuadradaY: .word arrayRaizQuadradaY
- ptArrayExponencialX: .word arrayExponencialX
- ptArrayExponencialY: .word arrayExponencialY
- dimArrayLinear: .word 41
- dimArrayQuadratica: .word 51
- dimArrayQuadrada: .word 41
- dimArrayExponencial: .word 41
- float0: .float 0
- main:
- bl registersA
- fim:
- b fim
- ;2. Regressao Linear
- ;;;;;;;;;;;;;;Average X;;;;;;;;;;;;;;
- sumAvgX:
- mov r0, #0 ;r0 = 0 = i
- vsub.F32 s2, s2, s2 ;s2 has the 0 value in float
- ldr r1, ptArrayLinearX ;gets the address of ptArrayLinearX
- ldr r4, dimArrayLinear ;gets the address of dimArrayLinear
- sumAvgX_for:
- cmp r0, r4 ;if we reach the array dimension ->
- beq sumAvgX_for_end ;jump to sumAvgX_for_end
- vldr s0, [r1] ;load byte and update address.
- add r1, #4 ;add 4 to r1
- vadd.f32 s2, s2, s0 ;s2 = s2 + s0
- add r0, #1 ;add 1 to r0
- b sumAvgX_for ;branch sumAvgX_for
- sumAvgX_for_end:
- vmov s4, r4 ;s4 = r4
- vcvt.f32.s32 s4, s4 ;converts int to float
- vdiv.f32 s0, s2, s4 ;s0 = s2/s4
- bx LR ;branch and exchange
- ;;;;;;;;;;;;;;Average Y;;;;;;;;;;;;;;
- sumAvgY:
- mov r0, #0 ;r0 = 0 = i
- vldr s2, float0 ;s2 has the 0 value in float
- ldr r1, ptArrayLinearY ;gets the address of ptArrayLinearY
- ldr r4, dimArrayLinear ;gets the address of dimArrayLinear
- sumAvgY_for:
- cmp r0, r4 ;if we reach the array dimension ->
- beq sumAvgY_for_end ;jump to sumAvgY_for_end
- vldr s0, [r1] ;load byte and update address.
- add r1, #4 ;add 4 to r1
- vadd.f32 s2, s2, s0 ;s2 = s2 + s0
- add r0, #1 ;add 1 to r0
- b sumAvgY_for ;branch sumAvgY_for
- sumAvgY_for_end:
- vmov s4, r4 ;s4 = r4
- vcvt.f32.s32 s4, s4 ;
- vdiv.f32 s0, s2, s4 ;s0 = s2/s4
- bx LR ;branch and exchange
- ;;;;;;;;;;;;;;Average X*Y;;;;;;;;;;;;;;
- sumAvgXY:
- mov r0, #0 ;r0 = 0 = i
- vldr s2, float0 ;s2 has the 0 value in float
- ldr r1, ptArrayLinearY ;gets the address of ptArrayLinearY
- ldr r2, ptArrayLinearX ;gets the address of ptArrayLinearX
- ldr r4, dimArrayLinear ;gets the address of do dimArrayLinear
- sumAvgXY_for:
- cmp r0, r4 ;if we reach the array dimension ->
- beq sumAvgXY_for_end ;jump to sumAvgXY_for_end
- vldr s0, [r1] ;load byte and update address
- vldr s1, [r2] ;load byte and update address
- add r1, #4 ;add 4 bytes to r1
- add r2, #4 ;add 4 bytes to r2
- vmla.f32 s2, s1, s0 ;s2 = s2 + (s1 * s0)
- add r0, #1 ;add 1 to r0
- b sumAvgXY_for ;branch sumAvgXY_for
- sumAvgXY_for_end:
- vmov s4, r4 ;s4 = r4
- vcvt.f32.s32 s4, s4 ;
- vdiv.f32 s0, s2, s4 ;s0 = s2/s4
- bx LR ;branch and exchange
- ;;;;;;;;;;;;;;Average X*X;;;;;;;;;;;;;;
- sumAvgXX:
- mov r0, #0 ;r0 = 0 = i
- vldr s2, float0 ;s2 has the 0 value in float
- ldr r1, ptArrayLinearX ;gets the address of ptArrayLinearX
- ldr r4, dimArrayLinear ;gets the address of dimArrayLinear
- sumAvgXX_for:
- cmp r0, r4 ;if we reach the array dimension ->
- beq sumAvgXX_for_end ;jump to sumAvgX_for_end
- vldr s0, [r1] ;load byte and update address.
- add r1, #4 ;add 4 to r1
- vmla.f32 s2, s0, s0 ;s2 = s2 + (s0 * s0)
- add r0, #1 ;add 1 to r0
- b sumAvgXX_for ;branch sumAvgX_for
- sumAvgXX_for_end:
- vmov s4, r4 ;s4 = r4
- vcvt.f32.s32 s4, s4 ;converts the value in case it stacks
- vdiv.f32 s0, s2, s4 ;s0 = s2/s4
- bx LR ;branch and exchange
- ;;;;;;;;;;;;;;Parameter B;;;;;;;;;;;;;;
- registersB:
- push{lr}
- bl sumAvgX ;gets the final value of sumAvgX
- push{s0}
- bl sumAvgY ;gets the final value of sumAvgY
- push{s0}
- bl sumAvgXY ;gets the final value of sumAvgXY
- push{s0}
- bl sumAvgXX ;gets the final value of sumAvgXX
- push{s0}
- pop{s4} ;sumAvgXX in s4
- pop{s3} ;sumAvgXY in s3
- pop{s2} ;sumAvgY in s2
- pop{s1} ;sumAvgX in s1
- pop{lr}
- operationsB:
- vnmls.f32 s3, s1, s2 ;s3 = -s3 + (s1 * s2) => s3 = avg(X)*avg(Y) - avg(XY)
- vnmls.f32 s4, s1, s1 ;s4 = -s4 + (s1 * s1) => s4 = avg(X)*avg(X) - avg(XX)
- vdiv.f32 s0, s3, s4 ;s0 = s3/s4
- bx LR ;branch and exchange
- ;;;;;;;;;;;;;;Parameter A;;;;;;;;;;;;;;
- registersA:
- push{lr}
- bl sumAvgX
- push{s0} ;gets the final value of sumAvgX
- bl sumAvgY
- push{s0} ;gets the final value of sumAvgY
- bl operationsB
- push{s0} ;gets the final value of operationsB
- pop{s3} ;s3 = operationsB
- pop{s2} ;s2 = sumAvgY
- pop{s1} ;s1 = sumAvgX
- pop{lr}
- operationsA:
- vmls.f32 s2, s1, s3 ;r2 = r2 - (r3 * r1) => r3 = avg(y) - (B * avg(X))
- vmov.f32 s0, s3 ;s0 = s3
- bx LR ;branch and exchange
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement