Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
асвт.курсовая.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Структура входных и выходных данных:

Как уже было сказано в предыдущем разделе, входные данные представляются набором битов, следовательно, их можно аппаратно представить в виде набора кнопок, подключённых непосредственно к интерфейсу:

Предполагается, что пользователь нажимает кнопки (кроме кнопки «пауза») до начала работы МПС, при этом, достаточно нажать по одной кнопке из групп «События» и «Места действия», а из групп «Типажи» и «Имена» должно быть нажато по 3 кнопки. После этого запускается МПС, генерирующая текст на основании заданных начальных условий, и выводит этот текст на дисплей:

Дисплей имеет 8-разрядный вход, что вполне допускает представление символа всего одним байтом.

Структура управляющего слова КР580ВВ55:

7

6

5

4

3

2

1

0


Разряд 0: Порт С(0…3): «1» - ввод, «0» - вывод.

Разряд 1: Порт В: «1» - ввод, «0» - вывод.

Разряд 2: выбор режима: «0» - режим0, «1» - режим1,

Разряд 3:Порт С(4…7): «1» - ввод, «0» - вывод.

Разряд 4: Порт А: «1» - ввод, «0» - вывод.

Разряды 5 и 6:Задание режима: «00» - режим0, «01» - режим1, «10» или «11» - режим2.

Разряд 7:Задание режима «1».

Описание структуры входной и выходной информации:

Хотя для аппаратной реализации представленный выше формат данных достаточно удобен, программная обработка таких данных затруднительна. Следовательно, при получении входных данных, их следует преобразовать в формат, удобный для работы, при помощи специальной подпрограммы (схема и код которой будет подробно рассмотрены в разделах «разработка и описание алгоритма» и «разработка принципиальной схемы алгоритма»). В данном же разделе будет сделано распределение памяти, которое уже можно производить на основе данных, представленных в предыдущих разделах. Так как представленное здесь распределение является окончательным, назначение некоторых ячеек памяти (в основном это переменные-счётчики и переменные для хранения промежуточных результатов) будет понятно лишь при подробном ознакомлении с алгоритмом. Тем не менее, учитывая структуру входных данных, мы точно можем знать, что нам понадобятся:

  1. Массив персонажей, каждый элемент которого включает имя персонажа и его типаж;

  2. Переменные, характеризующие место действия;

  3. Переменная, характеризующая происходящее событие.

Кроме того, на основе того, как будут представляться выходные данные, мы можем утверждать, что нам понадобится в ОЗУ буфер для результирующего текста, т.к. этот текст должен сохраняться всё время, пока будет нажата кнопка «пауза». Распределение памяти ОЗУ выглядит следующим образом:

(Здесь и далее все адреса приведены в шестнадцатеричном формате)

0000

стек

0001

0002

0003

0004

0005

0006

0007

0008

0009, 000A

CT1

Счётчик 1

000B, 000C

CT2

Счётчик 2

000D, 000E

CT3

Счётчик 3

000F

DIR

Порядок перебора (1-3 или 3-1)

0010, 0011

RES

Временная переменная 1

0012

Резерв

0013, 0014

TMP

Временная переменная 2

0015, 0016, 0017

OK1

Таблица окончаний

0018, 0019, 001A

OK2

001B, 001C, 001D

OK3

001E, 001F, 0020

OK4

0021, 0022, 0023

OK5

0024, 0025, 0026

OK6

0027, 0028, 0029

OK7

002A, 002B, 002C

OK8

002D, 002E, 002F

OK9

0030, 0031, 0032

OK10

0033

FL

Число/падеж

0034, 0035

OBJ

Адрес объекта

0036, 0037

SUB

Адрес субъекта

0039

NPROC

№ текущего события

003A, 003B

ITM1

Адреса названий предметов

003C, 003D

ITM2

003E, 003F

ITM3

0040, 0041

ITM4

0042, 0043

ITM5

0044, 0045

ITM6

0046, 0047

ITM7

0048, 0049

ITM8

004A

CC

Текущий копируемый символ

004B, 004C

CH1N

Массив персонажей: (имя j)

004D

CH1R

(звание j)

004E

CH1S

(состояние j)...

004F, 0050

CH2N

0051

CH2R

0052

CH2S

0053, 0054

CH3N

0055

CH3R

0056

CH3S

0057, 0058

ENV

Адрес текста с описанием места действия

0059, 005A

BP

Указатель записи в буфер

005B

Буфер текста...

