Разработка структуры гипотетического микропроцессора и центральной части МЭВМ на его базе. Эмуляция выполнения команд

 















Курсовая работа

Разработка структуры гипотетического микропроцессора и центральной части МЭВМ на его базе. Эмуляция выполнения команд


СОДЕРЖАНИЕ


Введение

. Анализ структуры микропроцессора прототипа и алгоритмов выполнения заданного подмножества команд

.1 Структура микропроцессора-прототипа

.2 Адресация основной памяти

.3 Анализ способов адресации операндов и алгоритмов выполнения заданного подмножества команд

. Постановка задач проекта

.1 Требования к структуре и интерфейсу гипотетического микропроцессора

.2 Требования к структуре и интерфейсу АЛУ микропроцессора

.3 Требования к структуре микро ЭВМ

. Разработка алу микропроцессора

.1 Разработка ОА для отдельных операций АЛУ

.2 Разработка общего ОА АЛУ

.3 Разработка микропрограмм выполнения операций в АЛУ

.4 Разработка объединенной микропрограммы АЛУ

. Разработка гипотетического микропроцессорa

.1 Разработка структуры микропроцессора

.2 Система команд микропроцессора

.2.1 Команда ADD AL,imm8

.2.2 Команда MUL r8

.2.3 Команда DEC AL

.2.4 Команда MOV r/m8,r8

.2.5 Команда JMP (относительная адресация)

.2.6 Команда JА (относительная адресация)

. Разработка структуры центральной части микроэвм на базе гипотетического микропроцессора

.1 Разработка структуры микроЭВМ

.2 Организация шин микро-ЭВМ

.3 Организация ОЗУ

.4 Микропрограмма работы микро-ЭВМ

. Разработка программы эмуляции работы микро-эвм

.1 Постановка задачи

.2 Алгоритм работы программы эмуляции

.3 Список процедур и функций

.4 Анализ результатов тестирования программы

Выводы

Перечень ссылок

Приложение А Техническое задание на разработку микроэвм

Приложение Б Техническое задание на программу-эмулятор

Приложение В Руководство пользователя

Приложение Г Экранные формы

Приложение Д Листинг программы


ПЕРЕЧЕНЬ ОБОЗНАЧЕНИЙ, СИМВОЛОВ, ЕДИНИЦ, СОКРАЩЕНИЙ И ТЕРМИНОВ


ЭВМ - Электронная вычислительная машина

ОС - Операционная система

ЗУ - Запоминающие устройство

ОЗУ - Оперативное запоминающие устройство

АЛУ - Арифметико-логическое устройство

МП - Микропроцессор

ОА - Операционный автомат

МО - Микрооперация

ПП - Программный продукт


ВЕДЕНИЕ


Сейчас, когда современные процессоры работают на частотах, превышающих 1000 МГц, мало кто задумывается над принципом их работы. Даже некоторые специалисты в области компьютерных технологий воспринимают процессор как черный ящик. Однако известно, что ни одну требовательную к системным ресурсам программу нельзя написать, не учитывая архитектуры ЭВМ, для которой она пишется. Следовательно, сейчас существует потребность в программах, которые наглядно могут продемонстрировать процесс работы программы на самом низком уровне.

Основной целью создания проекта является ознакомление со структурой микропроцессора i80386 и выполнение следующих работ по проектированию микропроцессора: разработка структуры АЛУ, разработка алгоритмов выполнения команд, разработка структуры гипотетического микропроцессора, разработка структуры микро-ЭВМ на базе гипотетического микропроцессора, создание программы эмуляции выполнения заданных команд. Система команд гипотетического микропроцессора является подмножеством системы команд микропроцессора i80386.

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


1. АНАЛИЗ СТРУКТУРЫ МИКРОПРОЦЕССОРА ПРОТОТИПА И АЛГОРИТМОВ ВЫПОЛНЕНИЯ ЗАДАННОГО ПОДМНОЖЕСТВА КОМАНД


1.1 Структура микропроцессора-прототипа


Гипотетический микропроцессор, разрабатываемый в данном курсовом проекте, основан на архитектуре микропроцессора 80386. Он содержит: регистры общего назначения, сегментные регистры, микропрограммное устройство управления, устройство управления и синхронизации, 32-разрядное арифметико-логическое устройство, регистры указателей, индексные регистры, регистр команд, регистр флагов, устройство сегментации, устройство страничного преобразования.

Общая структурная схема микропроцессора приведена на рисунке 1.1.


Рисунок 1.1 - Общая структурная схема микропроцессора 80386.

Пояснение к схеме:

1.БАД - буфер адреса данных (используется для передачи и считывания данных из оперативной памяти);

2.СФА - сумматор физического адреса (блок формирования физического адреса из сегмента и смещения);

3.РФ - регистр флагов;

4.АЛУ - арифметико-логическое устройство;

5.БК - очередь (буфер) команд;

6.РК - регистр команд;

7.УУиС - устройство управления и синхронизации;

8.МУУ - микропрограммное устройство управления;

9.РО - регистр обмена;

10.EAX, EBX, ECX, EDX - регистры общего назначения;

11.ESP, EBP - регистры указателей;

12.ESI, EDI - индексные регистры;

13.BR1, BR2 - буферные регистры операндов АЛУ;

14.CS, DS, SS, ES, FS, GS - сегментные регистры;

15.EIP - регистр адреса команды.

К регистрам общего назначения относятся:

-ЕAX - аккумулятор, в основном участвует в арифметических операциях и предназначен для хранения одного из операндов или результата операции. Возможно обращение к первому(AL) или второму(AH) байтам или к обоим вместе(AX);

-EBX - регистр базы. В основном в нем хранится начальный адрес обрабатываемого массива данных. Возможно обращение к первому(BL) или второму(BH) байтам или к обоим вместе(BX);

-ECX - используется как счетчик при организации циклов. Возможно обращение к первому(CL) или второму(CH) байтам или к обоим вместе(CX);

-EDX - регистр данных. В командах умножения и деления сохраняет старшую половину 64-разрядных операндов, а в командах ввода-вывода содержит адрес внешних устройств. Возможно обращение к первому(DL) или второму(DH) байтам или к обоим вместе(DX).

Все регистры общего назначения 32-разрядные.

Регистры указателей ESP и EBP используются для работы со стековым сегментом: ESP - содержит адрес вершины стека, EBP - хранит адрес начального элемента массива данных в стековом сегменте. Эти регистры 32-разрядные. Возможно обращение к младшим 2-м байтам: SP - для регистра ESP и BP - для регистра EBP.

Регистры индексов используются для доступа к элементам массива: ESI - регистр индекса источника, хранит смещение адреса для чтения, EDI - регистр индекса приемника, хранит смещение адреса для записи. Эти регистры также 32-разрядные. Возможно обращение к младшим 2-м байтам: SI - для регистра ESI и DI - для регистра EDI.

Сегментные регистры индексируют глобальную дескрипторную таблицу, в записях которой хранятся базовые адреса сегментов. Используется четыре 16-разрядных сегментных регистра для адресации логических частей программы: CS - регистр сегмента команд, косвенно (через глобальную дескрипторную таблицу) адресует сегмент памяти, в котором хранится выполняемая программа; DS - регистр сегмента данных, косвенно адресует сегмент памяти, содержащий обрабатываемые данные; SS - регистр сегмента стека, косвенно адресует сегмент памяти, называемый сегментом, данные в котором хранятся по принципу LIFO; ES - косвенно адресует регистр дополнительного сегмента, в котором может храниться информация.

Регистр адреса команды EIP - хранит 32-разрядный адрес очередной команды, которая должна извлекаться из сегмента команд памяти.

Регистр команд предназначен для хранения кода операции текущей команды. При необходимости из него считывается непосредственное значение операнда или его адрес в памяти.

РO - регистр, который используется для обмена между устройством сегментации и внутренней шиной процессора.

БА - буферный регистр адреса, БД - буферный регистр данных. Используются для обмена с памятью.

Регистры BR1 и BR2 используются для временного хранения операндов арифметико-логических операций.

Регистр флагов содержит 13 признаков (флагов), характеризующих состояние микропроцессора. Шесть флагов устанавливается в соответствии с результатом выполненной в АЛУ операцией.

VM - обеспечивает режим виртуального 8086 внутри режима виртуальной адресации. При VM = 1 МП будет переключен в режим виртуального 8086, при этом управление перезагрузкой сегментов будет осуществляться подобно 8086, но с исключением 13 недействительных привилегированных команд. VM может быть установлен в режиме виртуальной адресации командой IRET (если уровень приоритета = 0) и задача переключается на более низший уровень.

