Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .text
- .global sort_by_age
- // extern void sort_by_age(int N, person_t *persons);
- // r0 r1
- // Возраст - 1 байт с позиции *person + 4 + 48k
- // Сортировка выбором
- // r2 - константа в 4 + 48 * r6
- // r3 - константа в 4 + 48 * r7, счетчик в swap_loop
- // r4 - temporary const Num1
- // r5 - temporary const Num2
- // r6 - счетчик внешнего цикла
- // r7 - счетчик внутреннего цикла
- // r8 - запоминаем указатель, которое заменяем
- // r9 - запоминаем указатель, с которого заменяем
- // r10 - константа
- sort_by_age:
- push {r4, r5, r6, r7, r8, r9, r10}
- mov r2, #4
- mov r6, #0
- mov r10, #48
- b choice_div
- choice_div:
- ldrb r4, [r1, r2] // pt[i].age
- add r2, r10
- cpy r7, r6
- cpy r3, r6
- mul r3, r3, r10
- add r3, r3, #4
- cmp r6, r0
- beq default
- cpy r8, r6
- cpy r9, r8
- add r6, #1
- b choice_inner_div
- choice_inner_div:
- ldrb r5, [r1, r3]
- cmp r4, r5
- movhi r4, r5
- movhi r9, r7
- add r7, r7, #1
- add r3, r3, r10
- cmp r7, r0
- bne choice_inner_div
- b swap_elements
- swap_elements:
- mul r8, r10, r8
- mul r9, r10, r9
- mov r3, #12
- b swap_loop
- swap_loop:
- ldr r4, [r1, r8]
- ldr r5, [r1, r9]
- str r5, [r1, r8]
- str r4, [r1, r9]
- add r8, r8, #4
- add r9, r9, #4
- sub r3, r3, #1
- cmp r3, #0
- bne swap_loop
- //
- // mov r0, r9
- // bx lr
- //
- b choice_div
- default:
- pop {r4, r5, r6, r7, r8, r9, r10}
- bx lr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement