- •Содержание
- •Введение
- •1 Нормативные ссылки
- •2 Спецификация задачи
- •3 Формулировка задачи
- •4 Используемые регистры
- •4.2 Сегментные регистры
- •5 Используемые команды
- •5.1 Команды пересылки и загрузки
- •5.2 Арифметические команды
- •5.2.1 Сложение
- •5.2.2 Вычитание
- •5.2.3 Умножение
- •5.2.4 Деление
- •5.2.5 Изменение знака операнда
- •5.2.6 Увеличение операнда на 1
- •5.2.7 Уменьшение операнда на 1
- •5.3 Команды сдвига
- •5.4 Циклы
- •5.5 Процедуры
- •5.6 Операции над битами и байтами
- •6 Используемые функции dos
- •7 Алгоритм решения задачи
- •7.1 Разработка алгоритма основной программы
- •7.2 Разработка алгоритма процедуры поиска нулевой строки
- •7.3 Разработка алгоритма процедуры формирования слов
- •8 Описание программы
- •8. 1 Программа выбора варианта №5, формирования и записи слов (Приложение а)
- •8.2 Программа построения графика (Приложение б)
- •9 Результаты машинного тестирования
- •Заключение
- •Список используемых источников
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