RF - признак используется совместно с отладочными регистрами контрольных точек (прерываний) или пошагового режима. С его помощью проверяется ход выполнения команд в отладочном режиме (процесс отладки). Если установлен RF (=1), то это позволяет игнорировать ошибки, возникающие при отладке до следующей команды. RF автоматически сбрасывается в 0 при успешном выполнении команды.

NT - признак гнездования задач используется только в режиме виртуальной адресации. NT=1 указывает, что текущая задача является вложенной по отношению к другой задаче. Этот бит устанавливается и сбрасывается при вызове других задач. NT проверяется командой IRET для определения внутри заданного или внешнего по отношению к данной задаче возврата. Команды POPF и IRET будут устанавливать NT в соответствии с тем, что хранится в стеке для любого уровня привилегированности.

IOPL - признак используется только в режиме виртуальной адресации. IOPL указывает максимальную величину текущего приоритета, обеспечивающую выполнение команд без реакции на ошибку.

OF - флаг переполнения, устанавливается в 1, если в результате выполнения операций происходит переполнение разрядной сетки (если перенос из (n-2)-го разряда в(n-1) не совпадает с переносом из (n-1)-го разряда в несуществующий n-ый).- флаг направления передачи, определяет способ изменения адресов источников/приемников кода в командах работы со строками данных. Если DF равен 0, то адреса наращиваются, 1 - уменьшаются.- флаг разрешения прерывания, сброшенный в состояние 0, запрещает обработку запроса на прерывание, а в 1 разрешает ее.- флаг пошагового режима, в 1 - задает специальный режим покомандного выполнения, в котором после обработки каждой команды генерируется программное прерывание.

SF - флаг знака, устанавливается равным старшему (n-1)-му разряду кода результата. При выполнении операций над числами со знаком он соответствует знаку результата, если результат >= 0, будет сброшен в 0, если результат < 0 - будет установлен в 1.

ZF - флаг нулевого результата, принимает единичное значение, если все разряды результата нулевые; если хотя бы один разряд результата отличен от 0, ZF сбрасывается в 0. - флаг переноса, устанавливается в 1, если в результате выполнения операции возник перенос из (n-1)-го разряда результата в несуществующий старший n-й разряд или потребовался заем несуществующего n-го разряда. - флаг паритета, дополняет код результата до нечетного, т.е. устанавливается в 1, если количество единиц в коде результата четно.

AF - флаг вспомогательного переноса, устанавливается в 1, если при выполнении операции произошел перенос из 3 в 4 разряд результата или выполнился заем из 3 в 4 разряд. Используется для десятичной коррекции результата.

Арифметико-логическое устройство предназначено для выполнения арифметических, логических и сдвиговых операций над 8-, 16- и 32-разрядными кодами. Операнды поступают в АЛУ из регистров общего назначения и/или памяти. Результат операции возвращается в регистр общего назначения или в память.

Устройство сегментации преобразует эффективный адрес в линейный, который поступает на вход устройства страничного преобразования. Устройство страничного преобразования формирует из линейного адреса физический.

Микрокомандное устройство управления: формирует сигналы управления работой устройства обработки.

Шина адреса состоит из 32 сигнальных линий, несущих адреса ячеек памяти и портов ввода/вывода. По каждой линии можно передать два возможных значения (0 или 1). Стандартный PC может использовать 2^32 физических адресов.

Системная шина (шина данных). Шина данных совместно с шиной адреса используется для передачи данных внутри PC. Единица передачи 1 байт. Шина данных состоит из 16 информационных линий, каждая передает одну двоичную цифру.


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


В процессоре 80386 возможны несколько режимов адресации основной памяти (смотри рисунок 1.2). Из них нам наиболее интересен реальный режим, в котором используется сегментная организация памяти

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

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


ПЭВМ 80386реальный режим (как 16-ти раз. 8086)защищенный режимвиртуальный режим (как 8086, но подчиняемый защищенному режиму )16-ти разрядный (80286)32-ух разрядныйРисунок 1.2 - Режимы работы процессора 80386.


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

Так как микропроцессор оперирует логическими адресами, состоящими из сегмента и смещения, а оперативная память работает с линейными адресами, возникает необходимость преобразования логического адреса в линейный физический. Этой работой занимается СФА. Для получения физического адреса СФА сдвигает 16-ти битный сегмент влево на 4 разряда (тем самым, умножая его на 16) и прибавляет к этому числу 16-ти битное смещение. В результате получается 20-ти битный линейный физический адрес, необходимый для работы с оперативной памятью. На рисунке 1.3 показан пример вычисления 20-ти битного линейного физического адреса.

Таким образом, базовый адрес определяется содержимым 16-разрядного сегментного регистра. 20-разрядный базовый адрес формируется путем сдвига содержимого сегментного регистра на четыре разряда влево, младшие четыре разряда базового адреса заполняются нулями.

Линейный адрес образуется посредством сложения 20-разрядного базового адреса и 16-разрядного относительного адреса. Полученный 20-разрядный линейный адрес выдается процессором на магистраль как физический адрес для выборки соответствующего байта.

ФИЗИЧЕСКИЙ АДРЕС = СЕГМЕНТ*16 + СМЕЩЕНИЕ:


Рисунок 1.3 - Пример формирования физического адреса


1.3 Анализ способов адресации операндов и алгоритмов выполнения заданного подмножества команд


Формат команды: ADD операнд1 операнд2.

В роли первого операнда может служить регистр и память, а в роли второго регистр, память и константа. Команда ADD выполняет сложение побитно, первый операнд служит для приема полученной суммы. Если результат операции превосходит размер операнда, то OF и CF устанавливаются в 1, иначе оба флага сбрасываются в ноль.

Формат команды: MUL операнд.

В роли операнда может служить регистр или память. MUL- целочисленное умножение без знака AL или AX на заданный операнд (регистр или переменная) и помещает результат в AX или AX:DX, соответственно. Если результат операции превосходит размер операнда, то OF и CF устанавливаются в 1, иначе оба флага сбрасываются

Формат команды: DEC операнд.

Команда DEC уменьшает значение операнда на единицу, не влияет на флаги. В роли операнда может выступать память/регистр размерностью один или два байта.

Формат команды: MOV операнд1 операнд2.

Пересылает источник операнда, размещенный в регистре, памяти или непосредственные данные, в приемник операнда. Исходный операнд остается без изменений, а операнд-приемник перезаписывается исходными данными. Флаги не устанавливаются.

Формат команды: PUSH операнд.

Данная операция помещает операнд в вершину стека. Для этого указатель стека ESP уменьшается на 2, если размер операнда 16 бит, и на 4, если 32 бита. Операнд (регистр общего назначения, сегментныйрегистр, или непосредственные данные) помещается на вершину стека, указываемую ESP.

Если стек организуется из 64К (максимальный размер), то при полном его заполнении каждое следующее включение разрушает ранее записанную информацию. Если стек имеет меньший размер, то при полном его заполнении каждое следующее включение разрушает область памяти, находящуюся вне стекового сегмента. Регистр флажков не модифицируется.

Если размер операнда - 32 бит, а в стек помещается сегментный 16-битный регистр, то перед засылкой в стек процессор дополняет содержимое регистра нулями до 32 бит. Это позволяет выдержать размер двойного слова.

При выполнении процессором инструкций PUSH ESP и PUSH SP, в стек помещается содержимое указателя стека, существовавшее до выполнения инструкции. В этом отличие выполнения этих инструкций от процессора 8086, который помещает в стек новое значение (уже уменьшенное на два).

Формат команды: JA/JNBE метка.

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

Допустим, арифметические флажки установлены в результате сравнения двух беззнаковых чисел командой CMP. Тогда переход осуществляется, если флаги CF и ZF равны нулю. Регистр флажков не модифицируется.

Формат команды:

)JMP SHORT метка

Относительный переход типа NEAR. Диапазон перехода -128 - +127 байт. Если осуществляется переход назад, оператор SHORT можно опустить.

)JMP метка типа NEAR

Относительный переход типа NEAR. Диапазон перехода -32768 - +32767 байт.

)JMP метка типа FAR

Прямой переход типа FAR: значение off загружается в IP, значение seg загружается в CS.

)JMP регистр/память

Косвенный переход типа NEAR. Адрес перехода загружается из 16-битового общего регистра или слова памяти

Команда JMP осуществляет безусловный переход, модифицируя указатель команд IP (при переходе типа NEAR) или пару регистров CS:IP (при переходе типа FAR). Старое значение регистров IP и CS теряется.


