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

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

60},{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,