<<
>>

4.3.12. Организация ветвлений на машинном уровне

Чтобы понять особенности организации ветвлений на машинном уровне, рас- смотрим простейший пример определения наименьшего числа из двух заданных. Обозначим исходные числа именами R1 и R2, а результат назовем RЗ.
Тогда на языке Паскаль это действие можно изобразить с помощью условного оператора if R1 < R2 then RЗ := R1 else RЗ := R2. Этот же алгоритм можно изо- бразить и в виде блок-схемы, приведенной на рис. 4.38, а. Ее особенностью явля- ется плоский, двухмерный характер. Блоки, описывающие различные ветви ал- горитма, идут не последовательно, они параллельны друг другу. Но оперативная память компьютера имеет линейный, одномерный характер. Линейностью обла- дает также стандартный порядок выполнения команд программы. Следователь- но, нужно найти способ отображения двухмерной структуры ветвления на одно- мерные структуры программы и памяти.

Рис.

4.38. Трансформации блок-схемы ветвления к машинному уровню реализации

Чтобы отобразить плоскую структуру блок-схемы на линейную структуру опе- ративной памяти, деформируем схему, оставляя неизменными отображаемые ею действия и связи. На рис. 4.38, бив показаны основные этапы такой дефdрма- ции. На первом этапе блоки разносятся по вертикали, что не влияет на описы- ваемые действия. Затем блоки ветвей при сохранении имеющихся между ними связей как бы сдавливаются с боков и выстраиваются в линию. Итоговый вид схемы изображен на рис. 4.38, в.

Сравнивая получившиеся варианты блок-схем, приходим к выводу, что по смыс- лу выполняемых действий они эквивалентны друг другу. Но последний вариант блок-схемы, как показано далее, позволяет с помощью команд условного и без- условного перехода отобразить плоскую структуру схемы на линейную опера- тивную память.

Для программной реализации полученного алгоритма с помощью директив dw в сегменте данных выделим двухбайтовые рабочие поля для хранения значений переменных Rl, R2 и RЗ. Блок-схема предписывает следующий порядок действий, реализующих ветвление. Вначале нужно сравнить значения величин Rl и R2 в отношении «меньше». Поскольку оба операнда находятся в полях памяти, не- обходимо один из них переслать в регистр процессора. Перешлем, например, значение из поля Rl в регистр ах. Теперь для сравнения величин Rl и R2 можно использовать команду сmр ах, R2, которая, как известно, не изменяет значения операндов, а только формирует соответствующие результату сравнения значе- ния флажков. Если окажется, что Rl - R2 < 0, то есть Rl < R2, то флажок sf β 1. В этом случае нужно организовать переход к ветви, в которой RЗ : = Rl. На значение флажка sf - 1 реагирует команда j 1 (предполагается, что знаково- го переполнения не происходит и of = 0), а действия, которые в этом случае нужно выполнить, обозначены меткой vr2. Следовательно, команда, которая ор- ганизует требуемый в ветвлении переход, имеет вид j 1 vr2.

Если окажется, что Rl - R2 > 0, то есть определенное в команде перехода условие не выполнено, то, согласно схеме выполнения команды jl, управление перехо- дит к следующей по порядку команде программы. В соответствии с блок-схемой в этом случае нужно выполнить действие RЗ : = R2. И вновь для промежуточного хранения требуется выбрать регистр процессора. Пусть это будет регистр bх. Пе- решлем в него нужное значение командой mоv bх, RЗ. Таким образом, соответ- ствующая не выполненному условию ветвь реализована. Теперь необходимо по- пасть в общую точку программы, которая обозначена меткой сопt. Поскольку переход нужно выполнять в любом случае, его следует реализовать с помощью команды безусловного перехода jmр сопt.

Теперь займемся второй ветвью программы, которая должна иметь метку vr2 и выполнять действие RЗ : = Rl. Это действие может быть реализовано коман- дой пересылки либо из поля Rl, либо из регистра ах.

