Иллюстрированный самоучитель по Assembler


Использование средств 32-разрядных процессоров в программировании - часть 8


mov DS,AX ;на сегмент данных

mov ESI,offset list ;ESI-> начало массива

mov ECX,1000 ;Число элементов в массиве

start: mov EDX, 0 ;Индекс сравниваемой пары

sort: cmp EDX,ECX ;Индекс пары дошел до

jge stop ;индекса массива? К следующей паре

mov EAX,[ESI+EDX*4+4];Второй элемент пары

cmp [ESI+EDX*4],EAX ;Сравним с предыдущим

jge noswap ;Если первый больше, то хорошо

xchg [ESI+EDXM] , EAX ;Первый меньше. Обменять

mov [ESI+EDXM + 4],EAX ;первый на второй

noswap: inc EDX ;Увеличим индекс пары

jmp sort ;И на сравнение

stop: loop start ;Цикл по всем элементам

mov AX,4C00h

int 21h

main endp

code ends

data segment

list label ;Имя тестового массива

nmb=0 ;Заполним массив на этапе

rept 1000 /трансляции числами от 0

ddnmb /до 990

nmb=nmb+10 /через 10

endm

data ends

stk segment stack

dw 128 dup (0)

stk ends

end main

Алгоритм пузырьковой сортировки предусматривает выполнение двух вложенных циклов. Во внутреннем цикле сравниваются пары элементов. Первый элемент берется по адресу [ESI + EDX * 4], второй - по следующему адресу [ESI + EDX * 4 + 4]. Если второй элемент больше первого, происходит обмен значений этих элементов, и элемент с меньшим значением "всплывает" на одно место выше (т.е. перемещается по большему адресу). После этого увеличивается индекс пары и выполняется сравнение второго элемента со следующим. Если оказывается, что следующий элемент больше предыдущего, они меняются местами. В результате элемент с самым маленьким значением всплывает на самый верх списка.

Внутренний цикл, пройдясь по всем парам, повторяется сначала, обеспечивая всплывание следующего по величине элемента. Каждый следующий проход внутреннего цикла требует на 1 меньше шагов, чем предыдущий. После завершения упорядочивания элементы выстраиваются по возрастающим адресам в порядке уменьшения их значений.

В примере 4-3 тестовый массив данных образован из возрастающих (на 10) чисел от 0 до 990. В результате упорядочивания они должны расположиться в обратном порядке, от больших к меньшим. В примере не предусмотрены средства вывода на экран элементов массива, поэтому его изучение следует проводить в отладчике, наблюдая всплывание каждого элемента.




Начало  Назад  Вперед



Книжный магазин