Разработка структуры гипотетического микропроцессора и центральной части МЭВМ на его базе. Эмуляция выполнения команд
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
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,