Russian Language English Language

3 Модели и методы для обоснования выбора состава аппаратных средств ВС

3.1 Когерентность памяти многопроцессорных вычислительных систем

3.2 Особенности построения имитационной модели многопроцессорной вычислительной системы с общей многомодульной памятью

3.3 Циклическое выполнение команд в вычислительной машине с внутренним языком высокого уровня

3.4 Применение синтезаторов частоты в приборах и аппаратно-программных комплексах для электропунктурной диагностики и терапии


Экспресс информация

Редколлегия журнала

Подписка на новости

Гостевая книга

Предоставление материалов

Письмо в редакцию

На начало


2004, Номер2 ( 5)



Place for sale
ЦИКЛИЧЕСКОЕ ВЫПОЛНЕНИЕ КОМАНД В ПРОЦЕССОРЕ С ВНУТРЕННИМ ЯЗЫКОМ ВЫСОКОГО УРОВНЯ

ЦИКЛИЧЕСКОЕ ВЫПОЛНЕНИЕ КОМАНД 
В ВЫЧИСЛИТЕЛЬНОЙ МАШИНЕ С ВНУТРЕННИМ ЯЗЫКОМ ВЫСОКОГО УРОВНЯ

С.А. Чернов

(Москва, Московский Энергетический Институт (ТУ), Россия)

 

Архитектура базовой вычислительной машины (БВМ) с внутренним языком высокого уровня разрабатываемая на кафедре ВМСиС МЭИ(ТУ) к настоящему времени доведена до уровня программной модели. Основой работы является предложенная Фальком В.Н. теоретическая модель языка программирования высокого уровня [1] Архитектура БВМ представляет собой один из вариантов реализации абстрактной Falgol-машины [1], имеющей стековую организацию и выполняющей анализ и направленное преобразование программы во время вычислений.

Программная модель описывает логику работы БВМ [2], содержит средства отображения и модификации состояния запоминающих устройств, а также компилятор с высокоуровневого ассемблера БВМ в систему команд БВМ. Имеющийся набор средств позволяет программировать алгоритмы решения различных задач и анализировать процесс их выполнения, например, с целью определения требуемой ёмкости запоминающих устройств или частоты встречаемости в программах отдельных команд и программных конструкций. В результате сокращается время оценки архитектурных решений и обеспечивается развитие БВМ в направлении создания аппаратно реализованной ЭВМ с внутренним языком высокого уровня.

 

Несмотря на то, что разработанный базовый машинный язык (БМЯ) – внутренний язык БВМ, является языком высокого уровня, набор примитивов и программных конструкций, предоставляемых языком программисту, достаточно своеобразен и отличается от соответствующих средств общепринятых языков высокого уровня таких, как, например, Pascal или C. Переход к программированию на БМЯ может быть облегчён за счёт использования БМЯ-макроопределений основных конструкций этих ЯВУ. Ниже рассматриваются возможные варианты БМЯ-макроопределений циклических конструкций while и for языка Pascal.

Оператор while языка Pascal позволяет организовать циклическое выполнение простого или составного оператора при заданном условии. Формат оператора while:

while A do B,

где A – условие продолжения цикла, выражение логического типа; B – итерируемый оператор. Макроопределение на БМЯ, реализующее семантику этого оператора может выглядеть следующим образом.

WHILE(A,B) = [A,B: <f:(val_B, ex, val_f, ex) val_A, ex, tex > ex ]

 

Параметры A, B – константные процедуры, указаны в порядке размещения в абстрактном левом стеке – ALS [2]. Процедура A должна в результате распроцедуривания оставлять на верхнем уровне ALS команду true или false. Если распроцедуривание A дало true, то распроцедуривается P, что приводит к распроцедуриванию B с последующим распроцедуриванием  f, т.е. к новой итерации, иначе выполнение макроса завершается. Заметим, что размещение команды ex последней командой процедуры P позволяет не сохранять адрес возврата при распроцедуривании  f. В результате, количество итераций не ограничено, несмотря на то, что они реализуются через рекурсию. Реализация цикла через рекурсию в языке Pascal при значительном числе итераций привела бы к переполнению стека.

Пример 1. Запишем на базовом машинном языке Pascal-программу, вычисляющую сумму целых чисел от 1 до 9.

1.

var i,s:integer;

2.

i:=1;s:=0;

3.

while i<=9 do

4.

begin

5.

  s:=s+i;

6.

  i:=i+1;

7.

end;

Получим:

1.

