Смекни!
smekni.com

Взаимодействие основных частей ЭВМ при выполнении программы (стр. 2 из 3)

Arrow(X0 + 365, Y0 + 185, 0, 1); {5}

SetColor(BRDCol);

Rectangle(0, 0, GetMaxX, GetMaxY);

end; {BildWin}

{-------------------}

procedure BildContext;

const

TxtCol: Word = LightBlue;

begin

SetColor(BRDCol); {Устанавливаем цвет границы и рисуем ее}

Rectangle(XC, YC, GetMaxX - X0, YC + 300);

SetTextJustify(1, 1);

SetColor(TxtCol + 1); {Заголовок}

OutTextXY(GetMaxX - (GetMaxX - X0 - XC) div 2 - X0, YC + 20, 'Обозначения ' +

'на схеме:');


CArrow := BArrow; {Стрелки}

SetColor(ARBCol);

SetFillStyle(1, Blue);

Arrow(XC + 50, YC + 50, 40, 2);

FloodFill(XC + 40, YC + 50, ARBCol);

CArrow := SArrow;

SetColor(ARSCol);

Arrow(XC + 50, YC + 80, 40, 2);

SetColor(LightGreen);

Arrow(XC + 50, YC + 80, 0, 2);

SetColor(MemCol);

SetLineStyle(1, 0, 0);

Line(XC + 10, YC + 110, XC + 34, YC + 110);

Line(XC + 10, YC + 126, XC + 34, YC + 126);

Line(XC + 14, YC + 106, XC + 14, YC + 128);

Line(XC + 30, YC + 106, XC + 30, YC + 128);

SetColor(CPUCol);

Line(XC + 12, YC + 150, XC + 30, YC + 150);

SetLineStyle(0, 0, 0);

SetColor(TxtCol);

SetTextJustify(0, 1); {Значения}

OutTextXY(XC + 60, YC + 50, ' - Передача данных');

OutTextXY(XC + 60, YC + 80, ' - Сигнал управления');

OutTextXY(XC + 60, YC + 120, ' - Ячейка памяти');

OutTextXY(XC + 60, YC + 150, ' - Данной линией');

OutTextXY(XC + 60, YC + 160, ' обведены части');

OutTextXY(XC + 60, YC + 170, ' входящие в состав');

OutTextXY(XC + 60, YC + 180, ' процессора (ЦПУ)');

OutTextXY(XC + 20, YC + 200, '█ - содержимое файла');

OutTextXY(XC + 20, YC + 210, '1 - адрес первого операнда');

OutTextXY(XC + 20, YC + 220, '2 - адрес второго операнда');

OutTextXY(XC + 20, YC + 230, '3 - адрес результата');

SetTextJustify(0, 0)

end; {Context}

{-------------------}

procedure BildFuncKey;

const

StrFK: array [1..4] of string[11] =

('Помощь F1', 'Назад <-', 'Вперед ->', 'Выход Esc');

FkbCol: Word = Green;

TxtCol: Word = LightCyan;

begin

SetColor(BRDCol);

Rectangle(XS, YS, GetMaxX - XS, GetMaxY - XS);

SetTextJustify(1, 1);

SetFillStyle(1, DarkGray);

for I := 1 to 4 do

begin

SetColor(FkbCol); {Установка цвета границы клавиш}

Bar((GetMaxX - XS * 2) div 5 * I - Length(StrFK[I]) * 4, YS + 7,

(GetMaxX - XS * 2) div 5 * I + Length(StrFK[I]) * 4, YS + 23);

Rectangle((GetMaxX - XS * 2) div 5 * I - Length(StrFK[I]) * 4, YS + 7,

(GetMaxX - XS * 2) div 5 * I + Length(StrFK[I]) * 4, YS + 23);

SetColor(Black); {Установка цвета текста клавиш}

OutTextXY((GetMaxX - XS * 2) div 5 * I + 2, YS + 15 - 2, StrFK[I]);

SetColor(TxtCol);

OutTextXY((GetMaxX - XS * 2) div 5 * I, YS + 15, StrFK[I])

end;

SetTextJustify(0, 0);

{Сахраняем картинки}

FuncKeyWindow[1].Get(XS, YS, GetMaxX - XS, GetMaxY - XS);

SetFillStyle(1, GetBkColor);

Bar((GetMaxX - XS * 2) div 5 * 3 - Length(StrFK[I]) * 4, YS + 7,

(GetMaxX - XS * 2) div 5 * 3 + Length(StrFK[I]) * 4, YS + 23);


FuncKeyWindow[3].Get(XS, YS, GetMaxX - XS, GetMaxY - XS);

FuncKeyWindow[1].Put(XS, YS);

Bar((GetMaxX - XS * 2) div 5 * 2 - Length(StrFK[I]) * 4, YS + 7,

(GetMaxX - XS * 2) div 5 * 2 + Length(StrFK[I]) * 4, YS + 23);

