Сборник по задачам и примерам Assembler


Односвязные списки - часть 5


.code

;здесь мы инициализировали и работали со списком

;список упорядочен по возрастанию

:ищем место вставки

;1 - выбираем первую ячейку

mov ebx.HeadJist .

хогеах.еах ;в еах будет указатель на предыдущий элемент ;2 последняя ячейка? ml: cmpebx.Offffffffh

je noJtern :список пустой :3 - новая ячейка до очередной выбранной? ovd1.CebxJ.info cmpdl.ins_item.info ja nextjtem cmpeax. jne into ;вставить первым

createjtem i temj i st. H_Head :макрос создания элемента в куче mov Headjist.edx :адрес нового в голову списка

mov [edx].next.ebx ;настройка указателей jmpexit :на выход

вставить внутрь списка

into: createjtem item_list.H_Head :макрос создания элемента в куче mov [еах].next.edx :адрес нового в поле next предыдущего mov [edx].next.ebx :в поле next нового адрес текущего jmp exit :на выход

: выбор очередного элемента nextjtem: moveax.ebx:aflpec текущего в еах mov ebx. [ebx].next jmp ml

:4 - список пуст или нет больше элементов no J tern: cmpeax.O

jne no_empty :список непустой :список пуст

mov Headjlist.edx :адрес нового в голову списка

mov [edx].next.Offffffffh:это будет пока единственный элемент в списке

jmpexit :на выход

no_empty: :список не пуст - новая ячейка в конец списка

mov [еах].next.edx

mov [edx].next.Offffffffh:это будет последний элемент в списке

exit: :общий выход

Исключение из списка

Алгоритм предполагает наличие двух указателей — на текущую и предыдущую ячейки. Для разнообразия этот алгоритм предполагает прямой порядок следования элементов в списке. В качестве упражнения читателю предлагается, если нужно, переписать приводимый ниже фрагмент для обратного порядка следования элементов.

:описание элемента списка

itemjist struc -.элемент списка

next dd 0 :адрес следующего элемента

info db 0 содержательная часть (в нашем случае - символ)

ends

.data

search_b db 0 критерий поиска (поле info экземпляра структуры itemjist)

Headjist dd Offffffffh указатель на начало списка (Offffffffh - список пуст)

.code

:здесь мы инициализировали и работали со списком




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