{while:

2.

  //макроопределение цикла while

3.

  ([A,B:<f:(val_B,ex,val_f,ex)val_A,ex,tex> ex])ass_while

4.

 

5.

  //вычисление суммы чисел от 1 до 9

6.

  {i=1,s=0:

7.

    (val_s,val_i,add,ass_s,     //s:=s+i;

8.

       val_i,inc,ass_i)          //i:=i+1;

9.

     (val_i,9,le)val_while,ex,   //i<=9

10.

  }

11.

}

Результат работы программысумма, накопленная в переменной s.

Оператор for осуществляет циклическое выполнение участка программы с изменением параметра цикла и завершением итераций при достижении им определенного значения. Формат оператора for:

for v:=A to B do C,

где v – параметр цикла, переменная порядкового типа, A, B – начальное и конечное значения, выражения того же типа, что и v, С – произвольный оператор языка Pascal. БМЯ-макроопределение, реализующее семантику этого оператора может выглядеть следующим образом.

FOR(v,A,B,C)=  [C,B,A,v: val_A, val_v, assign
<f:(val_C, ex, val_v, value, inc, val_v, assign, val_f, ex) val_v, value, val_B, le, tex > ex],

где v – указатель переменной блока var, переменная, как и в Pascal'е, является внешней по отношению к макросу FOR. Параметры: A, B – начальное и конечное значения целого или бинарного типа; C – тело цикла, константная процедура.

Пример 2. Запишем на базовом языке Pascal-программу, вычисляющую факториал 5:

1.

var i,p:integer;

2.

begin

3.

  p:=1;

4.

  for i:=2 to 5 do

5.

  begin

6.

     p:=p*i;

7.

  end

8.

end

Код на БМЯ будет иметь следующий вид:

1.

{cycle_for:

2.

  //макроопределение цикла for

3.

  ([C,B,A,v:val_A,val_v,assign,

4.

     <f:(val_C,ex,val_v,value,inc,val_v,assign,val_f,ex)

5.

       val_v,value,val_B,le,tex>ex

6.

  ])ass_cycle_for,

7.

 

8.

  //вычисление факториала 5

9.

  {i,p=1:

10.

     var_i,2,5(val_p,val_i,mul,ass_p)val_cycle_for,ex

11.

  }

12.

}

Результат работы программы – значение факториала, находящееся в переменной p.

Существенным недостатком реализации циклов описанным способом является неконстантность рекурсивной процедуры (РП) f  и, как следствие, необходимость её просмотра и вынесения в память подпрограмм (SbrM) при каждом распроцедуривании значений переменных while и cycle_for. В результате, в памяти БВМ образуется значительный объём мусора. Константность РП можно обеспечить посредством:

1)  записи параметров макросов A, B, C в переменные блока, внешние по отношению к РП и всей процедуре макроопределения (см. [2]), но при этом невозможна вложенность циклов;

2)  временного размещения параметров РП в ALS.

Во втором случае, макроопределения для циклов for и while примут следующий вид:

FOR1(v,B,C) = <f:[C,B,v: val_v, val_B, val_C
([C,B,v: val_C, ex, val_v, val_B, val_C,
val_v, value, inc, val_v, assign], val_f, ex) (del, del, del) val_v, value, val_B, le] ex, ex>

WHILE1(A,B) =   <f:[A,B: val_B, val_A
([A
,B: val_B, ex, val_B, val_A] val_f, ex) (del, del)
val_A] ex, ex, ex>

Начальное значение A должно присваиваться переменной, заданной параметром v, перед вызовом FOR1. Приведённые макроопределения WHILE1 и FOR1 являются константными процедурами. Объём генерируемого ими мусора не зависит от числа обращений к ним. В остальном, эти макроопределения аналогичны рассмотренным ранее.

В систему команд БВМ могут быть добавлены машинные команды, реализующие данные макроопределения. Обработка этих команд может осуществляться:

1)  подстановкой и последовательным выполнением команд составляющих макроопределение;

2)  специализированными аппаратными средствами БВМ, при условии эквивалентности [2] алгоритмов интерпретации этих команд в БВМ алгоритмам интерпретации их макроопределений в АМ.

Второй вариант, с точки зрения эффективности БВМ – предпочти­тельнее.

 

ЛИТЕРАТУРА

 

1. Фальк В.Н. Теоретическая модель языка программирования высокого уровня // Программирование, №4, 1987. - С. 3-12

2. Чернов С.А. Исследование и реализация базовой вычислительной машины с внутренним языком высокого уровня. 05.13.15 – Вычислительные машины и системы. Дис. на соискание уч. степени канд. техн. наук / МЭИ. – М., 2003.