То, что вы ищете, это «перевернутая» Bubble Sort (Конечно, вы можете использовать любой алгоритм сортировки, который вы хотите, но это просто для примера).Я не уверен, какой ассемблер вы используете, но вот короткая функция ассемблера, которая выполнит что-то вроде n
int32_t целых чисел, хранящихся в массиве / списке arr
.(Этот пример был написан в NASM)
;int *sort(int *arr,int n);
sort:
push ebp
mov ebp,esp
mov edx,[ebp+12]
.loop1:
mov esi,[ebp+8] ;arr ptr
mov ecx,[ebp+12] ;n number of ints
.loop2:
mov eax,[esi] ;compare
mov ebx,[esi+4]
cmp eax,ebx
jg .skip
mov [esi],ebx ;swap
mov [esi+4],eax
.skip:
add esi,4 ;perform loop checks
dec ecx
cmp ecx,1
ja .loop2
dec edx
ja .loop1
mov eax,[ebp+8] ;return arr
mov esp,ebp
pop ebp
ret
Пожалуйста, имейте в виду, что этот пример не был действительно оптимизирован (например, он повторяет слишком много раз по всему массиву).Иногда (особенно на языках ассемблера), чем меньше, тем лучше.Вместо смещения указателя с помощью ecx / edx, вы можете увеличить указатель массива (или его копию) и выполнить сравнение, используя это напрямую.Таким образом, вам не нужно одновременно отслеживать регистр счетчика и указатель.:)