Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






CONSTsection





kuz = 10; к-во узлов списка (kuz=1..127)

maskG = 1; маски для анализа флагового регистра на «больше»,

maskL = 2; «меньше» и

maskE = 4; «равно»

nil = 0FFh; признак конца списка

;---------------------------------------------------------------

STACKsection 100; объявление стека

;---------------------------------------------------------------

 

DATAsection; раздел описания данных ГМ

DW_ R0; R0-R3 -регистры общего назначения ГМ

DW_ R1;

DW_ R2;

DW_ R3;

DW_ Rtmp; рабочий регистр

DW_ h; указатель головы списка

DW_ t; указатель на текущий узел списка

DW_ p; указатель на предыдущий узел

DW_ s; указатель на новый узел

DW_ ih; индекс для резервирования нового узла

DW_ cNIL; переменная для хран-я знач-я NIL

DW_ i; рабочий индекс

DW_ Buf,kuz; буфер - источник информации для списка

DW_ Spis,2*kuz; память под список

DB_ eoLn,EndLine; признак конца строки для вывода

DB_ OutPut,endSTR,2; буфер вывода

DB_ num,'0123456789ABCDEF';табл. перевода в 16с/c

DB_ zag,<' Отсортированный список',EndLine>

DF_ Fl; флаговый регистр ГМ

ENDdata; конец секции данных ГМ

;---------------------------------------------------------------

CODEsection; секция кода ГМ

START; нач. инициализация программы

ClrScr; очистка экрана

Move Buf,Primer,kuz; загрузка буфера исх. инф-ей из сегмента кода

ClReg R1; R1 сч. цикла:= 0

MovI R2,%kuz; к-во узлов -> R2

MovI h,%NIL; h:= NIL

MovI Cnil,%NIL; Cnil:= NIL

ClReg ih; нач. знач-е индекса равно 0

Repeat:; Цикл создания списка

MovSR R0,Buf,R1; очередной inf взяли из Buf -> R0

NEW s; создали новый узел

MovRS Spis,R0,s; s^.i:=R0; inf-> в новый узел

Mov_ t,h; t:=h;

MovI p,%NIL; p:=nil

While1:; Цикл поиска и вставки узла в список

CMP_ t,Cnil; While t<> NIL Do

gmEQ EndWhile;

MovSR R3,Spis,t; R3:= t^.i

CMP_ R3,R0; if t^.i > R0

gmGT InsUz; Then InsUz

NextUz:; Else NextUz продолжаем искать место вставки

Mov_ p,t; p:=t

INC_ t; t:=t+1 для получения доступа в поле link

MovSR t,Spis,t; t:=t^.l переход к след. узлу

JUMP While1; повторение цикла поиска

InsUz:; Реализация различных вариантов вставки

CMP_ p,Cnil; If p=Nil Then InsFirst вставка в начало

gmEQ InsFirst; Else InsMed вставка в середину

InsMed:; вставка в середину списка

INC_ p; p:=p+1 для получения доступа в поле link

MovSR R0,Spis,p; R0:= p^.l

MovRS Spis,s,p; p^.l:= s

INC_ s; s:=s+1 для получения доступа в поле link

MovRS Spis,R0,s; s^.l:= R0

JUMP EndRepeat; завершение этого варианта вставки

InsFirst:; вставка в начало списка

Mov_ h,s; h:=s

INC_ s; s:=s+1 для получения доступа в поле link

MovRS Spis,t,s; s^.l:= t

JUMP EndRepeat; завершение этого варианта вставки

EndWhile:; реализация других вариантов

CMP_ p,Cnil; If p=NIL Then Empty - в пустой список

gmEQ Empty; Else InsEnd - в конец списка

InsEnd:; вставка в конец списка

INC_ p; p:=p+1 для получения доступа в поле link

MovRS Spis,s,p; p^.l:= s

INC_ s; s:=s+1 для получения доступа в поле link

MovRS Spis,Cnil,s; s^.l:= NIL

JUMP EndRepeat; завершение этого варианта вставки

Empty:; вставка в пустой список

Mov_ h,s; h:=s

INC_ s; s:=s+1 для получения доступа в поле link

MovRS Spis,Cnil,s; s^.l:=NIL

EndRepeat:

INC_ R1; увеличение счетчика цикла

CMP_ R2,R1; сравнение с kuz

gmGT Repeat; If счетчик < kuz Then Repeat на начало цикла

Write zag; вывод заголовка списка

Mov_ t,h; t:=h

Wcycl:; Прохождение и печать списка

CMP_ t,Cnil; While t <> NIL Do

gmEQ endPRN

WriteUz t; Печать узла

INC_ t; t:=t+1 для получения доступа в поле link

MovSR t,Spis,t; t:=t^.l

JUMP Wcycl; Goto Wcycl

endPRN:

ReadKey; ждать нажатия клавиши

FINISH; завершение программы

ENDcode; конец секции кода

;---------------------------------------------------------------

 







Date: 2015-10-21; view: 301; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию