epic win
void sort_v(int *a, int n) //сортировка вставками на ассемблере (возрастание)
{
_asm
{
mov esi, a
mov ecx, n
for1:
mov esi, a
mov eax, n
sub eax, ecx //находим i
mov edx, 4
push eax //сохраняем i
mul edx
mov ebx, [esi+eax] //key=a[i], где i идет с единицы
mov edx, [esi+eax-4] //само a[j]
//--------
pop eax //снова достаем i
dec eax //находим j
push edx
push eax
push ecx
mov ecx, 4
mul ecx
add esi, eax //перемещаем указатель памяти на a[j]
pop ecx
pop eax
pop edx
while1:
cmp edx, ebx //и a[j]>key
jng next
mov [esi+4], edx //a[j+1]=a[j]
cmp eax, 0
je next1
sub eax, 1 //j--
mov edx, [esi-4] //a[j-1]
sub esi, 4 //получаем в памяти a[j-1] (для нового цикла)
jmp while1
next:
inc eax //j+1
next1:
mov esi, a
mov [esi+eax*4], ebx //a[j+1]=key
mov edx, [esi+eax*4]
loop for1
}
}