2. ПОСТАНОВКА ЗАДАЧ ПРОЕКТА


2.1 Требования к структуре и интерфейсу гипотетического микропроцессора


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

  • разработать общую структуру гипотетического микропроцессора для реализации заданного подмножества команд микропроцессора - прототипа при реальном режиме адресации с заданными способами адресации;
  • определить состав операционных элементов и интерфейс каждого элемента при объединении их в структуре микропроцессора;
  • разработать алгоритмы выполнения команд заданного подмножества и микропрограмму обработки команд устройства управления.

2.2 Требования к структуре и интерфейсу АЛУ микропроцессора


Разработать структуру АЛУ ЗМО и микропрограммы реализации в АЛУ операций для заданных команд и способа адресации операционного автомата.


2.3 Требования к структуре микро ЭВМ


Микро ЭВМ должно быть спроектировано на основе гипотетического микропроцессора. Также необходимо разработать программу эмуляции выполнения трех команд заданного подмножества команд (по одной команде из каждой группы) в разработанной микро ЭВМ. Предусмотреть режимы пошагового и автоматического исполнения команд с отображением динамики исполнения на структурной схеме ЭВМ с детализацией операционных элементов микропроцессора.

3. РАЗРАБОТКА АЛУ МИКРОПРОЦЕССОРА


3.1 Разработка ОА для отдельных операций АЛУ


3.1.1 Разработка ОА для операции сложения ADD

По заданию к КП операция ADD выполняется с регистром и памятью (8 бит). Поэтому n=8.

На рисунке 3.1 изображена структурная схема операции сложения ADD.


Рисунок 3.1 - Структурная схема операции сложения


Состав ОА:

1)НСМ - накапливающий сумматор (первый операнд);

2)Р1 - регистр (второй операнд);

)ТП - триггер переполнения.

НСМ[1, п] - знак первого операнда

Р1[1] - знак второго операнда

Список микроопераций:

1)Y1: НСМ := НСМ + Р1;

2)Y2: НСМ := НСМ + Р1[1]Р1[1].ù Р1[2:n];

3)Y3: НСМ := НСМ[1] НСМ[п]. ù НСМ[2:n];

4)Y4: ТП :=1;

5)Y5: CF :=1;

6)Y6: CF :=0;

7)Y7: 0F :=1;

8)Y8: 0F :=0.

Осведомительные сигналы:

1)X1: Р1[1];

2)X2: НСМ[1];

3)X3: НСМ[п].


3.1.2 Разработка ОА для операции умножения по алгоритму с младших разрядов множителя со сдвигом частичных сумм вправо MUL(A)

Для выполнения операции умножения MUL АЛУ содержит следующие элементы:

-регистр множимого (РМн);

-сумматор (СМ);

регистр множителя (РМт);

счетчик тактов (СТ).

По заданию к КП операция MUL выполняется с регистром и непосредственным операндом (8 бит). Поэтому n=8, а накапливающий сумматор 16-разрядный. Структурная схема АЛУ представлена на рисунке 3.2.


Рисунок 3.2 - Структурная схема операции умножения

Состав ОА:

1)НСМ - накапливающий сумматор (первый операнд);

2)РМт - регистр множителя;

)РМн - регистр множимого;

)СТ - счетчик тактов.

Список микроопераций:

1)Y1: НСМ:=0;

2)Y2: НСМ:=0.R1(НСМ);

3)Y3: НСМ:=НСМ+РМн;

4)Y4: РМт:=НСМ[n].R1(РМт);

5)Y5: СТ:=n;

6)Y6: СТ:=СТ-1;

)Y7: 0F :=1;

8)Y8: 0F :=0.

Осведомительные сигналы:

1)X1: РМт[n];

2)X2: СТ=0;

)X3: НСМ=0.


3.1.3 Разработка ОА для операции декремента DEC

Структурная схема операции DEC приведена на рисунке 3.3.


Рисунок 3.3 Структурная схема операции декремента


Список микроопераций:

) Y1: Р1:=Р1 - 1.

3.2 Разработка общего ОА АЛУ


На рисунке 3.4 приведена структурная схема общего ОА АЛУ.


Рисунок 3.4 Структурная схема ОА АЛУ ЗМО


Состав ОА:

1)НСМ - накапливающий сумматор;

2)Р1 - регистр (первый операнд);

)Р2 - регистр (второй операнд);

)СТ - счетчик тактов;

)ТП - триггер переполнения;

)РКО - регистр кода операции;

7)BR1, BR2 - буферные регистры.

Список микроопераций:

1)Y1: НСМ:=0;

2)Y2: НСМ:=BR1;

3)Y3: Р1:=BR1;

4)Y4: Р2:=BR2;

5)Y5: НСМ:=0.R1(НСМ);

6)Y6: НСМ:=НСМ+Р2;

7)Y7: Р1:=НСМ[n].R1(Р1);

8)Y8: СТ:=n;

9)Y9: СТ:=СТ-1;

10)Y10: НСМ := НСМ + Р2;

11)Y11: НСМ := НСМ + Р2[1]Р2[1]. ùР2[2:n];

12)Y12: НСМ := НСМ[1] НСМ[п]. ùНСМ[2:n];

13)Y13: ТП :=1;

14)Y14: Р1:= Р1-1;

15)Y15: CF:= 0;

16)Y16: CF:= 1;

17)Y17: OF:= 0;

18)Y18: OF:= 1;

19)Y19: РКО:= КОП;

20)Y20: АЛУ:= 0;

21)Y21: РР[0:n] := НСМ;

22)Y22: РР[n+1:2n]:= Р1. Осведомительные сигналы:

1)X1: Р1[n];

2)X2: НСМ[1];

3)X3: НСМ[п];

4)X4: СТ=0;

5)X5: РКО = ADD;

6)X6: РКО = MUL;

7)X7: РКО = DEC;

8)X8: АЛУ;

9)X10: НСМ.


3.3 Разработка микропрограмм выполнения операций в АЛУ


3.3.1 Арифметическая операция сложения ADD

На рисунке 3.5 изображена микропрограмма сложения:

Рисунок 3.5 - Микропрограмма сложения


Команда ADD выполняет сложение побитно. При переполнении ТП устанавливается в единицу.


3.3.2 Арифметическая операция беззнакового умножения MUL по алгоритму с младших разрядов множителя со сдвигом частичных сумм вправо

На рисунке 1.5 изображен алгоритм умножения по алгоритму с младших разрядов множителя со сдвигом частичных сумм вправо:


Рисунок 3.6 - Микропрограмма умножения

MUL- целочисленное умножение без знака AL или AX на заданный операнд (регистр или переменная) и помещает результат в AX или AX:DX, соответственно. Если результат операции превосходит размер операнда, то OF и CF устанавливаются в 1, иначе оба флага сбрасываются.


3.3.3 Арифметическая операция декремента DEC

На рисунке 3.7 изображенa микропрограмма декремента:


Рисунок 3.7 - Микропрограмма декремента


Команда DEC выполняет вычитание единицы из операнда.


3.4 Разработка объединенной микропрограммы АЛУ


Данная микропрограмма выполняет три команды: ADD, MUL и DEC.

На рисунке 3.8 представлена объединенная микропрограмма АЛУ.


Рисунок 3.8 - Микропрограмма работы АЛУ

4. РАЗРАБОТКА ГИПОТЕТИЧЕСКОГО МИКРОПРОЦЕССОРA


4.1 Разработка структуры микропроцессора


Поскольку в данном проекте реализуется выполнение лишь нескольких команд, то структура микропроцессора значительно упрощается по сравнению со структурой процессора-прототипа. Такая упрощенная структура изображена на рисунке 4.1.


Рисунок 4.1 Структура гипотетического микропроцессора


Состав:

1.БАД - буфер адреса данных;

2.СФА - сумматор физического адреса;

.Сегментные регистры:

-CS - регистр сегмента кода;

-DS - регистр сегмента данных.

4.EIP - программный счетчик (указатель программы);

5.BR1, BR2 - буферные регистры операндов АЛУ;

.РО - регистр обмена;

.ОК - очередь команд;

.РК - регистр команд;

.Регистры общего назначения:

-EAX - аккумулятор;

-ECX - счетчик;

-EDX - регистр данных.

10.Регистры циклов:

-ESI - смещение для источника;

-EDI - смещение для приемника.

11.АЛУ - арифметико-логическое устройство;

12.РФ - регистр флагов;

.РР - регистр результата;

.МУУ - местное устройство управление;

