Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Разработка программы для ГМ.Содержание книги
Поиск на нашем сайте
Отметим, что программа для ГМ должна быть написана на языке символического кодирования, т.е. на уровне ее ассемблера. Поэтому требуется достаточно большая детализация выполняемых действий и описания данных. Формально, на данном этапе, мы можем пока не учитывать особенности реализации этих команд на реальной ЭВМ (РМ), а сконцентрировать внимание на функциях разрабатываемых команд ГМ. Однако, в действительности, разработчику требуется учитывать все эти факторы, включая и те, которые диктуются особенностями реализации программы на РМ. Например, при разработке команд значение разрядности ГМ (параметр fw) практически не фигурирует в их алгоритмах. Но как только встанет задача их реализации на РМ, свойства fw (такие как, кратность или не кратность значения fw байту или полубайту РМ) могут оказать существенное влияние не только на алгоритмы реализации команд ГМ, но и на их номенклатуру. Поэтому, данный этап является наиболее сложным и ответственным.
Определение данных. Разработку программы ГМ начнем с определения данных для нее. 1. DW_ name,n Директива определения n слов ГМ, первому из них присваивается имя name. Если n=1, то этот параметр можно не указывать. С помощью этой директивы могут объявляться массивы,переменные и регистры общего назначения ГМ. 2. DB_ name,str,n Директива определения строки символов ГМ с именем name. Если параметр n не указан, то резервируется память под строку со значением str, иначе резервируется n слов ГМ, отводимых под строку, а str интерпретируется как подсторка заполнения этой строки. 3. DF_ Fl Директива определения флагового регистра Fl ГМ. 4. CONSTsection Определение секции констант (псевдодиректива) 5. STACKsection n Определение стека; n – размер стека. 6. DATAsection Определение начала секции данных. 7. ENDdata Определение конца секции данных. 8. CODEsection Определение начала секции кода. 9. ENDcode Определение конца секции кода.
Определие команд ГМ. Команды ГМ формируются на основе анализа тех необходимых действий, которые стали очевидными при создании программы Prototip2. 1. START Команда начальной инициализации программы. 2. ClrScr Команда очистки экрана. 3. Write txt Команда вывод заданного текста txt на экран. 4. Move dest,source,n Команда копирования области памяти source в область памяти dest, n – число копируемых слов ГМ. 5. ClReg R Команда очистки регистра или переменной. 6. MovI R,%c Пересылка непосредственного значения c в регистр или переменную. 7. MovSR R,S,i Пересылка память-регистр,i индексирует память S(R <- S[i]). 8. MovRS S,R,i Пересылка регистр-память,i индексирует память S(S[i] <- R). 9. Mov_ v,w Команда пересылки v <- w, где v и w могут быть регистрами или одиночными переменными. 10. NEW p Команда резервирования нового узла. В р возвращается указатель на вновь созданный узел. Неявно использует и автоматически модифицирует указатель ih. 11. CMP_ v,w Команда сравнения и установки флагов. Флаги устанавливаются по результатам вычитания v-w. 12. JUMP metka Команда безусловного перехода. 13. gmGT metka Команда перехода по условию «больше». 14. gmEQ metka Команда перехода по условию «равно». 15. INC_ R Команда инкрементирования (R:=R+1), где R – регистр или одиночная переменная. 16. WriteUz p Команда вывода узла списка, р – указатель на узел. 17. ReadKey Команда ожидания нажатия клавиши. 18. FINISH Команда завершения работы программы
Ниже приведена программа для ГМ.
; " Создание отсортированного списка" INCLUDE macros.inc; подключение файла с макросами InitRealComputer; настройка на реальную ЭВМ ; две предыдущие макрокоманды обеспечивают выполнение программы ГМ на реальной ЭВМ
;************* Программа для гипотетической машины *************** 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; конец секции кода ;---------------------------------------------------------------
|
||||
Последнее изменение этой страницы: 2016-12-13; просмотров: 199; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.137.178 (0.007 с.) |