Описание идентификаторов:

  • Переменные FL, СС и таблица окончаний (представляющая собой набор из 30 символов) требуются для орфографической обработки генерируемого текста.

  • Переменная ENV и набор предметов (ITM1 … ITM8) характеризуют место действия.

  • Переменная NPROC – это числовой идентификатор происходящего события.

  • Переменные с префиксом CH – это элементы массива персонажей.

  • Переменные OBJ и SUB нужны для взаимодействия персонажей друг с другом. SUB хранит адрес воздействующего персонажа (субъекта действия), а OBJ, соответственно, адрес персонажа, на которого действие направлено (объект действия)

  • BP – это переменная, хранящая адрес последней свободной ячейки в буфере с текстом, т.е. это указатель записи.

  • Начиная с ячейки 005B, расположен буфер для текста, и он занимает всю оставшуюся память.

Оценкой сверху было установлено, что, в среднем, сгенерированный текст занимает ~3500 байт (1 символ представляется одним байтом). Соответственно, округляя сумму требуемого размера буфера текста и объёма, занимаемого переменными, до ближайшей степени двойки, получаем объём памяти ОЗУ, равный 4096 байт.

Распределение памяти ПЗУ:

В ПЗУ должны содержаться как исходные отрывки текста, из которых будет сформирован результирующий текст, так и код всех программных модулей. Очевидно, что, так как текст занимает достаточно много памяти, лучше взять ПЗУ как можно большей вместительности. После, опять же, оценки сверху, был выбран объём памяти, равный 32768 байт.

В начале памяти ПЗУ будет располагаться код программных модулей и подпрограмм:

адрес главного программного модуля: 0000

адрес INIT: 0013

адрес BEGIN: 0258

адрес ITERATION: 02EC

адрес END: 0436

адрес OUTPUT: 050F

адрес TIMER: 0564

адрес TEXTLOAD: 056E

адрес SEARCH: 08FC

адрес REPRESENT1: 0947

адрес REPRESENT2: 0997

адрес REPRESENT3: 09E7

адрес REPRESENT4: 0A37

адрес REPRESENT5: 0A9B

адрес ANSWER1: 0AEB

адрес ANSWER2: 0B45

адрес ANSWER3: 0B9F

адрес ANSWER4: 0BF9

адрес REACT11: 0C00

адрес REACT12: 1000

адрес REACT13: 1400

адрес REACT14: 1800

адрес REACT15: 1C00

адрес REACT21: 2000

адрес REACT22: 2400

адрес REACT23: 2800

адрес REACT24: 2C00

адрес REACT25: 3000

адрес REACT31: 3400

адрес REACT32: 3800

адрес REACT33: 3C00

адрес REACT34: 4000

адрес REACT35: 4400

адрес REACT41: 4800

адрес REACT42: 4C00

адрес REACT43: 5000

адрес REACT44: 5400

адрес REACT45: 5800

Оценка сверху для размера каждого программного модуля (или подпрограммы) бралась из соотношения ~1-2 команды на каждый блок соответствующей блок-схемы и по 3 байта на команду.

После кода всех подпрограмм и программных модулей будут расположены отрывки текста, из которых будет формироваться результирующий рассказ. Для большей наглядности следует привести их не в виде таблицы, как для ОЗУ, а в виде, непосредственно, отрывков текста, каждому из которых предшествует адрес первого символа в нём.

В конце каждого отрывка текста выставляется завершающий символ (показан как 0);