.УУ и С - устройство управления и синхронизации

.ША - шина данных;

.ШД - шина адреса.

Осведомительные сигналы пуск и стоп запускают и прекращают работу микропроцессора соответственно.


4.2 Система команд микропроцессора


Система команд гипотетического микропроцессора включает шесть команд: арифметические команды ADD, MUL и DEC, команду пересылки MOV и команды перехода JMP и JA.


4.2.1 Команда ADD AL,imm8

Команда ADD выполняет сложение побитно.

Код операции: 82 C0 или 14 XX,

где XX - непосредственный операнд (8 бит).

Размер команды: 16 бит.

Алгоритм выполнения:

) извлечь из регистра значение;

2) поместить непосредственный операнд в ОП;

) поместить операнды в АЛУ;

) выполнить ADD;

) извлечь результат и поместить в регистр;

) установить значения флагов.


4.2.2 Команда MUL r8

Команда MUL выполняет умножение беззнаковых двоичных чисел. MUL воспринимает старший бит в качестве бита данных, а не бита знака. Операция подразумевает, что множимое располагается в регистре AL. Результаты помещаются в AX.

Влияет на состояние флагов CF и OF следующим образом(флаги AF, PF, SF и ZF не определены): если старшая половина результата (AH) содержит только нули, т. е. результат целиком помещается в младшей половине, то флаги CF и OF устанавливаются в нуль, иначе - в единицу.

Код операции: |11110110|mod 100 reg|,гре mod - два бита режима адресации, reg - три бита регистра.

Размер команды: 16 бит.

В данном ПП данная команда реализована в виде MUL BL, ее машинный код - F6E3.

Алгоритм выполнения команды:

1)извлечь из AL значение;

2)извлечь значение из BL;

)установить n = 8;

)выполнить операцию умножения для n-го разряда;

)установить n : =n - 1;

6)если n равно 0, то закончить выполнение, иначе перейти к пункту 4;

)поместить результат в АХ;

8)установить значение флагов.


4.2.3 Команда DEC AL

Команда DEC уменьшает значение операнда на единицу, не влияет на флаги. В роли операнда может выступать память/регистр размерностью один или два байта. В данном ПП используются такие параметры:

Код операции:FE C8

Размер команды: 16 бит.

Алгоритм выполнения команды:

) уменьшить AL на единицу.


4.2.4 Команда MOV r/m8,r8

MOV - пересылает регистр в регистр/память размерностью 8 бит.

Код операции: 88 XX

где R - код регистра, XX - код заданного регистра (8 бит).

Размер команды: 16 бит.

Алгоритм выполнения:

) извлечь регистр;

) пересылка данных в регистр/память.


4.2.5 Команда JMP (относительная адресация)

Команда JMP выполняет переход к заданной метке.

Формат команды: EB SS,

где S - смещение.

Размер команды: 16 бит.

Алгоритм выполнения:

  1. к содержимому регистра IP прибавляется смещение метки.

4.2.6 Команда JА (относительная адресация)

Команда JА выполняет переход к заданной метке при условии, что флаги СF и ZF равны нулю.

Формат команды: 77 SS,

где S - смещение.

Размер команды: 16 бит.

Алгоритм выполнения:

) к содержимому регистра IP прибавляется смещение метки.


5. РАЗРАБОТКА СТРУКТУРЫ ЦЕНТРАЛЬНОЙ ЧАСТИ МИКРОЭВМ НА БАЗЕ ГИПОТЕТИЧЕСКОГО МИКРОПРОЦЕССОРА


5.1 Разработка структуры микроЭВМ


На базе спроектированного микропроцессора можно построить микро-ЭВМ, структурная схема которой, как и схема самого микропроцессора, в значительной мере отражает функциональные возможности системы команд микропроцессора. Так для данного ограниченного набора команд нецелесообразно использовать сложную операционную систему, поэтому можно ограничиться ПЗУ, которое содержало бы базовый набор команд ввода-вывода, и позволяло загружать несколько программ в оперативную память, следовательно, нам необходимо ОЗУ и периферийное устройство. Шинный интерфейс будет выглядеть так: шина данных - 20 бит, шина адреса - 32 бита, шина управления - 4 бит. Структурная схема микро-ЭВМ приведена на рисунке 5.1.


Рисунок 5.1 - Структурная схема микро-ЭВМ


Состав схемы на рисунке 4.1:

) МП- разработанный гипотетический микропроцессор (координирует работу устройств микро-ЭВМ);

) ОЗУ- оперативное запоминающее устройство (хранит программы выполнения);

) ПЗУ- постоянное запоминающее устройство;

) ПУ - периферийные устройства (служат для обмена информации с внешним миром).


5.2 Организация шин микро-ЭВМ


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

Шину данных образуют линии, предназначенные для обмена данными между отдельными блоками ПК. Началом шины данных является центральный процессор.

Его структура определяет ширину шины данных, т. е. количество линий данных. Чем шире шина данных, тем больше данных может быть передано за определенный период времени и тем быстрее (производительнее) работает МЭВМ.

Теперь перейдем к адресной шине, с помощью которой осуществляется процесс адресации. Под адресацией понимают распределение данных, проходящих через шину данных, по определенным ячейкам памяти. Каждая ячейка памяти компьютера имеет свой собственный адрес. В процессе каждой записи или каждого считывания данных процессор должен сообщать, из какого адреса он хотел бы считать данные или в какой адрес их записать. Ширина (разрядность) адресной шины показывает, какое максимальное количество адресов может обрабатывать процессор. Число линий в адресной шине показывает, каким объемом памяти может управлять процессор. Разработанная МЭВМ имеет 32-разрядную адресную шину, что позволяет адресовать 4 Гб памяти.

Шину управления образуют линии, расположенные на материнской плате и предназначенные для управления различными операциями, выполняемыми процессором. Определенные сигналы обеспечивают, чтобы при доступе к памяти не возникало конфликтов при одновременном обращении к одной и той же ячейке памяти. Все остальные исполнительные элементы в это время блокируются с помощью соответствующего сигнала от шины управления.


5.3 Организация ОЗУ


Одним из наиболее важных элементов МЭВМ является ОЗУ, в котором хранятся все данные, команды. Схема ОЗУ показана на рисунке 5.2.


Рисунок 5.2 - Структура ОЗУ


Состав схемы:

1)ША - шина адреса;

2)ШД - шина данных;

3)ШУ - шина управления;

)РА - регистр адреса;

)РД - регистр данных;

)ОП - ячейки оперативной памяти.

При загрузке выполняемой программы (Exe-файла) в память операционная система MS DOS инициализирует, как минимум, три сегментных регистра: CS, DS, SS. Все сегменты могут использовать различные области памяти, могут частично или полностью совпадать (перекрываться).

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


5.4 Микропрограмма работы микро-ЭВМ


Микропрограмма работы устройства управления гипотетического микропроцессора приведена на рисунке 5.3.


Рисунок 5.3 - Микропрограмма работы устройства управления

6. РАЗРАБОТКА ПРОГРАММЫ ЭМУЛЯЦИИ РАБОТЫ МИКРО-ЭВМ


6.1 Постановка задачи


Программа эмуляции должна выполнять три команды заданного подмножества команд (арифметическую, посылочную и команду переходов) в разработанной микро ЭВМ. Предусмотреть режимы пошагового и автоматического исполнения команд с отображением динамики исполнения на структурной схеме ЭВМ с детализацией операционных элементов микропроцессора.

При демонстрации работы микроЭВМ программа отображает содержимое регистров, ОЗУ, используемые текущей микрооперацией шины.


6.2 Алгоритм работы программы эмуляции


При создании программы эмуляции, для отображения схемы были использованы компоненты среды разработки MFC. Свойства компонентов позволили продемонстрировать выполнение команд, не только в автоматическом режиме, но и по шагам. Функция демонстрации работает следующим образом:

1)при нажатии кнопки Следующий шаг глобальной переменной i присваивается значение, соответствующее номеру текущего шага и выполняются соответствующие действия для отображения текущего шага;

)при нажатии кнопки Сброс устанавливаются начальные значения;

)при нажатии кнопки Авто включается автоматический режим выполнения команд. Автоматический режим нельзя остановить, он работает до конца выполнения всех микроопераций.

Пояснения, о выполнении команд, выводятся в зависимости от номера текущего шага.

6.3 Список процедур и функций


Основные процедуры и функции, используемые в программе, приведены в таблице 6.1.


Таблица 6.1 - Основные процедуры программы-эмулятора

