Курсовая работа: Микропроцессор i8086/i8088

Выход

(z)

RQ/GTORQ/GT1 (RQ/ЁО) (RQ/БЦ Request/Grant (Request/Enable) - два входных/выходных сигнала запроса/предоставления локальной шины; используются для связи с другими процессорами, в частности, с арифметическим сопроцессором. Линия RQ/GT1 имеет меньший приоритет Вход/ выход LOCK Lock - выходный сигнал блокировки (занятости) шины - сигнал монополизации управления шиной; формируется во время выполнения команды с префиксом LOCK и информирует другие процессоры и устройства о том, что они не должны запрашивать системную шину Выход QS1. QSO Queue Status - два выходных сигнала состояния очереди; идентифицируют состояние внутренней шестибайтной очереди команд и действуют на протяжении такта синхронизации после выполнения операции над очередью. Сигналы QS1, QS0 предназначены для сопроцессора, который контролирует шину адреса/данных, фиксирует момент выборки из памяти программ предназначенной для него команды с префиксом ESC, а после этого следит за очередью команд и определяет момент, когда эта команда должна выполняться Выход

2. Разработка программного обеспечения

2.1. Основной алгоритм

Термин «чётность» в программировании может иметь двоякий смысл:

- первое; целое число считается чётным, если делится на два без остатка;

- второе; значение термина «чётность» используется применительно к флагу чётности (PF – ParityFlag), который предусмотрен в составе регистра флагов процессора i8086. Этот флаг устанавливается в 1, если младший байт результата предыдущей команды содержит чётное число битов, равных 1, и в 0 - нечётное.

Выберем предпочтительный вариант интерпретации термина «контроль четности». Для этого рассмотрим два алгоритма контроля и определим, какой из них окажется более чувствительным к изменению исходных данных.

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

Обработку же отдельных элементов массива независимо от интерпретации термина «чётность» можно выполнять двумя способами:

Если размер массива не превышает ёмкости контрольного кода (количеству бит в двоичном представлении числа), то каждому элементу массива можно поставить в соответствие один бит в контрольном коде. При этом если элемент массива чётный, то соответствующий бит контрольного кода будем устанавливать в 1, в противном случае – в 0. В таком случае если произойдет изменение любого элемента массива таким образом, что изменится чётность этого элемента, контрольный код позволит не только обнаружить сам факт изменения информации, но и однозначно определить изменённый элемент.

Если размер массива превышает ёмкость контрольного кода, то однозначное соответствие между элементами массива и битами контрольного кода обеспечить невозможно. В таком случае можно подсчитывать количество чётных или, наоборот, нечётных элементов массива. Если изменится чётность какого-либо элемента массива, изменится и контрольная сумма, что позволит обнаружить сам факт изменения исходных данных.

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

Для более надежного контроля сохранности данных используют, как правило, более сложные алгоритмы, например, CRC32 – подсчёт циклической контрольной суммы. Можно сделать вывод - в любом случае необходимо определить наиболее «устойчивую» интерпретацию термина «чётность» на уровне отдельного элемента массива.

Двоичное число является чётным в математическом смысле, если его самый младший бит равен нулю. Соответственно, изменение любых старших битов элемента массива никак не скажется на его чётности (нечётности).

При использовании механизма подсчёта битов, аналогичном установке флага чётности, изменение любого бита исходного байта изменит и контрольное число. Естественно, что это также не обеспечивает защиты от «компенсирующих» ошибок, когда будет изменена сразу пара (или чётное количество) битов. Тем не менее, очевидно, что вариант подсчёта битов в исходных элементах массива более чувствителен к изменению исходных данных, чем проверка делимости элементов на два без остатка.

На основании вышеизложенного примем решение использовать алгоритм подсчёта битов в элементе массива. Расчёт же контрольного кода сделаем адаптивным, то есть для массивов, размер которых не превышает разрядность контрольного кода, используем битовое маскирование, а для массивов большего размера – подсчёт количества «чётных» элементов.

Учитывая потенциальную возможность повторного использования, алгоритм вычисления контрольного кода чётности реализуем в виде подпрограммы.

2.2. Отладка и тестирование

Для отладки и тестирования основной подпрограммы разработаем программу, в которой будет реализована следующая функциональность:

- формирование контрольного массив данных и его заполнение с помощью генератора псевдослучайных чисел;

- вычисление контрольного кода чётности и его сохранение с помощью основной подпрограммы;

- вывод на экран значений элементов массива и контрольного кода чётности;

- интерактивное изменение какого-либо элемента исходного массива;

- пересчёт контрольного кода массива и сравнение с сохраненным ранее.

Тестовая программа будет разработана, как и основная подпрограмма, с использованием языка программирования Ассемблер.

В общем случае тестовая программа не обязательно должна разрабатываться на том же языке программирования, что и основной алгоритм, – можно было бы использовать любой язык программирования, позволяющий взаимодействовать с Ассемблером. Причём, разные языки программирования обеспечивают необходимое взаимодействие с помощью различных механизмов и определяют собственные ограничения. Так, C и C++ поддерживают подключение двоичных модулей, которые могут быть получены как результат компиляции ассемблерной программы. TurboPascal, например, поддерживает ассемблерные вставки на уровне исходных текстов.

Для разработки тестовой программы потребуется ряд вспомогательных подпрограмм, обеспечивающих, в частности, вывод на экран текстовых сообщений и числовых значений, ввод числовых данных, генерация случайных чисел. Рассмотрим основные из них:

1. Вывод на экран текстовых сообщений. Этот алгоритм будет использоваться для вывода пояснительных сообщений, приглашений к вводу данных и прочих.

2. Вывод на экран числовых значений - будет использоваться для отображения значений элементов массива и контрольного кода чётности. Если преобразовать число к строковому виду, то для непосредственного отображения можно будет использовать алгоритм вывода на экран текстового сообщения. Таким образом, реализация алгоритма может быть упрощена за счёт его разбиения на две составляющие:

- преобразовать число к строковому виду;

- вывести строку на экран.

К-во Просмотров: 213
Бесплатно скачать Курсовая работа: Микропроцессор i8086/i8088