FuncKeyWindow[2].Get(XS, YS, GetMaxX - XS, GetMaxY - XS)

end; {FuncKey}

{-------------------}

{+----------------------------------------------+}

{ }

{ Процедуры вывода текстовой информации на экран }

{ }

{+----------------------------------------------+}

procedure Page_1;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

ClearViewPort;

SetColor(Blue);

OutTextXY(GetMaxX - X - 25, 100, '1');

SetColor(TxtCol);

MyText(0, 8, 'До начала работы программы, она находится на ВЗУ, ' +

'в виде файла программы');

MyText(0, 16, '(*.exe или *.com).');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_1}

{-------------------}

procedure Page_2;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

ClearViewPort;

SetColor(Blue);

OutTextXY(GetMaxX - X - 25, 100, '2');

SetColor(TxtCol);

MyText(0, 8, 'После того как ЭВМ получила команду на запуск ' +

'программы, содержимое');

MyText(0, 16, 'этого файла помещается в ячейку ОЗУ, начиная с ' +

'ячейки с некоторым');

MyText(0, 24, 'стартовым адресом.');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_2}

{-------------------}

procedure Page_3;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

ClearViewPort;

SetColor(Blue);

OutTextXY(GetMaxX - X - 25, 100, '3');

SetColor(TxtCol);

MyText(0, 8, 'Содержимое ячейки со стартовым адресом программы ' +

' (первая машинная команда)');

MyText(0, 16, 'пересылается в УУ. УУ расшифровывает первую машинную ' +

'команду и выробатывает');

MyText(0, 24, 'соответствующие ей сигналы управления для всех систем управления.');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_3}

{-------------------}

procedure Page_4_1;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

ClearViewPort;

SetColor(Blue);

OutTextXY(GetMaxX - X - 25, 100, '4');

SetColor(TxtCol);

MyText(0, 8, 'Например: если первой машинной командой оказалась ' +

'трех адресной командой');

MyText(0, 16, 'сложения двух чисел, произойдут следующие действия:');

MyText(0, 24, '- УУ посылает первый и второй адреса в ОЗУ');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_1}

{-------------------}

procedure Page_4_2;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

SetColor(TxtCol);

MyText(0, 32, '- ОЗУ пересылает содержимое ячеек с этими адресами в АЛУ,');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_2}

{-------------------}

procedure Page_4_3;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

SetColor(TxtCol);

MyText(0, 40, '- УУ отправляет сигнал управления (КОП) в АЛУ,');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_3}

{-------------------}

procedure Page_4_4;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

SetColor(TxtCol);

MyText(0, 48, '- АЛУ выполняет эту операцию (сложение) над двумя ' +

'операндами и возвращает');

MyText(0, 56, ' результат в ОЗУ.');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_4}

{-------------------}

procedure Page_4_5;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

SetColor(TxtCol);

MyText(0, 64, '- УУ собщает ОЗУ третий адрес (адрес результата),');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_5}

{-------------------}

procedure Page_4_6;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

SetColor(TxtCol);

MyText(0, 72, '- ОЗУ помещает полученный результат в ячейку памяти.');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_6}

{-------------------}

procedure Page_4_7;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

SetColor(TxtCol);

MyText(0, 80, 'На этом выполнение первой машинной команды ' +

'заканчивается, происходит');

MyText(0, 88, 'переход к следующей по порядку машинной команде. ' +

'Содержимое ячейки ОЗУ с');

MyText(0, 96, 'адресом, следующим за стартовым, пересылается в УУ ' +

'и все повторяется.');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_6}

{-------------------}

{+------------------+}

{ }

{ Процедуры анимации }

{ }

{+------------------+}

procedure Move_1;

begin

BLink(150, 285, 'kurs.exe');

end; {Move_1}

{-------------------}

procedure Move_2;

begin

SetColor(Green);

Animation(150, 285, -125, 2, ' █ █', True)

end; {Move_2}

{-------------------}

procedure Move_3;

begin

SetColor(GetBkColor);

SetColor(Green);

Animation(100, 168, -70, 1, ' 1 2 +', True)

end; {Move_3}

{-------------------}

procedure Move_4_1;

begin

SetColor(GetBkColor);

OutTextXY(30, 176, ' 1 2');

SetColor(Green);

Animation(47, 198, 63, 1, ' 1 2', False);

SetColor(GetBkColor);

OutTextXY(150, 168, ' █ █');

SetColor(Green);

OutTextXY(150, 168, ' a b')

end; {Move_4_1}

{-------------------}

procedure Move_4_2;

begin

SetColor(Green);

Animation(150, 160, -95, 2, ' a b', True)

end; {Move_4_2}

{-------------------}

procedure Move_4_3;

begin

setcolor(getbkcolor);

OutTextXY(30, 176, ' +');

SetColor(Green);

Animation(52, 160, -94, 2, '+', False)