№п/пОбъявление процедурыНазначение1OnReset()Установка начальных значений. Запускается при нажатии кнопки Сброс 2OnNext()Переход к следующей операции. Запускается при нажатии кнопки Следующий шаг3OnAuto()Включение автоматического режима. Запускается при нажатии кнопки Авто. 4MicroOperations(int step)Прорисовка каждой микрооперации

6.4 Анализ результатов тестирования программы


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


ВЫВОДЫ


Целью настоящего проекта являлось изучение работы МП и создание системы, позволяющей изучить принцип и порядок выполнения команд гипотетического микропроцессора. В процессе создания данного проекта были выполнены следующие действия:

1.Спроектировано АЛУ гипотетического микропроцессора по способу реализации ЗМО, предназначенное для выполнения операций сложения, умножения и декремента;

2.Разработаны алгоритмы выполнения команд MUL, ADD, DEC, MOV и JMP, составляющих подмножество команд микропроцессора-прототипа 80386;

.Разработана структурная схема гипотетического микропроцессора, систему команд которого составляют команды MUL, ADD, DEC, MOV и JMP с режимом реальной адресации;

4.Разработана структурная схема микроЭВМ на базе спроектированного гипотетического микропроцессора;

5.Создана программа эмуляции выполнения команд из системы команд гипотетического микропроцессора.

Созданный ПП не является окончательным вариантом готового приложения. В дальнейшем возможно внести следующие улучшения и усовершенствования:

1.Разработка более совершенной структуры гипотетического МП;

.Предоставление в программе-эмуляторе возможность произвольного ввода стартовых значений;

.Увеличение набора команд микропроцессора (при этом будет значительно усложняться структура АЛУ и структурной схемы гипотетического микропроцессора, но сама структура микроЭВМ принципиально не изменится).

ПЕРЕЧЕНЬ ССЫЛОК


1. Абель П. Язык Ассемблера для IBM PC и программирования / Пер. с англ. Ю.В.Сальникова. - М.: Высш. шк.,1992. - 447 с.: ил.

. Юров В. Assembler - учебник для ВУЗов- СПб.;Питер,2002.-624с.:ил.

. Журден Р. Справочник программиста на ПК фирмы IBM - перевод с англ.

микропроцессор алгоритм команда программа эмуляция


Приложение А


ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА РАЗРАБОТКУ МИКРОЭВМ

А.1 Общие сведения

Полное наименование курсового проекта - «Разработка структуры гипотетического микропроцессора и центральной части МЭВМ на его базе. Эмуляция выполнения команд».

КП разрабатывается студенткой 3-го курса Донецкого государственного института искусственного интеллекта, факультета Современных компьютерных и информационных технологий, группы .

Основанием для создания КП является задание, выданное кафедрой технической информатики факультета СКИТ ДонГИИИ согласно учебному плану специальности программного обеспечения интеллектуальных систем.

Плановый срок начала разработки проекта года, срок окончания -года.

А.2 Назначение и цели создания проекта

Курсовой проект предназначен для знакомства пользователя с командами микро-ЭВМ на базе процессора 80386 посредством эмулятора этих команд.

Целью создания курсового проекта является исследование алгоритмов выполнения заданного набора команд в режиме реальной адресации микропроцессора i80386.

А.3 Требования к КП

А.3.1 Требования к КП в целом

В целом КП должен выполнять следующие требования:

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

каждый машинный цикл должен сопровождаться отображением потоков данных в структурной схеме микропроцессора и строкой комментария.

А.3.2 Требования к задачам и функциям КП

А.3.2.1 Требования к микроЭВМ

К разработке микроЭВМ выдвигаются следующие требования:

  • разработать алгоритм выполнения команд заданного подмножества;
  • реализовать реальный режим адресации;
  • разрядность шины данных - 32 бит;
  • разрядность шины адреса - 32 бит;
  • разработать программу эмуляции выполнения заданного подмножества команд, разработанного микропроцессора. Предусмотреть режимы пошагового и автоматического выполнения команд с изображением динамики исполнения на структурной схеме.
  • Требуется реализовать алгоритмы выполнения арифметической команды ADD, команды перехода JMP, посылочной операции MOV.
  • А.3.2.2 Требования к организации основной памяти микропроцессора семейства i80386
  • Требуется разработать структуру микроЭВМ со следующей организацией основной памяти микропроцессора семейства i80386 схемой и характеристиками. Минимальной адресуемой единицей основной памяти ПЭВМ является байт. Доступ к байтам основной памяти осуществляется по его физическим адресом в устройстве памяти. Для адресации основной памяти в микропроцессоре i80386 предусматриваются 32-битовые адреса, что позволяет работать с основной памятью до 4 Гб.
  • А.3.2.3 Требования к видам обеспечения
  • А.3.2.3.1 Требования к программному обеспечению
  • К программному обеспечению (ПО) предъявляется следующее требование: - операционная система - Microsoft Windows 95, 98, NT, Me, XP.
  • А.3.2.3.2 Требования к техническому обеспечению
  • К техническому обеспечению предъявляются следующие требования:
  • для функционирования проектируемой программы достаточно IBM совместимой машины типа АТ с процессором i80486 и выше или любого совместимого с ним;
  • оперативной памяти RAM не менее 16Мb;
  • монитор типа SVGA;
  • клавиатура.
  • А.4 Стадии и этапы разработки ПП
  • Стадии и этапы разработки ПП представлены в таблице А.1.
  • Таблица А.1 - Стадии и этапы разработки КП

№п.пНаименование работыПродолжительность (недель) 1 Анализ структуры и алгоритмов выполнения заданных команд в микропроцессоре - прототипе. Уяснение задания 1 2Разработка технического задания на проект 1 3Разработка структуры АЛУ микропроцессора для выполнения арифметических операций 14 Разработка алгоритмов выполнения АО 1 5 Разработка структуры микропроцессора, реализующего заданный набор команд 1 6 Разработка структуры микроЭВМ 1 7 Разработка алгоритмов выполнения команд 1 8 Разработка эмулятора выполнения заданных команд 2 9 Отладка эмулятора 2 10 Тестирование эмулятора 2 11 Написание пояснительной записки к проекту 1 12 Защита проекта 1

Приложение Б


ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА ПРОГРАММУ-ЭМУЛЯТОР

Б.1 Сведения об условиях эксплуатации эмулятора

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

Б.2 Требования к эмулятору

Б.2.1 Требования к эмулятору в целом

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

Б.2.2 Требования к задачам и функциям программы-эмулятора

В курсовом проекте должны быть реализованы:

  • арифметико-логические операция ADC;
  • посылочная операция MOV;
  • команда перехода JMP.
  • Необходимо использовать режим реальной адресации для типа ОА АЛУ ЗМО.
  • Программа должна обеспечивать:
  • отображение на экране операндов в формате, используемом для хранения;
  • вывод результата выполнения операции в шестнадцатеричном виде;
  • проверку результатов вычисления;
  • понятный интерфейс для обеспечения удобной работы пользователя с ПП;
  • развитую систему помощи.
  • В проектируемом программном продукте решаются следующие задачи:
  • разработка структуры гипотетического МП для реализации заданного подмножества команд на основе МП прототипа и заданного способа адресации;
  • разработка структуры гипотетического МП для заданного подмножества команд на основе разработанного АЛУ;
  • разработка центральной части микро-ЭВМ, микропрограммы выполнения команд заданного подмножества;
  • разработка эмулятора.
  • Б.3 Требования к видам обеспечения
  • Б.3.1 Требования к программному обеспечению
  • К программному обеспечению предъявляется следующее требование:
  • обеспечение функционирования создаваемой программы в пользовательском режиме;
  • реализовать программу в виде отдельных процедур и функций;
  • организовать защиту от некорректного ввода;
  • обеспечить надежное хранение информации;
  • язык программирования - Visual C++.
  • Программа, реализующая изучение и эмуляцию команд АЛУ создается для операционной системы Microsoft Windows 95, 98, NT, Me, XP.
  • Б.3.2 Требования к техническому обеспечению
  • К техническому обеспечению предъявляются следующие требования:
  • для функционирования проектируемой программы достаточно IBM совместимой машины типа АТ с процессором i80486 и выше или любого совместимого с ним;
  • оперативной памяти RAM не менее 16Мb;
  • монитор типа SVGA;
  • клавиатура;
  • манипулятор мышь.

Приложение В


РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

Для запуска программы-эмулятора работы микроЭВМ необходимо запустить файл mp80386.exe.

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