Целесообразно осуще- ствить пересылку в тот же самый регистр, в который попал результат в уже реа- лизованной ветви. Таким образом, приходим к команде вида vr2 mоv bх, Rl. Отметим, что эта команда должна располагаться в программе, а следовательно, и в оперативной памяти непосредственно за командой безусловного перехода.

Согласно блок-схеме, организация ветвления завершается действиями, общими для обеих ветвей, причем они должны начинаться командой с меткой сопt. В дан- ном случае общее действие состоит в пересылке результата из регистра bх в под- готовленное для него поле RЗ.

Фрагменты полученной в результате проведенных рассуждений программы изо- бражены на рис. 4.39, слева. Следует понимать, что показывающие выполняемые переходы стрелки в реальных программах отсутствуют. На рисунке они приведе- ны, чтобы проследить за общими элементами в структуре программы и изобра- женной справа ее блок-схемой.

Рис. 4.39. Фрагмент программной реализации ветвления

В заключение обсуждения этого примера отметим важную роль, которую играет в организации ветвления команда безусловной передачи управления jmр сопt.

Она как бы отделяет одну ветвь программы от другой. Предположим, что про- граммист пропустил эту команду. В результате допущенной ошибки после выпол- нения команды mоv bх, R2 сразу же начнется выполнение команды mоv bх, Rl, которая изменит сформированное предыдущей командой значение в регистре bх. Поэтому результатом выполнения ошибочной программы в любом случае ока- жется число из поля Rl.

Теперь сделаем общий вывод по реализации ветвления на машинном уровне. Вначале нужно организовать вычисление значения выражения, от которого за- висит деление алгоритма на ветви. В рассмотренном примере таким выражением является Rl - R2. В это время формируются значения флажков процессора, ориентируясь на которые, выбирается наиболее подходящая команда условного перехода. В этой команде указывается метка ветви, соответствующей выполнен- ному условию ветвления. Непосредственно за командой условного перехода ор- ганизуются действия ветви, соответствующей не выполненному условию ветвле- ний. Завершается эта ветвь командой безусловного перехода на общий участок программы. За командой безусловного перехода организуются действия ветви, соответствующей выполненному условию ветвления. Начинаются эти действия командой с меткой, указанной в команде условного перехода. Сразу после оконча- ния второй ветви следует разместить действия, общие для обеих ветвей. Они долж- ны начинаться командой с меткой, указанной в команде безусловного перехода.

4.3.13.

<< | >>
Источник: Степанов А. Н.. Архитектура вычислительных систем и компьютерных сетей. 2007

Еще по теме 4.3.12. Организация ветвлений на машинном уровне:

  1. 1.3.2. Функции социологии социальной сферы и уровни организации изучения социальных процессов
  2. Сознание распространяет себя от высших уровней Божественности до низшего уровня первого измерения камня и минералов. Всё Бог в разном выражении.
  3. Истинное желание—это когда желания одного уровня гармонируют с желаниями другого уровня.
  4. СИСТЕМА «ЧЕЛОВЕК - МАШИНА»: НАДЕЖНОСТЬ
  5. А.П. Пятибратов, Л.П. Гудыно, А.А. Кириченко. Вычислительные машины, сети и телекоммуникационные системы, 2009
  6. Как обзавестись новой машиной
  7. Огонь и машина физического бессмертия
  8. Статья 415. Нарушение правил вождения или эксплуатации машин
  9. Запомните: вы водитель автомобиля; вам не нужно вставать из-за руля и толкать свою машину.
  10. Чтобы ехать на машине, вам не надо бросать руль и толкать ее.
  11. Раздел 16 - Уголовного Кодекса Украины Преступления в сфере использования электронно-вычислительных машин (компьютеров), систем и компьютерных сетей и сетей электросвязи
  12. ПРОЕКТНЫЙ И ИСПОЛНИТЕЛЬНЫЙ УРОВНИ ПРОГРАММ