end; {Move_4_3}

{-------------------}

procedure Move_4_4;


begin

SetColor(Green);

Animation(52, 66, 115, 1, '+', True);

OutTextXY(183, 73, '=c')

end; {Move_4_4}

{-------------------}

procedure Move_4_5;

begin

SetColor(GetBkColor);

SetColor(Green);

Animation(47, 198, 63, 1, '3', False);

end; {Move_4_1}

{-------------------}

procedure Move_4_6;

begin

SetColor(Green);

Animation(191, 66, 94, 2, 'c', True)

end; {Move_4_5}

{-------------------}

procedure Help; {Помощь}

const

XH: Integer = 70;

YH: Integer = 70;

begin

ClearDevice;

SetColor(BRDCol);

Rectangle(0, 0, GetMaxX, GetMaxY);

SetColor(LightCyan);

SetTextJustify(1, 0);

OutTextXY(GetMaxX div 2, YH + 10,'Помощь:');

SetTextJustify(0, 0);

OutTextXY(XH + 10, YH + 20,'Адрес :');

OutTextXY(XH + 10, YH + 30,'УУ :');

OutTextXY(XH + 10, YH + 40,'АЛУ :');

OutTextXY(XH + 10, YH + 50,'АЛУ+УУ :');

OutTextXY(XH + 10, YH + 60,'ВЗУ :');

OutTextXY(XH + 10, YH + 70,'ОЗУ :');

OutTextXY(XH + 10, YH + 80,'УВвода :');

OutTextXY(XH + 10, YH + 90,'УВывода:');

SetColor(Cyan);

OutTextXY(XH + 90, YH + 20,'номер ячейки памяти');

OutTextXY(XH + 90, YH + 30,'устройство управления');

OutTextXY(XH + 90, YH + 40,'арифметико-логическое устройство');

OutTextXY(XH + 90, YH + 50,'процессор');

OutTextXY(XH + 90, YH + 60,'внешнее запоминающее устройство (hdd, fdd и др.)');

OutTextXY(XH + 90, YH + 70,'оперативное запоминающее устройство');

OutTextXY(XH + 90, YH + 80,'устройство ввода');

OutTextXY(XH + 90, YH + 90,'устройство вывода');

_Pause

end; {Help}

{-------------------}

procedure MainWin;

begin

ClearDevice;

BildWin;

BildContext;

BildFuncKey

end; {MainWin}

{-------------------}


procedure Play;

{-------------}

procedure SelectPage(N: Byte);

begin

case N of

1: begin

FuncKeyWindow[2].Put(XS, YS);

Page_1;

Move_1

end;

2: begin

FuncKeyWindow[1].Put(XS, YS);

Page_2;

Move_2

end;

3: begin

FuncKeyWindow[1].Put(XS, YS);

Page_3;

Move_3

end;

4: begin

FuncKeyWindow[3].Put(XS, YS);

Page_4_1;

Move_4_1;

Delay(Time_3 * 20);

Page_4_2;

Delay(Time_3 * 20);

Move_4_2;

Delay(Time_3 * 20);

Page_4_3;

Delay(Time_3 * 20);

Move_4_3;

Move_4_4;

Page_4_4;

Delay(Time_3 * 20);

Page_4_5;

Delay(Time_3 * 20);

Move_4_5;

Delay(Time_3 * 20);

Page_4_6;

Delay(Time_3 * 20);

Move_4_6;

Delay(Time_3 * 20);

Page_4_7

end

end

end; {SelectPage}

{-------------}

const

Back = #75;

Next = #77;

F1 = #59;

Esc = #27;

var

ArrowsAndEsc: set of Char;

ExtentedKey: Boolean;

Flag: Boolean;

CH: Char;

N: Byte;

begin

ClearDevice;

MainWin;

N := 0;

ArrowsAndEsc := [Back, Next, F1, Esc];

repeat

ExtentedKey := False;

Flag := False;

CH := ReadKey;

if CH = Esc then

Flag := True;

if CH = #0 then

begin

CH := ReadKey;

ExtentedKey := True

end;

if ExtentedKey then

case CH of

Back: begin

Dec(N);

SelectPage(N);

if N < 1 then N := 1

end;

Next: begin

Inc(N);

SelectPage(N);

if N > 4 then N := 4

end;

F1: begin

Temp[1].Get(X0, Y0, X0 + 380, Y0 + 300);

Temp[2].Get(X0, Y0 + 305, GetMaxX - X0, YS - 5);

Help;

MainWin;

Temp[1].Put(X0, Y0);

Temp[2].Put(X0, Y0 + 305);

if N <= 1 then

FuncKeyWindow[2].Put(XS, YS);

if N = 4 then

FuncKeyWindow[3].Put(XS, YS)

end

end {Case}

until Flag;

ClearDevice

end; {Play}

{-------------------}

procedure TextT(Col: TColor; S: TText);