В правой части окна находится панель управления работой программы. Для начала выполнения команд необходимо нажать кнопку Следующий шаг (для пошагового выполнения программы) или Авто(для автоматической работы программы). Чтобы начать выполнение программы заново с самого начала, необходимо нажать кнопку Сброс.

При нажатии кнопки О программе появляется окно с информацией о назначении данного ПП.

Для выхода из программы нужно нажать кнопку Выход, либо закрыть окно стандартным способом (нажатием кнопки закрытия в правом верхнем углу окна).


Приложение Г


ЭКРАННЫЕ ФОРМЫ


Рисунок Г.1 - Иллюстрация работы программы


Приложение Д


ЛИСТИНГ ПРОГРАММЫ

// MP80386Dlg.cpp : implementation file

#include "stdafx.h"

#include "MP80386.h"

#include "MP80386Dlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILEchar THIS_FILE[] = __FILE__;

#endifi=0;

////////////////////////////////////////////////////////////////// dialog used for App AboutCAboutDlg : public CDialog

{public:();

// Dialog Data

//{{AFX_DATA(CAboutDlg){ IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg):void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG_MESSAGE_MAP()

};::CAboutDlg() : CDialog(CAboutDlg::IDD)

{ //{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}CAboutDlg::DoDataExchange(CDataExchange* pDX)

{ CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CMP80386Dlg dialogDlg::CMP80386Dlg(CWnd* pParent /*=NULL*/)

: CDialog(CMP80386Dlg::IDD, pParent)

{//{{AFX_DATA_INIT(CMP80386Dlg)

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}CMP80386Dlg::DoDataExchange(CDataExchange* pDX)

{CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CMP80386Dlg)_Control(pDX, IDC_NEXT, m_Next);_Control(pDX, IDC_AUTO, m_Auto);_Control(pDX, IDC_RR, m_RR);_Control(pDX, IDC_RO, m_RO);_Control(pDX, IDC_RK, m_RK);_Control(pDX, IDC_OF, m_OF);_Control(pDX, IDC_EIP, m_EIP);_Control(pDX, IDC_EBX, m_EBX);_Control(pDX, IDC_EAX, m_EAX);_Control(pDX, IDC_DS, m_DS);_Control(pDX, IDC_CS, m_CS);_Control(pDX, IDC_CF, m_CF);_Control(pDX, IDC_BR2, m_BR2);_Control(pDX, IDC_BR1, m_BR1);_Control(pDX, IDC_BAD, m_BAD);_Control(pDX, IDC_TABLE_CS, m_TABLE_CS);

//}}AFX_DATA_MAP}_MESSAGE_MAP(CMP80386Dlg, CDialog)

//{{AFX_MSG_MAP(CMP80386Dlg)_WM_SYSCOMMAND()_WM_PAINT()_WM_QUERYDRAGICON()_BN_CLICKED(IDC_RESET, OnReset)_BN_CLICKED(IDCLOSE, OnClose)_BN_CLICKED(IDC_INFO, OnInfo)_BN_CLICKED(IDC_NEXT, OnNext)_BN_CLICKED(IDC_AUTO, OnAuto)

//}}AFX_MSG_MAP_MESSAGE_MAP()

////////////////////////////////////////////////////////

// CMP80386Dlg message handlersCMP80386Dlg::OnInitDialog()

{CDialog::OnInitDialog();((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);(IDM_ABOUTBOX < 0xF000);* pSysMenu = GetSystemMenu(FALSE);(pSysMenu != NULL)

{CString strAboutMenu;.LoadString(IDS_ABOUTBOX);(!strAboutMenu.IsEmpty())

{pSysMenu->AppendMenu(MF_SEPARATOR);>AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}}(m_hIcon, TRUE); // Set big icon(m_hIcon, FALSE);// Set small iconTRUE; // return TRUE unless you set the focus to a control

}CMP80386Dlg::OnSysCommand(UINT nID, LPARAM lParam)

{if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{CAboutDlg dlgAbout;.DoModal();

}::OnSysCommand(nID, lParam);(FALSE);

}CMP80386Dlg::OnPaint()

{if (IsIconic())

{CPaintDC dc(this); // device context for painting(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectanglecxIcon = GetSystemMetrics(SM_CXICON);cyIcon = GetSystemMetrics(SM_CYICON);rect;(&rect);x = (rect.Width() - cxIcon + 1) / 2;y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon.DrawIcon(x, y, m_hIcon);

}

{OnReset(); ::OnPaint();

}}CMP80386Dlg::OnQueryDragIcon()

{return (HCURSOR) m_hIcon;

}CMP80386Dlg::OnReset()

{int l;j=0;str = "";=1;(l=1;l<8;l++)(l, false, 2);(l=8;l<29;l++)(l, false, 1);_TABLE_CS.DeleteAllItems();_TABLE_CS.DeleteColumn(0);_TABLE_CS.DeleteColumn(0);_TABLE_CS.DeleteColumn(0);_TABLE_CS.SetExtendedStyle(m_TABLE_CS.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);_TABLE_CS.InsertColumn(0,"addr",LVCFMT_LEFT,40);_TABLE_CS.InsertColumn(1,"data",LVCFMT_LEFT,60);_TABLE_CS.InsertColumn(2,"value",LVCFMT_LEFT,70);_TABLE_CS.InsertItem(0,"1000");_TABLE_CS.SetItem(0,1,LVIF_TEXT,"82C0",0,0,0,0);_TABLE_CS.SetItem(0,2,LVIF_TEXT,"ADD AL,8D",0,0,0,0);_TABLE_CS.InsertItem(1,"1000");_TABLE_CS.SetItem(1,1,LVIF_TEXT,"",0,0,0,0);_TABLE_CS.SetItem(1,2,LVIF_TEXT,"label:",0,0,0,0);_TABLE_CS.InsertItem(2,"1002");_TABLE_CS.SetItem(2,1,LVIF_TEXT,"88C1",0,0,0,0);_TABLE_CS.SetItem(2,2,LVIF_TEXT,"MOV AL,BL",0,0,0,0);_TABLE_CS.InsertItem(3,"1004");_TABLE_CS.SetItem(3,1,LVIF_TEXT,"EBFFFC",0,0,0,0);_TABLE_CS.SetItem(3,2,LVIF_TEXT,"JMP label",0,0,0,0);(l=0x1007;l<0x1012;l++)

{j++;.Format("%X",l);_TABLE_CS.InsertItem(3+j,str);_TABLE_CS.SetItem(3+j,1,LVIF_TEXT,"90",0,0,0,0);_TABLE_CS.SetItem(3+j,2,LVIF_TEXT,"NOP",0,0,0,0);

}_BR1.ResetContent();_BR2.ResetContent();_RR.ResetContent();_BAD.ResetContent();_RO.ResetContent();_OF.ResetContent();_OF.InsertString(0,"0"); _CF.ResetContent();_CF.InsertString(0,"0"); _EAX.ResetContent();_EAX.InsertString(0,"F018"); _EBX.ResetContent();_EBX.InsertString(0,"18B2"); _EIP.ResetContent();_EIP.InsertString(0,"0000"); _CS.ResetContent();_CS.InsertString(0,"0100");_DS.ResetContent();_DS.InsertString(0,"0900");_RK.ResetContent();_RK.InsertString(0,"ADD AL,8D");

}CMP80386Dlg::Triang(int left,int top,int trend,bool On)

{POINT p[]={{left-7,top-3},{left,top},{left-7,top+3}};//влевоp2[]={{left,top},{left+7,top-3},{left+7,top+3}};//вправоp3[]={{left,top},{left+3,top+7},{left-3,top+7}};//вверхp4[]={{left,top},{left+3,top-7},{left-3,top-7}};//внизdc(this);Pen;Brush;* oldbrush;* oldpen;(On)

{Pen.CreatePen(PS_SOLID, 1, RGB(200,0,0));.CreateSolidBrush(RGB(200,0,0));

}

{ Pen.CreatePen(PS_SOLID, 1, RGB(0,0,0));.CreateSolidBrush(RGB(0,0,0));

}=dc.SelectObject(&Pen); =dc.SelectObject(&Brush); .SetBkMode(TRANSPARENT);(trend)

{ case 1:dc.Polygon (p,3);;2:dc.Polygon (p2,3);;3:dc.Polygon (p3,3);;4:dc.Polygon (p4,3);;

}.SelectObject(oldpen);.DeleteObject(); .SelectObject(oldbrush);.DeleteObject();

}CMP80386Dlg::DrawLine(int name, bool status, int thickness)

{ POINT ps1[]={{30,360},{493,360}};// Шина Аps2[]={{30,140},{493,140}};// Шина С ps3[]={{30,30},{580,30}};// ША ps4[]={{30,50},{580,50}};// ШУ ps5[]={{30,70},{580,70}};// ШД []={{515,85},{525,70},{535,85},{530,85},{530,100}, {535,100},{525,113},{515,100},{520,100},{520,85},{516,85}};//Ш-УУps7[]={{60,70},{60,88}};//Ш-БАДpy1[]={{432,500},{495,500}};// МУУ-УУ py2[]={{352,500},{265,500},{265,476}};//АЛУ-МУУpy3[]={{420,486},{420,466}};//МУУ-РФ py4[]={{380,486},{380,360}};//шинаА-МУУ py5[]={{215,475},{215,500}};//АЛУ-РР py6[]={{200,425},{200,443}};//BR1-АЛУ py7[]={{270,425},{270,443}};//BR2-АЛУ py8[]={{200,360},{200,405}};//шинаА-BR1py9[]={{275,360},{275,405}};//шинаА-BR2py10[]={{215,520},{215,530},{150,530},{150,360}};//РР-шинаА py11[]={{50,360},{50,405}};//шинаА-Регистры py12[]={{50,358},{50,326}};//шинаА-РО py13[]={{270,358},{270,326}};//шинаА-РК py14[]={{400,358},{400,140}};//шинаА-шинаС py15[]={{270,305},{270,140}};//шинаС-РКpy16[]={{50,276},{50,307}};//сегменты-РОpy17[]={{50,193},{50,210}};//СФА-сегментыpy18[]={{90,193},{90,210}};//СФА-сегменты(2)py19[]={{90,202},{190,202},{190,140}};//СФА-сегменты-шинаС py20[]={{60,138},{60,110}};//шинаС-БАД py21[]={{60,163},{60,140}};//СФА-шинаСPen;Brush;* oldpen;* oldbrush;dc(this);(status)

{ Pen.CreatePen(PS_SOLID, thickness, RGB(200,0,0));.CreateSolidBrush(RGB(200,0,0));

}

{ Pen.CreatePen(PS_SOLID, thickness, RGB(0,0,0));.CreateSolidBrush(RGB(0,0,0));

}=dc.SelectObject(&Pen); =dc.SelectObject(&Brush); (name == 1) .Polyline(ps1,2);//шинаА(name == 2) .Polyline(ps2,2);//шинаС(name == 3) .Polyline(ps3,2); //ША(name == 4) .Polyline(ps4,2); //ШУ(name == 5) .Polyline(ps5,2); //ШД(name == 6).Polyline(ps6,11); //УУ-Ш(name == 7)

{ dc.Polyline(ps7,2); //БАД-Ш(60,70, 3, status);(60, 88, 4, status);

}(name == 8)

{ dc.Polyline(py1,2); // МУУ-УУ (432,500, 2, status);(495, 500, 1, status);

}(name == 9)

{ dc.Polyline(py2,3); //АЛУ-МУУ(352, 500, 1, status);(265, 476, 3, status);

}(name == 10)

{ dc.Polyline(py3,2); //МУУ-РФ(420,486, 4, status);(420, 466, 3, status);

}(name == 11)

{ dc.Polyline(py4,2);//шинаА-МУУ(380,360, 3, status);(380, 486, 4, status);

}(name == 12)

{ dc.Polyline(py5,2);//АЛУ-РР(215,500, 4, status);

}(name == 13)

{ dc.Polyline(py6,2);//BR1-АЛУ(200,443, 4, status);

}(name == 14)

{ dc.Polyline(py7,2);//BR1-АЛУ(270,443, 4, status);

}(name == 15)

{ dc.Polyline(py8,2);//шинаА-BR1(200,405, 4, status);

}(name == 16)

{ dc.Polyline(py9,2);//шинаА-BR2(275,405, 4, status);

}(name == 17)

{ dc.Polyline(py10,4);//РР-шинаА(150,360, 3, status);

}(name == 18)

{ dc.Polyline(py11,2);//шинаА-Регистры(50,360, 3, status);(50,405, 4, status);

}(name == 19)

{ dc.Polyline(py12,2);//шинаА-РО(50,326, 3, status);(50,358, 4, status);

}(name == 20)

{ dc.Polyline(py13,2);//шинаА-РК(270,358, 4, status);

}(name == 21)

{ dc.Polyline(py14,2);//шинаА-шинаС(400,140, 3, status);(400,358, 4, status);

}(name == 22)

{ dc.Polyline(py15,2);//шинаС-РК(270,305, 4, status);

}(name == 23)

{ dc.Polyline(py16,2);//сегменты-РО(50,307, 4, status);(50,276, 3, status);

}(name == 24)

{dc.Polyline(py17,2);//СФА-сегменты(50,192, 3, status);

}(name == 25)

{ dc.Polyline(py18,2);//СФА-сегменты(2)(90,192, 3, status);(90,212, 4, status);

}(name == 26).Polyline(py19,3);//СФА-сегменты-шинаС(name == 27)

{ dc.Polyline(py20,2);//шинаС-БАД(60,110, 3, status);(60,138, 4, status);

}(name == 28)

{dc.Polyline(py21,2);//СФА-шинаС(60,140, 3, status);

}.SelectObject(oldpen);.DeleteObject(); .SelectObject(oldbrush);.DeleteObject();

}CMP80386Dlg::Msg(LPCTSTR txt)

{ CPen Pen(PS_SOLID, 1, RGB(212,208,200));Brush(RGB(212,208,200));dc(this);.SelectObject(Pen);

dc.SelectObject(Brush);.SetBkColor(RGB(212,208,200));.Rectangle(20,560,750,580);.TextOut(20, 560, txt);

}CMP80386Dlg::MicroOperations(int step)

{ CString str,str2;(step)

{//ADD AL,1:

{Msg("В УУ подается сигнал о выполнении команды");

DrawLine(20,true,1);(1,true,2);;}

case 2:

{DrawLine(20,false,1);("УУ подает сигнал чтения из регистра EAX");

DrawLine(18,true,1);;}3:

{DrawLine(18,false,1);

Msg("Считывание регистра AL и запись его в буферный регистр BR1");

m_EAX.GetText(0, str.GetBuffer(5));_BR1.ResetContent();.ReleaseBuffer();_BR1.InsertString(0,str.Right(2));(15,true,1);;}4:

{DrawLine(15,false,1);

Msg("Считывание непосредственного операнда из РК и запись его в буферный регистр BR2");

m_BR2.ResetContent();_BR2.InsertString(0,"8D");(16,true,1);;}5:

{DrawLine(1,false,2);

DrawLine(16,false,1);("УУ передает управление МУУ");

DrawLine(8,true,1);;}6:

{DrawLine(8,false,1);

Msg("МУУ подает сигнал АЛУ на выполнение операции. Выполнение операции");(9,true,1);(13,true,1);(14,true,1);;}7:

{DrawLine(13,false,1);(14,false,1);

Msg("АЛУ подает сигнал МУУ установить флаги. МУУ устанавливает флаги");

DrawLine(10,true,1);;}8:

{DrawLine(9,false,1);(13,false,1);(14,false,1);(10,false,1);

Msg("Запись результата в РР и выдача его на шину А");

m_RR.ResetContent();_RR.InsertString(0,"00A5");(12,true,1);(17,true,1);(1,true,2);;}9:

{DrawLine(12,false,1);(17,false,1);

Msg("Запись результата из РР в AL");

m_RR.GetText(0, str.GetBuffer(5));.ReleaseBuffer();_EAX.GetText(0, str2.GetBuffer(5));.ReleaseBuffer();_EAX.ResetContent();_EAX.InsertString(0,str2.Left(2)+str.Right(2));(18,true,1);;}

//Наращивание EIP10:

{DrawLine(1,false,2);(18,false,1);

Msg("Выдача EIP в регистр обмена(РО)");

m_EIP.GetText(0, str.GetBuffer(5));_RO.ResetContent();.ReleaseBuffer();_RO.InsertString(0,str);(23,true,1);;}11:

{DrawLine(23,false,1);("Выдача регистра обмена(РО) через шину А в BR1");_RO.GetText(0, str.GetBuffer(5));_BR1.ResetContent();.ReleaseBuffer();_BR1.InsertString(0,str);(1,true,2);(19,true,1);(15,true,1);;}12:

{DrawLine(19,false,1);(15,false,1);

Msg("УУ посылает значение в BR2 (размер команды)");

m_BR2.ResetContent();_BR2.InsertString(0,"0002");(16,true,1);;}13:

{DrawLine(19,false,1);(15,false,1);(1,false,2);(16,false,1);

Msg("УУ передает управление МУУ");

DrawLine(8,true,1);;}14:

{DrawLine(8,false,1);

DrawLine(1,false,2);("МУУ подает сигнал АЛУ на выполнение сложения. АЛУ работает и помещает результат в РР");

m_RR.ResetContent();_RR.InsertString(0,"0002");(12,true,1);;}15:

{DrawLine(12,false,1);

Msg("Запись результата из РР В EIP через шину А и РО");

m_RR.GetText(0, str.GetBuffer(5));_RO.ResetContent();_EIP.ResetContent();.ReleaseBuffer();_RO.InsertString(0,str);_EIP.InsertString(0,str);(1,true,2);(17,true,1);(19,true,1);(23,true,1);

break;}

//Выбор следующей команды

case 16:

{DrawLine(1,false,2);(17,false,1);(19,false,1);(23,false,1);("CS и EIP подаются СФА для формирования физического адреса команды");

DrawLine(24,true,1);(25,true,1);;}17:

{DrawLine(17,false,1);(19,false,1);(23,false,1);(24,false,1);(25,false,1);

Msg("Сформированный адрес подается в БАД (буфер адреса данных)");

m_BAD.ResetContent();_BAD.InsertString(0,"1002");(2,true,2);(27,true,1);;}18:

{DrawLine(2,false,2);(27,false,1);

Msg("Выдача полученного адреса на шину адреса");

DrawLine(7,true,2);(3,true,2);;}19:

{DrawLine(7,false,2);(3,false,2);

Msg("УУ посылает сигнал чтения на шину управления");

DrawLine(6,true,2);(4,true,2);;}20:

{DrawLine(6,false,2);(4,false,2);

Msg("Чтение данных из оперативной памяти");

//m_TABLE_CS.SetSelectedColumn(2);;}21:

{ m_TABLE_CS.Update(2);

Msg("На УУ посылается сигнал завершения работы ОП, выдача данных через шину данных и шину С в РК");

m_RK.ResetContent();_RK.InsertString(0,m_TABLE_CS.GetItemText(2,2));(6,true,2);(5,true,2);(2,true,2);(22,true,1);;}

//Выполнение MOV AL,BL22:

{DrawLine(6,false,2);(5,false,2);

DrawLine(2,false,2);(22,false,1);("В УУ подается сигнал о выполнении команды");

DrawLine(20,true,1);(1,true,2);;}

case 23:

{DrawLine(20,false,1);("УУ подает сигнал чтения из регистра EBX");(18,true,1);;}24:

{Msg("Считывание регистра EBX(BL) и УУ подает сигнал записи его в регистр EAX(AL)");

m_EBX.GetText(0, str.GetBuffer(5));.ReleaseBuffer();_EAX.GetText(0, str2.GetBuffer(5));.ReleaseBuffer();_EAX.ResetContent();_EAX.InsertString(0,str2.Left(2)+str.Right(2));;}

//Наращивание EIP25:

{DrawLine(1,false,2);

DrawLine(18,false,1);("Выдача EIP в регистр обмена(РО)");

m_EIP.GetText(0, str.GetBuffer(5));_RO.ResetContent();.ReleaseBuffer();_RO.InsertString(0,str);(23,true,1);;}26:

{DrawLine(23,false,1);("Выдача регистра обмена(РО) через шину А в BR1");_RO.GetText(0, str.GetBuffer(5));_BR1.ResetContent();.ReleaseBuffer();_BR1.InsertString(0,str);(1,true,2);(19,true,1);(15,true,1);;}27:

{DrawLine(19,false,1);(15,false,1);

Msg("УУ посылает значение в BR2 (размер команды)");

m_BR2.ResetContent();_BR2.InsertString(0,"0002");(16,true,1);;}28:

{DrawLine(19,false,1);(15,false,1);(1,false,2);(16,false,1);

Msg("УУ передает управление МУУ");

DrawLine(8,true,1);;}29:

{DrawLine(8,false,1);

DrawLine(1,false,2);("МУУ подает сигнал АЛУ на выполнение сложения. АЛУ работает и помещает результат в РР");

m_RR.ResetContent();_RR.InsertString(0,"0004");(12,true,1);;}30:

{DrawLine(12,false,1);("Запись результата из РР В EIP через шину А и РО");

m_RR.GetText(0, str.GetBuffer(5));_RO.ResetContent();_EIP.ResetContent();.ReleaseBuffer();_RO.InsertString(0,str);_EIP.InsertString(0,str);(1,true,2);(17,true,1);(19,true,1);(23,true,1);

break;}

//Выбор следующей команды31:

{DrawLine(1,false,2);(17,false,1);(19,false,1);

DrawLine(23,false,1);("CS и EIP подаются СФА для формирования физического адреса команды");

DrawLine(24,true,1);(25,true,1);;}32:

{DrawLine(17,false,1);(19,false,1);(23,false,1);(24,false,1);(25,false,1);

Msg("Сформированный адрес подается в БАД (буфер адреса данных)");

m_BAD.ResetContent();_BAD.InsertString(0,"1004");(2,true,2);(27,true,1);;}33:

{ DrawLine(2,false,2);(27,false,1);

Msg("Выдача полученного адреса на шину адреса");

DrawLine(7,true,2);(3,true,2);;}34:

{DrawLine(7,false,2);(3,false,2);

Msg("УУ посылает сигнал чтения на шину управления");

DrawLine(6,true,2);(4,true,2);;}35:

{DrawLine(6,false,2);(4,false,2);

Msg("Чтение данных из оперативной памяти");;}36:

{Msg("На УУ посылается сигнал завершения работы ОП, выдача данных через шину данных и шину С в РК");

m_RK.ResetContent();_RK.InsertString(0,m_TABLE_CS.GetItemText(3,2));(6,true,2);(5,true,2);(2,true,2);(22,true,1);;}

//Выполнение JMP label37:

{DrawLine(6,false,2);(5,false,2);

DrawLine(2,false,2);(22,false,1);("В УУ подается сигнал о выполнении команды");

DrawLine(20,true,1);(1,true,2);;}38:

{DrawLine(1,false,2);(20,false,1);

Msg("Выдача EIP в регистр обмена(РО)");

m_EIP.GetText(0, str.GetBuffer(5));_RO.ResetContent();.ReleaseBuffer();_RO.InsertString(0,str);(23,true,1);;}39:

{DrawLine(23,false,1);("Выдача регистра обмена(РО) через шину А в BR1");_RO.GetText(0, str.GetBuffer(5));_BR1.ResetContent();.ReleaseBuffer();_BR1.InsertString(0,str);(1,true,2);(19,true,1);(15,true,1);;}40:

{DrawLine(19,false,1);(15,false,1);

Msg("Пересылка размера перехода из РК в BR2");

m_BR2.ResetContent();_BR2.InsertString(0,"FFFC");(20,true,1);(16,true,1);;}41:

{DrawLine(19,false,1);(15,false,1);(1,false,2);(16,false,1);(20,false,1);

Msg("УУ передает управление МУУ");

DrawLine(8,true,1);;}42:

{DrawLine(8,false,1);

DrawLine(1,false,2);("МУУ подает сигнал АЛУ на выполнение сложения. АЛУ работает и помещает результат в РР");

m_RR.ResetContent();_RR.InsertString(0,"0000");(12,true,1);;}43:

{DrawLine(12,false,1);

Msg("Запись результата из РР В EIP через шину А и РО");

m_RR.GetText(0, str.GetBuffer(5));_RO.ResetContent();_EIP.ResetContent();.ReleaseBuffer();_RO.InsertString(0,str);_EIP.InsertString(0,str);(1,true,2);(17,true,1);(19,true,1);(23,true,1);;}44:

{DrawLine(1,false,2);(17,false,1);(19,false,1);(23,false,1);("Дальнейшая работа...");

}}

}CMP80386Dlg::OnClose()

{OnOK();}CMP80386Dlg::OnInfo()

{CAboutDlg dlgAbout;.DoModal();

}CMP80386Dlg::OnNext()

{(i);(i<45) i++;

}CMP80386Dlg::OnAuto()

{j;_Next.EnableWindow(FALSE);_Auto.EnableWindow(FALSE);(j=i;j<45;j++)

{MicroOperations(j);(800);

}_Next.EnableWindow(TRUE);_Auto.EnableWindow(TRUE);=44;

}



Курсовая работа Разработка структуры гипотетического микропроцессора и центральной части МЭВМ на его

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