Базовая "сортировка по 3 значениям":
if(a > b) swap(a, b)
if(a > c) swap(a, c) // a must be the smallest value now
if(b > c) swap(b, c) // b must be the second smallest value, c must be the biggest value
В 32-битной сборке 80x86 (синтаксис NASM):
cmp eax,ebx
jna .l1
xchg eax,ebx
.l1:
cmp eax,ecx
jna .l2
xchg eax,ecx
.l2:
cmp ebx,ecx
jna .l3
xchg ebx,ecx
.l3:
; eax must contain smallest value, ebx the second smallest, ecx the biggest