Некоторые слова приведены без окончаний, вместо окончаний в них подставлены служебные символы (@, #, $ и т. д.), которые анализируются специальной подпрограммой и вместо них подставляются окончания, соответствующие числу и падежу, в котором это слово употреблено в тексте.

Таблицы окончаний приведены в самом начале ПЗУ (адреса 5C00 – 5D67):

[5C00]

[5C03]ий

[5C06]я

[5C09]ой

[5C0C]ий

[5C0F]е

[5C12]ь

[5C15]а

[5C18]о

[5C1B]

[5C1E]а

[5C21]ого

[5C24]и

[5C27]ого

[5C2A]его

[5C2D]я

[5C30]и

[5C33]ы

[5C36]а

[5C39]а

[5C3C]у

[5C3F]ому

[5C42]е

[5C45]ому

[5C48]ему

[5C4B]ю

[5C4E]и

[5C51]е

[5C54]у

[5C57]у

[5C5A]а

[5C5D]ого

[5C60]ю

[5C63]ой

[5C66]его

[5C69]е

[5C6C]ь

[5C6F]у

[5C72]о

[5C75]

[5C78]ом

[5C7B]им

[5C7E]ёй

[5C81]ым

[5C84]им

[5C87]ем

[5C8A]ью

[5C8D]ой

[5C90]ом

[5C93]ом

[5C96]е

[5C99]ом

[5C9C]е

[5C9F]ом

[5CA2]ем

[5CA5]и

[5CA8]и

[5CAB]е

[5CAE]е

[5CB1]ах

[5CB4]ы

[5CB7]ие

[5CBA]и

[5CBD]ые

[5CC0]ие

[5CC3]я

[5CC6]и

[5CC9]ы

[5CCC]а

[5CCF]ы

[5CD2]ов

[5CD5]их

[5CD8]и

[5CDB]ых

[5CDE]их

[5CE1]й

[5CE4]ей

[5CE7]

[5CEA]ен

[5CED]ов

[5CF0]ам

[5CF3]им

[5CF6]ям

[5CF9]ым

[5CFC]им

[5CFF]ям

[5D02]ям

[5D05]ам

[5D08]ам

[5D0B]ам

[5D0E]ов

[5D11]их

[5D14]и

[5D17]ые

[5D1A]их

[5D1D]я

[5D20]и

[5D23]ы

[5D26]а

[5D29]ы

[5D2C]ами

[5D2F]ими

[5D32]ями

[5D35]ыми

[5D38]ими

[5D3B]ями

[5D3E]ями

[5D41]ами

[5D44]ами

[5D47]ами

[5D4A]ах

[5D4D]их

[5D50]ях

[5D53]ых

[5D56]их

[5D59]ях

[5D5C]ях

[5D5F]ах

[5D62]ах

[5D65]ах

[5DA4]Балоун~0

[5DAC]Ходоунск@0

[5DB6]Швейк~0

[5DBD]Кац~0

[5DC2]Манштейн~0

[5DCC]Лукаш~0

[5DD3]окоп}0

[5DD9]земл#0

[5DDF]бруствер}0

[5DE9]пуст$ ящик} от боеприпасов0

[5E04]соседн% окоп}0

[5E2C]взвод} англичан, незаметно подползающих к окопу, чтобы совершить диверсию0

[5E76]вагон}0

[5E7D]пол}0

[5E82]стол}0

[5E88]сидени^0

[5E90]тамбур}0

[5EB8]взвод} французов, сидевших в засаде у дороги, чтобы пустить эшелон под откос0

[5F05]зал}0

[5F0A]пол}0

[5F0F]стойк*0

[5F16]стул}0

[5F1C]двер&0

[5F44]политическ@ информатор~, зашедш% в пивную, чтобы пополнить казематы очередной партией шпионов и клеветников0

[5FB0]пол^0

[5FB5]земл#0

[5FBB]бревн{0

[5FC2]пуст$ ящик} от боеприпасов0

[5FDD]лес}0

[6005]русск@ шпион~, наблюдавший за учениями0

[602C]Лето 1915 года было тёплым и солнечным. Таким тёплым, что мертвецы, свисающие с колючей проволоки, начинали разлагаться, издавая мерзкий трупный запах и повергая в смятение доблестных бойцов 72-го пехотного полка, расположившегося в окопах неподалёку от Домажлиц, где уже третий месяц славная чешская армия пыталась взять штурмом деревушку Мерклино.0

[618B]Весной 1914 года доблестный 45-й артиллерийский полк ехал эшелоном во Вршовицы. Дорога была спокойной и долгой. Машинист, напившись ореховки, спокойно кемарил у себя в кабине. Ничто не предвещало беды. Солдаты в вагонах маялись бездельем.0

[627C]Солнечным июньским днём в пивной "У Чаши", находящейся в деревушке Будейовицы, куда был расквартирован 28-й кавалерийский полк его императорского величества Франца-Иосифа, стоял такой шум, что несчастные жители деревни начали опасаться: Уж не переместилась ли сюда линия фронта?0

[6394]На опушке леса, близ деревни Велкопоповице, расположился 148-й гренадерский полк, находящийся на учениях. Собственно, учения должны были начаться ровно в полдень, однако солнце уже клонилось к горизонту, но сигнал о начале учений так и не поступал. Ведь сюда ещё не дошла весть о том, что фельдмаршал Иосиф-Фердинанд, который должен был командовать театром военных действий, находясь в сильном подпитии, забил свою курительную трубку пушечным порохом, из-за чего и лишился головы. Начинало смеркаться, солдаты скучали.0

[659D]Но вдруг, совершенно неожиданно, всё вокруг начало взрываться и солдатам на голову посыпалась шрапнель. А виной всему были пьяные немецкие наводчики артиллерии, которые с перепоя приняли этот полк за банду африканских зусулов и вдарили по ним из всех стволов.0

