Заранее скажу, я ламак в асме, прошу не осуждать за столь тупую просьбу
Был бы очень благодарен, если бы кто-нибудь помог дописать пузырьковую сортировку:
Uses crt;
Const
mas : Array [0..9] of Byte = (2, 1, 24, 3, 53, 7, 18, 114, 11, 17);
Var
i : Integer;
Begin
asm
lea di,mas
lea si,mas
mov cx,9
@loop2:
mov al,[di]
inc di
mov ah,[di]
inc di
cmp al,ah
jng @endif
{Обмен}
mov bl,al
mov dl, [di-1]
mov [di-2], dl
mov [di-1], al
{Конец обмена. Этот обмен надо проделать в цикле.}
@endif:
loop @loop2
end;
end.
for j := i downto 1Я уже как только не пробовал дописать цикл назад с заменами, не выходит <_<
begin
if (mas[j] <= mas[j - 1]) then
{обменять}
else
break;
end;
LEA BX,[mas]
MOV DI,BX
ADD BX,9;Сохраним адрес конца массива
@@0:
MOV SI,DI
@@1:
INC SI
MOV AL,[DI]
CMP [SI],AL
JGE @@2
XCHG AL,[SI]
MOV [DI],AL
@@2:
INC SI
CMP SI,BX
JB @@1
INC DI
CMP DI,BX
JB @@0
вот сортирует только я не помню это вроде модернизированный
пузырь
Прикрепленные файлы
SR_MAS_M.zip ( 977 байт )
Кол-во скачиваний: 408
Shadow, спасибо конечно, но у тебя как-то сложно, и пишем мы на встроенном ассемблере, да и проделать мне надо не шейкер-сотрировку, а простую пузырьковую.
BlackShadow, ассемблер я "изучал" две пары, по 15 минут на каждой. И как после этого можно шарить?
За сортировку спасибо. Вот только поясни, если не в лом, что делает XCHG?
XCHG
обмен двух значений между регистрами или между регистром и памятью
--------
Виктор Юров Assembler Специальный справочник
Ага, благодарен
Ещё катит в случае регистр-регистр, но никак иначе. Более быстрый и короткий код получается, если один и операндов - аккумулятор (AL, AX, EAX).
dushik, не принимай всё всеръёз