Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx56 / kursach.docx
Скачиваний:
21
Добавлен:
01.08.2013
Размер:
87.59 Кб
Скачать

7 Алгоритм решения задачи

На блок-схемах показан принцип работы программы. Блок-схема №1 отображает принцип работы всей программы, на ней показан последовательный вызов процедур. На блок-схемах №2 и №3 можно увидеть подробное перечисление последовательности действий процедуры по нахождению нулевой строки и процедуры по выделению определенных битов из выбранных байтов.

7.1 Разработка алгоритма основной программы

В начале программы вызывается процедура открытия файла UK64.dat, где содержится исходная информация о вариантах, представленная в виде дампов памяти. Затем создается файл My.dat. При входе в цикл, выполняющийся 5 раз (так как у меня 5-тый вариант), вызывается процедура Find0, которая ищет нулевую строку, для того, чтобы записать именно нужный вариант. После выхода из цикла вызывается процедура записи нужного дампа памяти в файл My.dat. Затем закрывается файл UK64.dat. После создается ещё один файл Result.dat для записи в нём результата работы программы. Затем вызывается процедура выборки определённых байтов и битов и записи результата в файл Result.dat, после чего закрываются файлы My.dat , Result.dat. На этом программа завершает свою работу.

Рисунок 1 - Блок-схема алгоритма основной программы

7.2 Разработка алгоритма процедуры поиска нулевой строки

После входа в процедуру поиска нулевой строки происходит вход в цикл, который выполняется 16 раз. В нём вызывается процедура чтения данных из файла Uk64.dat. Затем в регистр SI заносим строку, заполненную значениями, считанными с файла (первая строка из 16-ти байт), в DI заносим нулевую строку, состоящую из 16-ти байт, сравниваем их побайтово. Если они совпадают, то происходит сохранение str1, если счётчик обнулился, то выход из процедуры, если нет, то выполняется заново.

Рисунок 2 - Блок-схема алгоритма процедуры поиска нулевой строки

7.3 Разработка алгоритма процедуры формирования слов

При входе в процедуру вызывается процедура установки указателя файла на 7 элемент файла, т.е. 7 байт. Затем обнуляется регистр DI. После этого начинается первый цикл в этой процедуре, который будет повторяться 640 раз (т.к. размер файла My.dat - 10240 байт, и каждая строка состоит из 16 байт, т.е. 10240/16=640). Вызывается процедура чтения из файла My.dat. Затем в 7 байте, на который ранее был установлен указатель, производится логический сдвиг вправо на 2 бита. Затем если флаг CF установлен в 1, то происходит переход на метку, в которой проверяется и устанавливается бит и помещается в переменную word1 по адресу di. Если же CF сброшен, то выполняется команда сброса бита. После происходит переход на метку, в которой вызывается процедура установки указателя файла на следующий 9 байт. Затем вызывается процедура чтения из файла My.dat. Затем в 9 байте, на который ранее был установлен указатель, производится логический сдвиг вправо на 8 битов. Далее если значение флага CF установлен, то происходит переход на метку, в которой проверяется и устанавливается бит и помещается в переменную word1, необходимую для формирования слова. Если же CF сброшен, то выполняется команда сброса бита. После происходит переход на метку, в которой DI сравнивается с 16. Если равно, то вызывается процедура записи в Result.dat. Если же не равно, то переходит на метку, в которой вызывается процедура установки указателя файла на 7 байт следующей строки. Цикл повторяется сначала до тех пор, пока cx не станет равным 0.

Вход

SetKursor

DI = 0

Cx = 640

ReadMy

Логический сдвиг вправо на 2 байта 7

3

2

Соседние файлы в папке docx56