Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2013, 14:36   #1
bnoazx005
 
Регистрация: 18.12.2012
Сообщений: 4
По умолчанию Ошибка в работе сортировки массива

Пишу программу,сортирующую массив из байтных элементов в порядке убывания. Алгоритм сортировки - шейкером(перемешиванием). Сам алгоритм написан на inline ассемблере Turbo Pascal 7. Если генерировать числа до 100,то сортирует вроде правильно,но если поставить больше,то начинается ерунда. Алгоритм переписывал несколько раз,но все одна и та же проблема. Что это может быть?
Код:
const n = 20;

var a:array [1..n] of byte;
    p:pointer;
    i:byte;

begin
    randomize;

    writeln('source:');
    for i:=1 to n do
    begin
        a[i]:= random(100);
        write(a[i]:4);
    end;

    p:= @a;

    asm
        push es

        les di,p {Ї®«гз*Ґ¬ *¤аҐб ¬*ббЁў*}

        xor bx,bx {«Ґў*п Ја**Ёж*}
        mov dx,N
        dec dx {Їа*ў*п Ја**Ёж*}

        @c1:
            mov cx,dx
            sub cx,bx

            mov si,di
            add si,bx

            @c2:
                mov al,[es:si]
                mov ah,[es:si+1]

                cmp ah,al
                jns @m1
                jmp @em

                @m1:
                   mov [es:si],ah
                   mov [es:si+1],al
                @em:
                   inc si
            loop @c2

            mov cx,dx
            sub cx,bx

            mov si,di
            add si,dx

            @c3:
                mov al,[es:si]
                mov ah,[es:si-1]

                cmp al,ah
                jns @m2
                jmp @em2

                @m2:
                   mov [es:si],ah
                   mov [es:si-1],al
                @em2:
                   dec si
            loop @c3

            inc bx
            dec dx

            mov cx,dx
            sub cx,bx
        loop @c1

        pop es
    end;

    Writeln('sorted:');
    for i:=1 to n do
        Write(a[i]:4);

    readln;
end.
bnoazx005 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
методы сортировки данных массива DreamerEvermore Помощь студентам 0 26.02.2012 11:37
Процедура сортировки массива по возрастанию amidatong Паскаль, Turbo Pascal, PascalABC.NET 2 21.03.2011 21:04
Алгоритм сортировки одномерного массива JOFRIF Общие вопросы C/C++ 4 19.07.2009 17:23
ошибка в процедуре сортировки строк массива halfpenny Паскаль, Turbo Pascal, PascalABC.NET 1 17.06.2009 00:36
Из сортировки массива в сортировку матрици XXXimpulsXXX Помощь студентам 2 12.10.2008 15:11