Facebook
From Bitty Finch, 1 Week ago, written in x86 Assembler.
Embed
Download Paste or View Raw
Hits: 30
  1. BITS        64
  2. SECTION     .text
  3.  
  4. GLOBAL      sort
  5. sort:
  6.     push rbx
  7.     push rbp
  8.     push r12
  9.         cmp rsi, 0x1
  10.         jbe end
  11.         mov rbx, rsi
  12.         mov rax, rsi
  13.         sar rax, 0x1
  14.         mov r12, rax
  15.         mov rbp, rdi
  16.         mov rsi, rax
  17.         call sort
  18.         lea rdi, [rbp + r12 * 8]
  19.         mov rax, rbx
  20.         sub rax, r12
  21.         mov rsi, rax
  22.         call sort
  23.         lea rax, [rbx * 8]
  24.         sub rsp, rax
  25.         mov r11, rsp
  26.         mov r8, 0x0
  27.         mov r9, 0x0
  28.         mov r10, 0x0
  29.         lea rdi, [rbp + r12 * 8]
  30.         lea rsi, [rbp + rbx * 8]
  31. merge:
  32.         lea rax, [rbp + r8 * 8]
  33.         cmp rdi, rax
  34.         je first_end
  35.         mov rcx, [rax]
  36.         lea rax, [r12 + r9 * 1]
  37.         lea rax, [rbp + rax * 8]
  38.         cmp rsi, rax
  39.         je second_end
  40.         mov rdx, [rax]
  41.         cmp rcx, rdx
  42.         jle second
  43. first:
  44.         lea rax, [r11 + r10 * 8]
  45.         mov [rax], rdx
  46.         add r9, 0x1
  47.         add r10, 0x1
  48.         jmp jump
  49. second:
  50.         lea rax, [r11 + r10 * 8]
  51.         mov [rax], rcx
  52.         add r8, 0x1
  53.         add r10, 0x1
  54. jump:
  55.         jmp merge
  56. first_end:
  57.         lea rax, [r12 + r9 * 1]
  58.         lea rax, [rbp + rax * 8]
  59.         cmp rax, rsi
  60.         je after_merge
  61.         mov rdx, [rax]
  62.         lea rax, [r11 + r10 * 8]
  63.         mov [rax], rdx
  64.         add r9, 0x1
  65.         add r10, 0x1
  66.         jmp first_end
  67. second_end:
  68.         lea rax, [rbp + r8 * 8]
  69.         cmp rax, rdi
  70.         je after_merge
  71.         mov rcx, [rax]
  72.         lea rax, [r11 + r10 * 8]
  73.         mov [rax], rcx
  74.         add r8, 0x1
  75.         add r10, 0x1
  76.         jmp second_end
  77. after_merge:
  78.         mov rax, 0x0
  79. fill:
  80.         cmp rbx, rax
  81.         je repair_stack
  82.         lea rcx, [r11 + rax * 8]
  83.         mov rdx, [rcx]
  84.         lea rcx, [rbp + rax * 8]
  85.         mov [rcx], rdx
  86.         add rax, 0x1
  87.         jmp fill
  88. repair_stack:
  89.         lea rax, [rbx * 8]
  90.         add rsp, rax
  91. end:   
  92.         pop r12
  93.         pop rbp
  94.         pop rbx
  95.         ret
  96.