Принцип работы процессора и его практическая реализация с использованием языка высокого уровня C++
Программная реализация основных элементов процессора. Особенность создания регистра команд. Характеристика непосредственной, регистровой и прямой адресации. Принцип работы программы эмуляции процессора. Исследование листинга разработанной программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 06.01.2020 |
Размер файла | 116,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Реферат
Курсовая работа: 23 с., 6 рис., 2 табл., 5 источников.
Ключевые слова: ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР, КОМАНДА, ПРОГРАММА, АДРЕС, НЕПОСРЕДСТВЕННАЯ АДРЕСАЦИЯ, РЕГИСТРОВАЯ АДРЕСАЦИЯ, ПРЯМАЯ АДРЕСАЦИЯ, ПРЕВЫВАНИЕ, СЛОЖЕНИЕ, СДВИГ, ИНВЕРСИЯ, ВЫЧИТАНИЕ.
В данной курсовой работе рассматривается принципе работы процессора и его практическая реализация с использованием языка высокого уровня C++ согласно заданному варианту.
Объект исследования - центральный процессор.
Цель работы - разработать программную реализацию заданного процессора согласно варианту 11, используя языки программирования высокого уровня.
Вариант 11. Разработать программу эмуляции процессора со следующими характеристиками.
Тип команд: двухадресные.
Набор аппаратно исполняемых команд: сложение, инверсия, сдвиг, вычитание.
Количество и формат регистров: 8Ч8 бит, 4Ч16 бит, 4Ч32 бита.
Количество ядер в процессоре: 3.
Основная память: 32 Кбайта, 16 разрядный адрес.
Поддержка прерываний.
Поддерживаемые виды адресации: прямая, непосредственная, регистровая.
Содержание
Введение
1. Структура разрабатываемого процессора
2. Поддерживаемые виды адресации
3. Программная реализация основных элементов процессора
4. Принцип работы программы эмуляции процессора
5. Листинг разработанной программы
Заключение
Используемая литература
Введение
В связи с кризисом классической структуры компьютера дальнейшее поступательное развитие вычислительной техники напрямую связано с переходом к параллельным вычислениям, с идеями построения многопроцессорных систем и сетей, объединяющих большое количество отдельных процессоров или компьютеров. Здесь появляются огромные возможности совершенствования средств вычислительной техники.
Термин вычислительная система появился в начале -- середине 60-х годов при создании ЭВМ третьего поколения. Это время знаменовалось переходом на новую элементную базу -- интегральные схемы. Следствием этого явилось появление новых технических решений: разделение процессов обработки информации и ее ввода-вывода, множественный доступ и коллективное использование вычислительных ресурсов в пространстве и во времени. Появились сложные режимы работы ЭВМ -- многопользовательская и многопрограммная обработка.
Под вычислительной системой (ВС) понимается совокупность взаимосвязанных и взаимодействующих процессоров или ЭВМ, периферийного оборудования и программного обеспечения, предназначенную для сбора, хранения, обработки и распределения информации. Отличительной особенностью ВС по отношению к ЭВМ является наличие в них нескольких вычислителей, реализующих параллельную обработку. Создание ВС преследует следующие основные цели: повышение производительности системы за счет ускорения процессов обработки данных, повышение надежности и достоверности вычислений, предоставление пользователям дополнительных сервисных услуг и т.д.
По назначению вычислительные системы делят на универсальные и специализированные. Универсальные ВС предназначаются для решения самых различных задач. Специализированные системы ориентированы на решение узкого класса задач.
По типу вычислительные системы разделяются на многомашинные и многопроцессорные ВС. Многомашинные вычислительные системы (ММС) появились исторически первыми. Основные различия ММС заключаются, как правило, в организации связи и обмене информацией между ЭВМ комплекса. Каждая из них сохраняет возможность автономной работы и управляется собственной ОС. Любая другая подключаемая ЭВМ комплекса рассматривается как периферийное специальное оборудование.
По типу ЭВМ или процессоров, используемых для построения ВС, различают однородные и неоднородные системы. Однородные системы предполагают объединение однотипных ЭВМ (процессоров), неоднородные - разнотипных. В однородных системах значительно упрощается разработка и обслуживание технических и программных средств.
По методам управления элементами ВС различают централизованные, децентрализованные и со смешанным управлением. Помимо параллельных вычислений, производимых элементами системы, необходимо выделять ресурсы на обеспечение управления этими вычислениями. В централизованных ВС за это отвечает главная, или диспетчерская ЭВМ (процессор). Ее задачей является распределение нагрузки между элементами, выделение ресурсов, контроль состояния ресурсов, координация взаимодействия. Централизованный орган управления в системе может быть жестко фиксирован или эти функции могут передаваться другой ЭВМ (процессору), что способствует повышению надежности системы. Централизованные системы имеют более простые ОС. В децентрализованных системах функции управления распределены между ее элементами. Каждая ЭВМ (процессор) системы сохраняет известную автономию, а необходимое взаимодействие между элементами устанавливается по специальным наборам сигналов.
В ходе данной работы будет разработана программа эмуляции процессора согласно заданию варианта 11, со следующими характеристиками:
Тип команд: двухадресные.
Набор аппаратно исполняемых команд: сложение, инверсия, сдвиг, вычитание.
Количество и формат регистров: 8Ч8 бит, 4Ч16 бит, 4Ч32 бита.
Количество ядер в процессоре: 3.
Основная память: 32 Кбайта, 16 разрядный адрес.
Поддержка прерываний.
Поддерживаемые виды адресации: прямая, непосредственная, регистровая.
Учитывая специфику поставленной задачи, разработка будет вестись на ЯП высокого уровня С++. Это компилируемый, статически типизированный язык программирования общего назначения. Поддерживает такие парадигмы программирования, как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование. Язык имеет богатую стандартную библиотеку, которая включает в себя распространённые контейнеры и алгоритмы, ввод-вывод, регулярные выражения, поддержку многопоточности и другие возможности.
Принято решение, выполнять разработку программы в приложении Dev-C++ -- свободной интегрированной среде разработки приложений для языков программирования C/C++. В дистрибутив входит компилятор MinGW. Сам Dev-C++ написан на Delphi.
1. Структура разрабатываемого процессора
Центральный процессор - это основной рабочий компонент компьютера, основная задача которого - выполнять программы, находящиеся в основной памяти. Процессор вызывает команды из памяти, определяет их тип, затем выполняет их одну за другой. Компоненты соединены шиной, то есть набором параллельно связанных проводов, по которым передаются адреса, данные и сигналы управления. Шины могут быть внешними (связывающими процессор с памятью и устройствами ввода-вывода) и внутренними.
Процессор состоит из нескольких частей:
- блок управления, который отвечает за вызов команд из памяти и определение их типа;
- арифметико-логическое устройство, которое выполняет арифметические (например, сложение) и логические операции (например, логическое ИЛИ);
- внутренняя память центрального процессора для хранения промежуточных результатов и некоторых команд управления. Она состоит из нескольких регистров, каждый из которых выполняет определенную функцию. Обычно все регистры одинакового размера. Каждый регистр содержит одно число, которое ограничивается размером регистра. Регистры считываются и записываются очень быстро, поскольку они находятся внутри центрального процессора.
Самый важный регистр - счетчик команд, который указывает, какую команду нужно выполнять дальше. Также существует регистр команд, в нем находится команда, выполняемая в данный момент.
1. Основная память:
32 КБайта, 16 разрядный адрес. Шестнадцати разрядное число может хранить 216 (или 65535 бит=8192 байта). Минимальный объем ячейки 32 Кбайта/216 = 32768 байт/ 8192 = 4 байта = тип int.
2. Количество и формат регистров:
8х8 бит (1 байт) = восемь регистров типа char.
4х16 бит (2 байта)= четыре регистра типа short int.
4х32 бита (4 байта) = четыре регистра типа int.
3. Двухадресная система команд:
В качестве адреса результата операции можно использовать адрес одного из исходных операндов. Так как адресов только два, для выполнения бинарной операции первый и второй операнды задаются в команде явно в качестве адресов, а местоположение результата операции задается неявно, по умолчанию. В рассмотренном случае на Рисунке 1.1, результат бинарной операции по умолчанию помещается на место первого операнда, уничтожая его старое значение, но команда становится компактнее. (В большинстве современных машин, в том числе и в наиболее распространенных персональных ЭВМ, двухадресные команды выполняются именно по такой схеме).
Рисунок 1.1 - Двухадресная система команд
2. Поддерживаемые виды адресации
Непосредственная адресация - при непосредственной адресации (НА) в адресном поле команды вместо адреса содержится непосредственно сам операнд (Рисунок 1.2). Этот способ может применяться при выполнении арифметических операций, операций сравнения, а также для загрузки констант в регистры. Когда операндом является число, оно обычно представляется в дополнительном коде. При записи в регистр, имеющий разрядность, превышающую длину непосредственного операнда, операнд размещается в младшей части регистра, а оставшиеся свободными позиции заполняются значением знакового бита операнда.
Рисунок 1.2 - Непосредственная адресация
Помимо того, что в адресном поле могут быть указаны только константы, еще одним недостатком данного способа адресации является то, что размер непосредственного операнда ограничен длиной адресного поля команды, которое в большинстве случаев меньше длины машинного слова.
Регистровая адресация - регистровая адресация (РА) напоминает прямую адресацию. Различие состоит в том, что адресное поле инструкции указывает не на ячейку памяти, а на регистр процессора (Рисунок 1.3). Обычно размер адресного поля в данном случае составляет три или четыре бита, что позволяет указать соответственно на один из 8 или 16 регистров общего назначения.
Рисунок 1.3 - Регистровая адресация
Двумя основными преимуществами регистровой адресации являются: короткое адресное поле в команде и исключение обращений к памяти.
Прямая адресация - при прямой или абсолютной адресации (ПА) адресный код прямо указывает номер ячейки памяти, к которой производится обращение (Рисунок 1.4), то есть адресный код совпадает с исполнительным адресом.
Рисунок 1.4 - Прямая адресация
При всей простоте использования, способ имеет существенный недостаток - ограниченный размер адресного пространства, так как для адресации к памяти большой емкости нужно «длинное» адресное поле. Однако более существенным несовершенством можно считать то, что адрес, указанный в команде, не может быть изменен в процессе вычислений (во всяком случае, такое изменение не рекомендуется). Это ограничивает возможности по произвольному размещению программы в памяти.
5. Набор аппаратно исполняемых команд: сложение, инверсия, сдвиг, вычитание. Набор команд - это множество операций, которое исполняет процессор, это та граница, где проектировщик компьютера и программист рассматривают архитектуру, как единое целое. Команда объединяет информацию, которая необходима устройству управления для ее исполнения и содержит следующие элементы. Набор аппаратно исполняемых команд представлен в таблице 1
Таблица 1 - Набор аппаратно исполняемых команд
№п/п |
Обозначение команды |
Мнемоническое название |
Содержание |
|
1 |
MOV |
Непосредственная адресация |
reg=num |
|
2 |
MOV |
Регистровая адресация |
op1=op2 |
|
MOV |
Прямая адресация |
AL=mem2 |
||
3 |
ADD |
Сложение целых чисел |
op1=op1+op2 |
|
4 |
LS |
Сдвиг влево |
op1=op1<<num |
|
5 |
RS |
Сдвиг вправо |
op1=op1>>num |
|
6 |
NEG |
Инверсия |
op1=~op1 |
|
7 |
SUB |
Вычитание |
op1=op1-op2 |
6. Поддержка прерываний: Прерывание означает временное прекращение основного процесса вычислений для выполнения некоторых запланированных или незапланированных действий, вызываемых работой аппаратуры или программы. Принцип обработки прерываний представлен на рисунке 1.6
Рисунок 3 - Принцип обработки прерываний
Механизм прерываний поддерживается на аппаратном уровне. Аппаратные прерывания возникают как реакция микропроцессора на физический сигнал от некоторого устройства (клавиатура, системные часы, клавиатура, жесткий диск и т.д.), по времени возникновения эти прерывания асинхронны, т.е. происходят в случайные моменты времени.
3. Программная реализация основных элементов процессора
Рассмотрим возможные варианты программной реализации основных элементов процессора.
1) Память состоит из ячеек, каждая из которых может хранить некоторую порцию информации. Каждая ячейка имеет номер, который называется адресом, По адресу программы могут ссылаться на определенную ячейку. Если память содержит n ячеек, они будут иметь адреса от 0 до n-1. Все ячейки памяти содержат одинаковое число битов. Если ячейка состоит из k битов, она может содержать любую из комбинаций.
Ячейка - минимальная единица, к которой можно обращаться. Практически все производители выпускают компьютеры с 8-битными ячейками, которые называются байтами. Байты группируются в слова. Компьютер с 32-битными словами имеет 4 байта на каждое слово, а компьютер с 64-битными словами - 8 байтов на каждое слово.
В качестве постоянной памяти процессора в разрабатываемой симуляции можно использовать массив, каждый элемент которого будет являться ячейкой памяти (словом). Тип данных следует определить как unsigned long int.
В нашем случае, задан размер основной памяти 32 Кбайта и 16 разрядный адрес. Это значит, что всего имеется 32Ч1024Ч8=262144 бит, при разрядности 16. На основании этого можно определить, что такое количество бит соответствует 16384 слов, то есть количество элементов в массиве - 16384.
Соответственно, данные переменные требуется объявить в глобальных переменных следующим образом:
unsigned long int memory[16384]; // оперативная память- RAM
unsigned long int commands[16]; // команды в памяти
2) Чтобы задать количество ядер программно реализуемого процессора (в нашем случае ядра три), в методе main нужно создать три экземпляра класса Processor, которые, соответственно, будут интерпретировать трехъядерный процессор.
Таким образом, при задании, трех экземпляров класса Processor запускается цикл, в котором вызываются соответствующие методы для первого, второго и третьего экземпляров. Один проход цикла представляет собой один такт процессора. После выполнения всех команд, цикл останавливается.
После задания необходимого количества экземпляров класса Processor необходимо произвести инициализацию регистров. Ниже приведен пример реализации эмуляции трехъядерного процессора:
int main()
{
setlocale(LC_ALL, "Rus");
Processor proc1;
Processor proc2;
Processor proc3;
// Инициализация 32 регистров 3 типов
unsigned char *regAH_1 = &proc1.ah;
unsigned char *regAL_1 = &proc1.al;
unsigned char *regBH_1 = &proc1.bh;
unsigned char *regBL_1 = &proc1.bl;
unsigned char *regCH_1 = &proc1.ch;
unsigned char *regCL_1 = &proc1.cl;
unsigned char *regDH_1 = &proc1.dh;
unsigned char *regDL_1 = &proc1.dl;
unsigned char *regAH_2 = &proc2.ah;
unsigned char *regAL_2 = &proc2.al;
unsigned char *regBH_2 = &proc2.bh;
unsigned char *regBL_2 = &proc2.bl;
unsigned char *regCH_2 = &proc2.ch;
unsigned char *regCL_2 = &proc2.cl;
unsigned char *regDH_2 = &proc2.dh;
unsigned char *regDL_2 = &proc2.dl;
unsigned char *regAH_3 = &proc3.ah;
unsigned char *regAL_3 = &proc3.al;
unsigned char *regBH_3 = &proc3.bh;
unsigned char *regBL_3 = &proc3.bl;
unsigned char *regCH_3 = &proc3.ch;
unsigned char *regCL_3 = &proc3.cl;
unsigned char *regDH_3 = &proc3.dh;
unsigned char *regDL_3 = &proc3.dl;
unsigned short int *regAX_1 = &proc1.ax;
unsigned short int *regBX_1 = &proc1.bx;
unsigned short int *regCX_1 = &proc1.cx;
unsigned short int *regDX_1 = &proc1.dx;
unsigned long int *regEAX_2 = &proc1.eax;
unsigned long int *regEBX_2 = &proc1.ebx;
unsigned long int *regECX_2 = &proc1.ecx;
unsigned long int *regEDX_2 = &proc1.edx;
unsigned char *regIP = &ip; // счётчик команд, содержит адрес следующей команды
unsigned char *reg_current_command = ¤t_command; // ре-гистр для текущей первой команды
bool stop_bit = 1; // бит останова 1-start, 0-stop
3) В зависимости от источника возникновения сигнала прерывания делятся на:
- асинхронные, или внешние (аппаратные) - события, которые исходят от внешних аппаратных устройств (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание;
- синхронные, или внутренние - события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение стека, обращение к недопустимым адресам памяти или недопустимый код операции;
- программные (частный случай внутреннего прерывания) - инициируются исполнением специальной инструкции в коде программы. Программные прерывания, как правило, используются для обращения к функциям встроенного программного обеспечения (firmware), драйверов и операционной системы. Если работает программа обработки прерываний с приоритетом n, любая попытка другого устройства с более низким приоритетом будет игнорироваться, пока программа обработки прерываний не завершится и пока центральный процессор не возвратится к выполнению программы более низкого приоритета. С другой стороны, прерывания, поступающие от устройств с более высоким приоритетом, должны происходить без задержек.
В нижеприведенном примере показан код (добавляется в класс Processor), симулирующий работу указанных видов прерываний процессора. С помощью функции void задан вызов трех типов прерываний (системного, внешнего и программного).
/* ВЫЗОВ СИСТЕМНОГО ПРЕРЫВАНИЯ */
void SystemInterrupt()
{
cout << "Вызвано системное прерывание." << endl;
}
/* ВЫЗОВ ВНЕШНЕГО ПРЕРЫВАНИЯ */
void ExternalInterrupt()
{
cout << "Вызвано внешнее прерывание." << endl;
}
/* ВЫЗОВ ПРОГРАММОЕ ПРЕРЫВАНИЕ */
void SoftwareInterrupt()
{
cout << "Вызвано программное прерывание." << endl;
}
/* ВЫЗОВ ПРЕРЫВАНИЯ */
void Interrupt()
{
int i = 0;
long vector[20];
long value = 0;
long interrupt_type = 0;
cout << "Ввызвать прерывание?: " << endl;
cout << "0 - нет" << endl;
cout << "1 - да" << endl;
cin >> value;
if (value == 1)
{
interrupt == true;
while (interrupt_type != 3)
{
cout << "Тип прерывания?: " << endl;
cout << "0 - системное прерывание" << endl;
cout << "1 - внешнее прерывание" << endl;
cout << "2 - программное прерывание" << endl;
cout << "3 - конец ввода" << endl;
cin >> interrupt_type;
if (interrupt_type != 3)
{
vector[i] = interrupt_type;
i++;
}
if (interrupt_type == 3)
{
for (int k = i - 1; k >= 0; k--)
{
if (vector[k] == 0) SystemInterrupt();
if (vector[k] == 1) ExternalInterrupt();
if (vector[k] == 2) SoftwareInterrupt();
}
interrupt == false;
}}}
else {interrupt == false;}}
4. Принцип работы программы эмуляции процессора
Основное назначение разрабатываемой программы - эмулировать работу процессора. Наглядно и доступно объяснить на практике методы его работы, структуру и способ взаимодействия с входными данными. Программа эмуляции процессора представляет из себя код, написанный на языке программирования С++. Программа представляет из себя набор переменных и методов, особым образом скомпонованным и взаимодействующих друг с другом. Также, активно используются указатели. В основном, указатели используются для организации динамического распределения памяти, например при объявлении массива, не надо будет его ограничивать в размере. Программист заранее не может знать, какого размера нужен массив тому или иному пользователю, в таком случае используется динамическое выделение памяти под массив. При объявлении указателей компилятор выделяет несколько байт памяти, в зависимости от типа данных отводимых для хранения некоторой информации в памяти. Можно выделить следующие структурные и функциональные особенности программы: процессор регистровый адресация эмуляция
По заданию, требуется реализовать трехъядерный процессор. Чтобы задать количество ядер программно реализуемого процессора в методе main нужно создать три экземпляра класса Processor, которые будут интерпретировать трехъядерный процессор. Классы Processor, в дальнейшем инициализируются и выполняют свои собственные методы. Перед инициализацией ядра объявлены регистры, в количестве и формате, согласно варианту: 4Ч8 бит, 8Ч16 бит, 4Ч32 бита.
В конструкторе ядра Processor происходит инициализация основной памяти. 32 Кбайта, 16 разрядный адрес. 32 Кбайта = 32768 байт, 16-разрядное число может хранить 65535 бит=8192 байта - хранится в массиве memorу, типа int, размером 8192. Также, данный класс отвечает за выполнение аппаратно исполняемых команд (сложение, сдвиг, инверсия и вычитание). Выполняемые команды представлены в Таблице 1.
Таблица 2. Система команд процессора
№ п/п |
Код операции |
Мнемоника |
Содержание |
Изменяемые |
Пример команды |
|
3 |
02 |
add |
сложение регистр-регистр |
*R1=*R1+*R2 |
02050403 |
|
4 |
03 |
add |
сложение регистр-память |
*R1=*R1+num |
03010604 |
|
5 |
04 |
ls |
сдвиг влево на заданное кол-во разрядов |
*R1=*R1<<num |
04030705 |
|
6 |
05 |
rs |
сдвиг вправо на заданное кол-во разрядов |
*R1=*R1>>num |
05080906 |
|
7 |
06 |
neg |
инверсия |
*R1=~*R1 |
06040707 |
|
8 |
07 |
sub |
вычитание регистр-регистр |
R1, R2 |
07020508 |
Второе ядро (класс Processor 2) отвечает за три вида адресации (прямой, регистровой и непосредственной). Данные команды представлены в виде внутренних методов с формальными параметрами, которые при вызове заменяются фактическими значениями. Самый простой способ адресации (то есть определения операнда) - непосредственная адресация - содержит в адресной части сам операнд, а не адрес операнда или какую-либо другую информацию, описывающую, где находится операнд. Такой операнд называется непосредственным операндом, поскольку он автоматически вызывается из памяти одновременно с командой; следовательно, он сразу непосредственно становится доступным. При прямой адресации просто дается полный адрес операнда. Прямая адресация имеет некоторые ограничения: команда всегда будет иметь доступ только к одному и тому же адресу памяти. То есть значение может меняться, а адрес - нет. Регистровая адресация сходна с прямой адресацией, только в данном случае вместо ячейки памяти определяется регистр. этот способ адресации является самым распространенным на большинстве компьютеров.
В третьем ядре (Processor 3) реализованы прерывания. С помощью функции void задан вызов трех типов прерываний (системного, внешнего и программного). Прерывания - это изменения в потоке управления, вызванные не самой программой, а чем-либо другим и обычно связанные с процессом ввода-вывода. В зависимости от источника возникновения сигнала прерывания делятся на асинхронные - события, которые исходят от внешних аппаратных устройств (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание; Синхронные - события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение стека, обращение к недопустимым адресам памяти или недопустимый код операции; Программные - инициируются исполнением специальной инструкции в коде программы. Программные прерывания, как правило, используются для обращения к функциям встроенного программного обеспечения (firmware), драйверов и операционной системы.
5. Листинг разработанной программы
#include <iostream>
#include <stdio.h>
using namespace std;
// объявление класса Processor
class Processor {public:
// память
// основная память 32 Кбайта 16 разрядный адрес
//32 Кбайта = 32768 байт. 16-разрядное число может хранить 65535 бит=8192 //байта
unsigned int *memory;
// количество и формат регистров
// 8Ч8 бит
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
unsigned char e;
unsigned char f;
unsigned char g;
unsigned char h;
// 4Ч16 бит unsigned short int bit16[4];
// 4Ч32 бита
unsigned long int dv_a;
unsigned long int dv_b;
unsigned long int dv_c;
unsigned long int dv_d;
Processor() { // Инициализация переменных конструктора
memory = new unsigned int [8192];
a=0;b=0;c=0;d=0;e=0;f=0;g=0;h=0;
for (int t=0; t<4; ++t) bit16[t]= t+2;
};
// НАБОР АППАРАТНО ИСПОЛНЯЕМЫХ КОМАНД
// сложение
void add (unsigned char *op1, unsigned char *op2) {*op1=*op1+*op2;};
void add (unsigned char *op1,unsigned char num)
{*op1=*op1+num;};
// сдвиг влево, передаваемое число - количество разрядов сдвига
void ls (unsigned char *op1, unsigned char num) {*op1=*op1<<num;};
// сдвиг вправо, передаваемое число - количество разрядов сдвига
void rs (unsigned char *op1, unsigned char num)
{*op1=*op1>>num;};
// инверсия
void neg (unsigned char *op1)
{*op1=~*op1;};
// вычитание
void sub (unsigned char *op1, unsigned char *op2)
{*op1=*op1-*op2;};};
class Processor2
{public:
// АДРЕСАЦИЯ
// прямая адресация
void mov (unsigned char op1, unsigned char *adres)
{op1=op1+*adres;};
// непосредственная адресация
void mov (unsigned char *reg, unsigned char num)
{*reg=num;};
// регистровая адресация
void mov (unsigned char *op1, unsigned char *op2)
{*op1=*op2;};};
class Processor3
{public:
// ПРЕРЫВАНИЯ
/* ВЫЗОВ СИСТЕМНОГО ПРЕРЫВАНИЯ */
void SystemInterrupt()
{cout << "Vizvano sis prer." << endl;}
/* ВЫЗОВ ВНЕШНЕГО ПРЕРЫВАНИЯ */
void ExternalInterrupt()
{cout << "Vizvano vnesh prer." << endl;}
/* ВЫЗОВ ПРОГРАММОГО ПРЕРЫВАНИЯ */
void SoftwareInterrupt()
{cout << "Vizvano prog prer." << endl;}
/* ВЫЗОВ ПРЕРЫВАНИЯ */
void Interrupt(){int i = 0;long vector[20];
bool inter = true; long value = 0;
long interrupt_type = 0;
cout << "Vizvat prer ?: " << endl;
cout << "0 - net" << endl;
cout << "1 - da" << endl;
cin >> value;
if (value == 1){ inter == true;
while (interrupt_type != 3)
{cout << "Tip preriv ?: " << endl;
cout << "0 - sistem preriv" << endl;
cout << "1 - vnesh preriv" << endl;
cout << "2 - progr preriv" << endl;
cout << "3 - konec vvoda" << endl;
cin >> interrupt_type;
if (interrupt_type != 3)
{vector[i] = interrupt_type;i++;}
if (interrupt_type == 3){
for (int k = i - 1; k >= 0; k--){
if (vector[k] == 0) SystemInterrupt();
if (vector[k] == 1) ExternalInterrupt();
if (vector[k] == 2) SoftwareInterrupt();
} inter == false;}}} else {inter == false; }}};
// ГЛАВНЫЙ МЕТОД, ТОЧКА ВХОДА
int main (){Processor proc1;
Processor2 proc2;
Processor3 proc3;
unsigned char *rega=&proc1.a;
unsigned char *regb=&proc1.b;
unsigned char *regc=&proc1.c;
unsigned char *regd=&proc1.d;
unsigned char *rege=&proc1.e;
unsigned char *regf=&proc1.f;
unsigned char *regg=&proc1.g;
unsigned char *regh=&proc1.h;
proc2.mov(rega,8);proc2.mov(regb,2);
proc2.mov(regc,32);proc2.mov(regd,rega);
proc2.mov(rege,4);proc2.mov(regf,6);
proc2.mov(regg,12);proc2.mov(regh,rege);
printf("mov regh, rege %d \n", *regh);
// выполнение операции сложения содержимого регистров 'а' и 'b'
proc1.add(rega,regb);
// сдвиг на три регистра
proc1.ls(regb,3);
printf("ADD rega %d \n", *rega);
printf("LS regb %d \n", *regb);
// выполнение операции вычитания регистра d из с
proc1.sub(regc,regd);
printf("SUB c-d: %d \n", *regc);
// предварительный вывод массива
cout << "\nPremier array\n";
for (int t=0; t<4;++t)
cout << proc1.bit16[t]<<" ";
cout << "\n";proc3.Interrupt();
system ("pause");
return (0);}
Заключение
В ходе выполнения курсовой работы была разработана программа эмуляция работы процессора. В ходе данного процесса, были изучены и разобраны некоторые виды адресации, а именно: прямая, регистровая и непосредственная. Посредством возможностей языка программирования С++ были реализованы система прерывания, система команд процессора, наглядно продемонстрирована работа регистров и указателей.
Отдельное внимание стоит уделить возможностям ЯП С++. Благодаря богатому функционалу и большому количеству исчерпывающей информации на форумах в сети интернет, новичку, даже далекому от программирования не составляет труда освоить данный ЯП.
Результатом стала рабочая программа, демонстрирующая всю важность и значимость процессоров в современном подходе к способам построения архитектуры вычислительных систем различной сложности. Начиная от простой мультиварки и заканчивая адронным коллайдером, связующим звеном человека и техники остаются процессоры. Трудно переоценить необходимость понимания принципов функционирования сердца вычислительной техники в современном цифровом обществе.
Используемая литература
1. Гук М. Аппаратные средства IBM PC. Энциклопедия. Спб.: Питер, 2006. - 1072 с.
2. Таненбаум Э., Остин Т. Архитектура компьютера. 6 изд. Спб: Питер, 2013. - 816 с.
3. Акулов О.А., Медведев Н.В. Информатика. Базовый курс: учебник для студентов вузов. - М.: Омега-Л, 2013. - 574 с.
4. Евдокимов Л. Петров Н., Филатов С. Рекомендации к разработке ПО. - М.: Омега-Л, 2015. - 251 с.
5. Сапрунов Л. Код глазами разработчика. . Спб: Питер, 2018. - 312 с.
Размещено на Allbest.ru
...Подобные документы
Рассмотрение принципа работы процессора и его практической реализации с использованием языка описания аппаратуры Verilog. Проектирование системы команд процессора. Выбор размера массива постоянной памяти. Подключение счетчика инструкций и файла регистра.
курсовая работа [1,2 M], добавлен 26.05.2022Принцип работы процессора, способы его охлаждения, кодовые названия. Шины процессора, разрядность и кэш–память. Технологии расширения и поток команд процессора. Процессорные вентиляторы и их характеристика. Алгоритм и способы разгона процессора.
реферат [38,0 K], добавлен 21.02.2009Принцип работы процессора (одномагистральная структура). Временные диаграммы, описывающие выполнение микроопераций для каждой команды. Структурная схема управляющего автомата на основе памяти с одним полем адреса. Описание процессора на языке Active VHDL.
курсовая работа [621,0 K], добавлен 24.09.2010Разработка устройства, реализующего набор команд из числа операций с плавающей точкой семейства процессора i486. Структура сопроцессора FPU. Принцип выполнения операций, разработка блок-схемы, построение структурной схемы основных блоков процессора.
курсовая работа [734,9 K], добавлен 27.10.2010Разработка структурной схемы процессора; синтез микропрограммного и управляющего автомата с жесткой логикой. Функциональная организация процессора: программные модели, форматы данных и команд. Организация оперативной памяти. Проектирование блока операций.
учебное пособие [1,1 M], добавлен 09.04.2013Управление взаимодействием всех устройств ЭВМ. История создания и развития производства процессора. Структура центрального процессора. Регистры общего назначения. Обозначения популярных моделей процессоров Intel и AMD. Команды центрального процессора.
реферат [111,2 K], добавлен 25.02.2015Разработка модели процессора, выполняющего набор машинных команд. Структурная схема процессора (операционного и управляющего автоматов), анализ принципа работы. Содержательный алгоритм микропрограммы, синтез управляющего автомата на основе жесткой логики.
курсовая работа [871,9 K], добавлен 16.09.2010Строка Меню текстового процессора и панель инструментов Форматирование текстового процессора MS Word, назначение основных команд и кнопок. Технология формирования (расчета) ведомости выдачи заработной платы средствами табличного процессора MS Excel.
контрольная работа [15,1 K], добавлен 09.05.2010Функциональная и структурная организация ЭВМ. Разработка функциональных микропрограмм заданных команд. Их объединение и привязка к структуре операционного автомата процессора. Разработка управляющего автомата процессора с программируемой логикой.
дипломная работа [4,0 M], добавлен 25.03.2012Выбор режимов адресации, посредством которых будет осуществлен доступ к данным. Этапы создания программы. Характеристика таблицы символов и полученного файла листинга. Анализ изменения состояния регистра IP при выполнении команд JMP, Jcc, LOOPx.
курсовая работа [4,9 M], добавлен 25.03.2012Понятия и принцип работы процессора. Устройство центрального процессора. Типы архитектур микропроцессоров. Однокристальные микроконтроллеры. Секционные микропроцессоры. Процессоры цифровой обработки сигналов. Эволюция развития микропроцессоров Intel.
реферат [158,8 K], добавлен 25.06.2015Разработка программы эмулятора, которая должна имитировать рабочий цикл процессора для каждой команды. Анализ структуры микропроцессора. Моделирующие переменные. Мнемоника команд моделируемого процессора. Разработка структуры программы: классов, методов.
курсовая работа [156,8 K], добавлен 07.11.2012История развития центрального процессора. Основные проблемы создания многоядерных процессоров. Проектирование микропроцессорной системы на базе процессора Intel 8080. Разработка принципиальной схемы и блок-схемы алгоритма работы микропроцессорной системы.
курсовая работа [467,6 K], добавлен 11.05.2014Разработка программы на языке Ассемблер для определения типа центрального процессора и его производительности. Основные этапы определения любого существующего Intel-совместимого процессора. Тактовая частота процессора, алгоритм и листинг программы.
курсовая работа [47,6 K], добавлен 26.07.2014Общий вид вычислительной системы. Начальная последовательность действий. Элементы организации основных блоков ЭВМ. Архитектурная организация процессора ЭВМ. Организация систем адресации и команд ЭВМ. Система внешних устройств. Средства вывода информации.
курсовая работа [39,5 K], добавлен 28.01.2012Изучение элементов структуры микропроцессора i80386 и алгоритмов выполнения множества команд. Разработка проекта структуры АЛУ и структуры микро-ЭВМ на базе гипотетического процессора. Описание и создание программы эмуляции по выполнению заданных команд.
курсовая работа [484,4 K], добавлен 07.09.2012Ознакомление с языком ассемблера процессора Neuro Matrix NM 6403, его возможности, особенности работы, содержание операций в регистрах, архитектура. Разработка программы для заполнения блока памяти, компилирование и отладка файла, фиксирование его адреса.
лабораторная работа [48,2 K], добавлен 18.10.2012Последовательность активных фаз процессора и фаз ввода-вывода. Гистограмма периодов активности процессора. Стратегия обслуживания в порядке поступления и обслуживания самого короткого задания первым. Реализация стратегии диспетчеризации для приложений.
курсовая работа [507,1 K], добавлен 11.05.2012Функциональная организация процессора. Сложение с нормализацией, синтез операций, выборка команды. Описание структурной схемы процессора. Синтез управляющего автомата, разметка граф схемы. Разбиение микроопераций по полям и кодирование логических условий.
курсовая работа [91,8 K], добавлен 24.09.2010Синтез структуры простого магистрального процессора с одним АЛУ, выполняющего 8 заданных команд. Разработка формата и кодировки команд, структурной схемы процессора, функциональные схемы всех его блоков в целом с указанием шин и управляющих сигналов.
реферат [123,9 K], добавлен 18.05.2009