Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Аппаратное обеспечение -> Баула В.Г. -> "Введение в архитектуру ЭВМ и системы программирования" -> 9

Введение в архитектуру ЭВМ и системы программирования - Баула В.Г.

Баула В.Г. Введение в архитектуру ЭВМ и системы программирования — Москва, 2003. — 144 c.
Скачать (прямая ссылка): vvedenievarhetekturuevm2003.pdf
Предыдущая << 1 .. 3 4 5 6 7 8 < 9 > 10 11 12 13 14 15 .. 86 >> Следующая


№ Команда Комментарий
001 ВВЦ 100 001 000 Read(n)
2 ВЧВ 101 101 101 y = 0.0
3 ПЕР 102 000 013 i = 1
4 ВЧЦ 000 102 100 i = i-n; формирование w
5 УСЛ 006 006 011 If i>n then goto 011
6 ВЕЩ 000 000 102 <000> := Real(i)
7 ДЕВ 000 014 000 <000> := 1.0/<000>
8 СЛВ 101 101 000 y := y+<000>
9 СЛЦ 102 102 013 i := i+1
010 БЕЗ 000 004 000 Следующая итерация цикла
1 ВЫВ 101 001 000 Write (y)
2 СТОП 000 000 000 Стоп
3 00 000 000 001 Целая константа 1
4 <1. 0> Вещественная константа 1.0

Рис 3.3. Текст программы третьего примера.

3.2.4. Пример 4. Работа с массивами.

Пусть требуется написать программу для ввода массива x из 100 вещественных чисел и вычисления суммы всех элементов этого массива:

100

S = Z x[i]

i=1

Будем предполагать, что длина программы не превышает 200 ячеек, и поместим массив x, начиная с 200-ой ячейки памяти. Вещественную переменную S с начальным значением 0.0 и целую переменную i с начальным значением 10 0 разместим в конце текста программы. На рис. 3.4 приведён текст этой программы.

№ Команда Комментарий
001 ВВВ 200 100 000 Read(x); массив x в ячейках 200+299
2 СЛВ 008 200 008 S := S+x[1] 15

3 СЛЦ 002 002 011 Модификация команды в ячейке 2
4 ВЧЦ 010 010 009 n := n-1
5 УСЛ 006 006 0 02 Следующая итерация цикла
6 ВЫВ 008 001 000 Write (S)
7 СТОП 000 000 000 Стоп
8 <0. 0> Переменная S = 0.0
9 00 000 000 001 Целая константа 1
010 00 000 000 100 Переменная n с начальным значением 100
1 00 000 001 000 Константа переадресации

Рис 3.4. Текст программы четвёртого примера.

Рассматриваемая программа выделяется своим новым приёмом программирования и может быть названа самомодифицирующейся программой. Обратим внимание на третью строку программы. Содержащаяся в ней команда изменяет исходный код программы (команду в ячейке 2) для организации цикла перебора элементов массива. Модифицируемая команда рассматривается как целое число, которое складывается со специально подобранное константой переадресации. Согласно одному из принципов фон Неймана, числа и команды в учебной машине неотличимы друг от друга, а, значит, изменяя числовое представление команды, мы можем изменять и её суть.

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

3.3. Формальное описание учебной машины

При описании архитектуры учебной ЭВМ на естественном языке многие вопросы остались нераскрытыми. Что, например, будет после выполнения команды из ячейки с адресом 511? Какое значение после нажатия кнопки ПУСК имеют ячейки, расположенные вне введённой программы? Как представляются целые и вещественные числа? Для ответа на почти все такие вопросы мы приведём формальное описание нашей учебной машины. В качестве метаязыка мы будем использовать Турбо-Паскаль, на котором Вы работаете. Другими словами, мы напишем программу, выполнение которой моделирует работу нашей учебной машины, т.е. наша машина, по определению, работает "почти так же", как и написанная нами программа на Паскале.

Ниже приведена реализация учебной машины на языке Турбо-Паскаль:

program УМ 3(input, output); const

N = 511; tYpe

Address = 0..N;

Tag = (kom, int, fl); {В машинном слове может хранится команда, целое

или вещественное число}

Komanda = packed record

KOP: 0..31;

A1, A2, A3: Address;

end;

Slovo = packed record case Tag of

kom: (k: Komanda); int: (i: LongInt) fl: (f: Single);

end

Memory = array[0..N] of Slovo; var 16

Mem: Memory;

S, R1, R2: Slovo; {Регистры АЛУ} RK: Komanda; {Регистр команд} RA: Address; {Счётчик адреса} Om: 0..2; {Регистр w}

Err: Boolean; begin

Input Program; {Эта процедура должна вводить текст программы с устройства

ввода в память по кнопке ПУСК} Om := 0; Err := False; RA := 1; {Начальная установка регистров} with RK do

repeat { Основной цикл выполнения команд} RK := Mem[RA].k; RA := (RA+1) mod (N+1); case KOP of {Анализ кода операции} 00: { ПЕР }

begin R1 := Mem[A3]; Mem[A1] := R1 end; 01: { СЛВ }

begin

R1 := Mem[A2]; R2 := Mem[A3]; S.f := R1.f + R2.f;

if S.f = 0.0 then OM := 0 else

if S.f < 0.0 then OM := 1 else OM := 2;

Mem[A1] := S; { Err := ? } end; 09: { БЕЗ } RA := A2; 24: { МОД }

begin

R1 := Mem[A2]; R2 := Mem[A3]; if R2.i = 0 then Err := True else begin S.i := R1.i mod R2.i; Mem[A1] := S; if S.i = 0 then OM := 0 else if S.i < 0 then OM := 1 else OM := 2;

end end;

13: { СТОП } ;

{ Реализация остальных кодов операций }

else

Err := True; end; { case } until Err or (KOP = 31)

end.

Для хранения машинных слов мы описали тип Slovo, который является записью с вариантами языка Турбо-Паскаль. В такой записи на одном и том же месте памяти могут располагаться команды, длинные (32-битные) целые числа или же 32-битные вещественные числа типа Single. 1
Предыдущая << 1 .. 3 4 5 6 7 8 < 9 > 10 11 12 13 14 15 .. 86 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.