[66A2]Вдруг, неожиданно для всех, из 0

[66C3] вывалилась толпа пьяных венгерских сапёров, настроенных весьма недружелюбно. Чехи и венгры всегда недолюбливали друг друга, и мордобои между ними доходили частенько до того, что по количеству человеческих потерь их можно было сравнить лишь с миномётными обстрелами. Вот и сейчас началась такая драка, что уже невозможно было отличить своих от чужих.0

[6823]И тут, откуда ни возьмись, в 0

[6842] вошёл начальник тайной полиции в сопровождении нескольких шпиков. По его опухшей красной физиономии было видно, что он пьян в дрова, что и объясняло его присутствие в столь неподобающем месте. Все присутствующие, естественно, висилицы опасались куда сильнее, чем вражеских штыков, поэтому никто не посмел тревожить начальника. Напротив, все даже притихли.0

[69A8]После того, как разрывы снарядов затихли, 0

[69D3]Когда побоище прекратилось, 0

[69F0]После того, как ситуация прояснилась, 0

[6A18]Когда атака закончилась, 0

[6A32].0

[6A34], 0

[6A37], а 0

[6A3C] был посмертно награждён железным крестом за то, что отдал жизнь во славу отечества0

[6A92], находясь в полевом госпитале, подхватил дизентерию, от которой и умер0

[6ADC], валяясь без сознания, получил пулю в голову0

[6B0D] был опубликован на страницах фронтовой газеты, как пример героизма и находчивости0

[6B60] был посмертно приговорён к казни через повешенье за саботаж на поле боя0

[6D94]В центре 0

[6D9E] сидел толстый бородач - денщик 0

[6DC0] и поглощал кнедлики с кислой капустой, которыми он разжился в полевой кухне. 0

[6E0F]Вдалеке от всех, не обращая внимания на происходящее, сидел полковой писарь 0

[6E5C], с интересом читая третий том научных трудов Гюйгенса, посвящённый дифракции электронов на кристаллических решётках. 0

[6ED3]Прямо на 0

[6EDD], давно уже не понимая, где он находится, валялся пьяница обер-фельдкурат 0

[6F28]. Он хлестал креплёное церковное вино, бочонок с которым повсюду за ним таскал его несчастный денщик. 0

[6F8F] потягивал чай с ромом и, как всегда, находясь в жутком настроении, вымещал свою злость на подчинённых: "Эй, ты, свинья" - орал он на 0

[7016] - "ну-ка сбегай в полевую кухню и принеси мне коньяку, не то отдам тебя под трибунал!". 0

[7071]За 0

[7075] слева сидел старый полковник 0

[7094] и покуривал трубочку. Как и большинство полковников, он давно выжил из ума, и поэтому в данный момент он мирно беседовал с самим собой, многозначительно жестикулируя, и поддакивая своему воображаемому собеседнику. 0

[716C]Прогремевший рядом с 0

[7182] взрыв, а так же алкоголь, ударивший ему в голову, сбили его с ног. Он рухнул на землю, сильно ударившись при этом головой, в результате чего у него помутился рассудок. 0

[722C]Тем временем подпоручик, увидев ужасную неорганизованность своих подчинённых, попытался поднять боевой дух солдат. И единственным решением этой задачи, пришедшим в его голову, помутнённую алкоголем и ударом о землю, было: Поднявшись с земли и вытянувшись во весть рост заорать на 0

[7345]: "Ты, чешская скотина, обещаю тебе, что не пройдёт и недели, как ты будешь болтаться в петле!". 0

[73A7]Совсем забывшись в своём героическом порыве, подпоручик 0

[73E0] уже не обращал внимания на свистящие у него над головой осколки снарядов, за что и поплатился - ему отрвало голову шрапнелью. 0

[7460]Не долго думая, подпоручик 0

[747C] отхлебнул ром из бутылки и во всю глотку заорал: "Взвода! В атаку! Умрём за нашего императора!". И тут чешские солдаты пошли в атаку...0

[7506]А тем временем, прогремевший рядом с 0

[752C] взрыв поджёг разлитый им ром, и подпоручик с криком забегал по 0

[756D], полыхая, словно факел, чем и обратил в бегство 0

[759F]Стараясь не опозорить себя в глазах высших чинов, 0

[75D2] с храбрым видом спрятался под 0

[75F2]А вот в 0

[75FB], под которым скрывался 0

[7614], попала шрапнель, в результате чего подпоручик погиб во славу отечества. 0