Advertisement
Guest User

Untitled

a guest
Oct 16th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 1.71 KB | None | 0 0
  1.     .text
  2.     .global sort_by_age
  3.  
  4. //  extern void sort_by_age(int N, person_t *persons);
  5. //                                                      r0                  r1
  6. //  Возраст - 1 байт с позиции *person + 4 + 48k
  7. //  Сортировка выбором
  8. //                                          r2 - константа в 4 + 48 * r6
  9. //                                          r3 - константа в 4 + 48 * r7, счетчик в swap_loop
  10. //                                          r4 - temporary const Num1
  11. //                                          r5 - temporary const Num2
  12. //                                          r6 - счетчик внешнего цикла
  13. //                                          r7 - счетчик внутреннего цикла
  14. //                                          r8 - запоминаем указатель, которое заменяем
  15. //                                          r9 - запоминаем указатель, с которого заменяем
  16. //                                          r10 - константа
  17.  
  18. sort_by_age:
  19.     push        {r4, r5, r6, r7, r8, r9, r10}
  20.     mov         r2, #4
  21.     mov         r6, #0
  22.     mov         r10, #48
  23.     b           choice_div
  24.  
  25. choice_div:
  26.     ldrb        r4, [r1, r2] // pt[i].age
  27.     add         r2, r10
  28.  
  29.     cpy         r7, r6
  30.     cpy         r3, r6
  31.     mul         r3, r3, r10
  32.     add         r3, r3, #4
  33.  
  34.     cmp         r6, r0
  35.     beq         default
  36.  
  37.     cpy         r8, r6
  38.     cpy         r9, r8
  39.     add         r6, #1
  40.     b           choice_inner_div
  41.  
  42. choice_inner_div:
  43.     ldrb        r5, [r1, r3]
  44.     cmp         r4, r5
  45.     movhi       r4, r5
  46.     movhi       r9, r7
  47.     add         r7, r7, #1
  48.     add         r3, r3, r10
  49.  
  50.     cmp         r7, r0
  51.     bne         choice_inner_div
  52.     b           swap_elements
  53.  
  54. swap_elements:
  55.     mul         r8, r10, r8
  56.     mul         r9, r10, r9
  57.     mov         r3, #12
  58.     b           swap_loop
  59. swap_loop:
  60.     ldr         r4, [r1, r8]
  61.     ldr         r5, [r1, r9]
  62.     str         r5, [r1, r8]
  63.     str         r4, [r1, r9]
  64.     add         r8, r8, #4
  65.     add         r9, r9, #4
  66.  
  67.     sub         r3, r3, #1
  68.     cmp         r3, #0
  69.     bne         swap_loop
  70. //
  71.     // mov      r0, r9
  72.     // bx           lr
  73. //
  74.     b               choice_div
  75.  
  76. default:
  77.     pop         {r4, r5, r6, r7, r8, r9, r10}
  78.     bx          lr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement