Я пытаюсь реализовать функцию сортировки слиянием. Вот рабочий код на C ++. (Вспомогательная функция merge () довольно длинная и не связана с моим вопросом, поэтому я ее не включила).
void mergeSort(int arr[], int l, int r) {
if (l < r) {
int m = (l + r)/2;
mergeSort(arr, l, m);
mergeSort(arr, m+1, r);
merge(arr, l, m, r);
}
}
Вот мой код сборки для mergeSort.
mergeSort:
; rsi = left
; rdx = mid
; rcx = right
xor rax, rax ; zero out the return register
mov rcx, rdx ; set rxc to the right index in array, which is passed in through rdx
start:
xor rdx, rdx ; zero out rdx, mid = (left + right) / 2
add rdx, rsi
add rdx, rcx
shr rdx, 1
sub rsp, 16
mov [rsp+8], rsi
mov [rsp], rcx
mov rcx, rdx
cmp rsi, rcx
jl start
mov rsi, [rsp+8]
mov rcx, [rsp]
mov rsi, rdx
cmp rsi, rcx
jl start
push r10
push r11
call merge
pop r11
pop r10
add rsp, 16
done:
ret
Я не уверен, что не так с этим, так как я думаю, что я правильно следую коду для слияния c ++