книги из ГПНТБ / Королев, Л. Н. Структуры ЭВМ и их математическое обеспечение учебное пособие
.pdfА р и ф м е т и ч е с к и е о п е р а т о р ы . |
В системе |
||
команд В-6500/7500 |
предусмотрены действия |
над |
|
операндами, которые |
могут представлять |
целые, |
числа |
с плавающей запятой одинарной точности, с плавающей запятой двойной точности. Процессор может выполнять сложение, вычитание, умножение, деление, целочисленное деление, деление с остатком, преобразование веществен ного (с плавающей запятой) числа в целое с округлением и отсечением, преобразование операнда двойной точно сти в операнд одинарной точности и наоборот, может выполнять полноразрядное умножение (умножение с уд военным количеством разрядов). Арифметические опера торы (команды) обрабатывают слова, находящиеся е вер хушке стека, т. е. в регистрах А, В, X, Y. При выполне нии двуместных операций результат помещается в вер хушку стека, а два исходных операнда исчезают из стека. В машинах В-6500/7500 принято следующее пред ставление данных. Вещественные числа одинарной точ ности представляются как числа с плавающей запятой и занимают одно машинное слово. Три старших разряда такого слова служат для задания тега, сопровождающе го каждое слово, в котором содержится информация, поз воляющая арифметическому устройству различать чис ла одинарной и двойной точности. Для задания порядка со знаком используется семь разрядов. Порядок принят октальный. Это позволяет представлять числа в диапазо не от (8+13—1)-8+63 до 8_и,т. е. порядок смещен в сторо ну больших по абсолютной величине чисел. Эта «несим метричность» вызвана тем, что запятая в мантиссе фиксирована не перед старшим ее разрядом, а после млад шего. При нулевом коде порядка тем самым разряды ман тиссы могут быть использованы для представления целых чисел. Такой способ представления чисел с плавающей запятой и целых упрощает алгоритмы преобразования переменных из одного типа в другой и не требует спе циальных средств для того, чтобы отличить один тип от другого. Вещественные числа удвоенной точности пред ставляются двумя словами. Первое слово по структуре такое же, как и слово для представления одинарного ве щественного. Второе слово содержит продолжение зна чащих цифр мантиссы (дробная часть мантиссы), а разря ды порядка второго слова используются как старшие разряды порядка, т. е. как «левое» продолжение поряд-
180
ка, указанного в первом слове. Диапазон представления чисел с удвоенной точностью, следовательно, такой: от
(813—1)-83267 до 8-32 ~‘ъ&.
Число значащих двоичных цифр, которое определяет точность, для одинарных вещественных чисел равно 39 знакам, для вещественных двойной точности равно 78 знакам, что эквивалентно 12 десятичным знакам в пер вом случае и 25 десятичным знакам во втором случае.
>На рис. 15 дано распределение разрядов в словах, пред ставляющих вещественные и целые числа.
504048*046 |
ПредставлениеВещественных |
3938 с одинарнойточностью |
РазряВыт
f |
1 |
Щ о
ега' Гее
| 010
*■Порядок
''Знакмантиссы или целого ПредставлениеВещественных
у 46неиспольз. с дВошюй точностью
Порядок |
Матисса |
i |
Второеслово |
ОТО |
Младшиеразрядыпорядка |
|
'СтаршиеразряВы порядка |
|
|
Рис. |
15. |
Арифметическое устройство процессора выполняет действия над операндами, помещенными в верхушку стека, т. е. над операндами, расположенными в регист рах А , В, X , Y. Поскольку в этих регистрах операнды помещаются вместе с тегами, определяющими их тип, арифметическое устройство выполняет действия, ука занные в команде, с учетом типа, указанного в теге. Если первый операнд двойной точности, то результат действий сложения, вычитания, умножения также полу чается с удвоенной точностью. Если первый операнд — целое, а второй представляет вещественное число, то ре зультат получается как вещественное число одинарной
кточности. Правила выполнения операций с разнотипными операндами четко оговорены, и все нарушения этих пра вил фиксируются прерыванием. Кроме обычных ариф метических операций сложения, вычитания, умножения и деления над числами двойной и одинарной точности, ариф метическое устройство В-6500/7500 выполняет такие операции, как целочисленное деление, деление с остат-
181
ком и набор операций преобразования величин из од ного типа в другой. В этот набор входят: преобразование к целому виду с отсечением разрядов и округлением, преобразование из двойной точности в одинарную, пре образование к двойной точности и т. д.
О п е р а т о р ы с р а в н е н и я . Набор операций сравнения, выполняемых процессором, соответствует пол ному списку операций отношений АЛГОЛа: больше, больше или равно, равно, меньше или равно, меньше, не равно, эквивалентно. Эти операции отношений выпол няются над двумя операндами, находящимися в верхуш ке стека. Результатом операции является булево зна чение, разряд, принимающий значение О или 1, который помещается в головку стека. Исходные операторы исче зают в стеке.
О п е р а ц и и н а д с т р о к а м и (String Opera tor). В системе команд В-6500/7500 предусмотрен широ кий набор команд обработки последовательностей сим волов или строк. Пожалуй, по составу команд обработки строк машины фирмы Барроуз превзошли все другие. Это и понятно: с самого начала фирма специализировалась на машинах коммерческого применения, а в задачах этой области огромная часть работы связана с обработкой символов, с редактированием входных и выходных доку ментов, с выдачей результатов в виде отчетов, где тексты занимают большую часть информации. Одной из основ ных особенностей языка КОБОЛ, применяемого для программирования планово-экономических и бухгалтер ских задач, является его приближенность к обычному языку и развитость операторов обработки текстов и за дания форм отчетных документов. Язык КОБОЛ яв ляется неотъемлемой частью математического обеспе чения машин этой фирмы. Несомненно, этот язык оказал прямое влияние на систему команд, на развитие набора операций обработки текстовой информации. В этом на боре предусмотрено пять типов операций перемещения строковой информации по памяти, 16 типов операций поиска в строке нужной комбинации символов, 12 ти пов операций сравнения, предусмотрены команды транс ляции, распаковки и упаковки двоично-кодированных десятичных чисел, аппаратно выполняемые операции пе ревода из десятичной системы в двоичную и обратно. Кроме того, в этот набор входят пять типов операций ре
182
датирования и поиска по таблицам и 12 типов так на зываемых микрооператоров, связанных с преобразова нием текстовой информации, облегчающих обработку информации, предназначенной для ввода-вьтода. Для того чтобы выполнить микрооператор, в стеке размещает ся в строго определенном порядке последовательность параметров, указывающая адреса исходных и результи рующих строк, длину последовательности, характер об работки. Эта информация, расположенная в аппаратных регистрах стека, собственно, и играет роль микрокоманд, используемых центральным процессором для выполне
ния |
этих сложных операций. |
П р и в и л е г и р о в а н н ы е к о м а н д ы . На |
|
бор |
привилегированных команд, использование которых |
разрешается только в супервизорном режиме, включает команды, которые управляют режимом работы машины, осуществляют обращение к устройствам ввода-вывода, позволяют менять теги в словах, воздействовать на счет чик времени, проверять состояние внешних устройств, воздействовать на аппаратные регистры машины и т. д. Этих команд насчитывается около тридцати. В списке основных команд центрального процессора насчитывает ся 190 различных операций. Если учесть, что характер выполнения многих операций зависит от типа операндов и от параметров микроопераций, то число различных действий, которые может выполнять аппаратура цент рального процессора, намного превосходит этот список. Например, одна операция сложения служит для выполне ния и операций с целыми числами, и операций с плаваю щей запятой, и операций с удвоенной точностью. В этом выражается тенденция усложнения функций аппарату ры, переноса на ее плечи многих стандартных действий, которые выполнялись на старых машинах с помощью подпрограмм. Эта тенденция характерна для современ ного направления развития системы команд ЭВМ.
§ 2. Общая схема организации программ
Программа, записанная на машинном языке, пред ставляется состоящей из нескольких частей, занимающих отдельные объемы оперативной памяти.
Вычислительная часть (собственно программа) со держит последовательность командных силлабул и
183
констант. Эта часть не изменяется в процессе вычи слений.
В В-6500/7500, как и в других современных маши нах, выполняется требование, обеспечивающее возмож ность «коллективного» использования одной и той же последовательности команд. Это свойство, как уже гово рилось, называется свойством повторной входимости (реентерабельности). Программа может состоять из нескольких подпрограмм, процедур, и для каждой из них может быть выделен собственный участок памяти, кото рый называется командным сегментом или сегментом ке дов программы (Object Program Code Segment). Под массивы данных и переменные выделяются в памяти обла сти данных, массивы, которые также могут располагать ся на любом месте памяти и через дескрипторы связы ваются с программой. Наконец, для каждой программы выделяется массив памяти для ее стека (магазина). Пе речисленные выше участки памяти могут быть разбро саны произвольным образом. Распределением памяти ве дает главная управляющая программа (Master Control Program — МСР) — главная часть операционной си стемы В-6500/7500.
Итак, с каждой работой, вычислительным процессом, связаны следующие области памяти.
1.Программные сегменты, содержащие последова тельности команд, строки силлабул.
2.Словарь программных сегментов, относящихся к данной задаче, содержащий дескрипторы программных сегментов. В словаре содержатся указания на располо жение программных сегментов в оперативной памяти или на дисках.
3.Область памяти, выделенная для стека, связанного
сданной программой.
Главная управляющая программа, выделяя область памяти под стек, формирует базу стека — адрес его на чала и нижнюю границу. Эти два значения при работе сданным стеком помещаются в два регистра центрального процессора: в регистр базы стека и регистр границы стека. В динамике выполнения программы аппаратно контролируется заполнение стека, а выход за границы стека вызывает прерывание программы.
Машины В-6500/В-7500, впрочем, как и все современ ные машины, в которых реакция на прерывания и дина
184
мическое распределение памяти возлагаются на опера ционную систему, не могут вести обработку, счет без участия операционной системы. Поэтому среди обя зательно присутствующих областей памяти находят ся массивы и программные сегменты, связанные с резидентной частью главной управляющей програм мы (МСР).
Всякое прерывание программы, связанное с запро сом к операционной системе или возникшее в результате появления внешних событий, интерпретируется в маши нах Барроуз как обращение к некой подпрограмме, чаще всего работающей от имени прерванной программы. Соот ветственно в оперативной памяти всегда присутствует стек управляющей программы и словарь ее программных сегментов. Очень важной функцией механизма стека яв ляется хранение истории переходов от выполнения одних процедур к другим, точнее, хранение истории вложенно сти одних процедур или блоков в другие. Блочная струк тура АЛГОЛА предполагает, что внутренний блок может пользоваться переменными, описанными во внешних блоках, и может передавать управление на метку, локали зованную во внешнем блоке, причем эти переменные и метки могут находиться в блоках, отстоящих по уровню вложенности на несколько ступеней. В транслирующих системах традиционных машин функции управления доступом к данным и меткам блоков внешних уров ней возлагаются на административные системы. В
машинах В-6500/7500 эти функции |
административ |
|
ных систем переложены, главным |
образом, на аппара |
|
туру. |
следующей структу |
|
Рассмотрим пример программы |
||
ры. Внешний охватывающий блок (ОБ) |
содержит обра |
щения к процедурам А и В. В свою очередь, процедуры А и В содержат обращения к одной и той же процедуре С, которая тем самым оказывается вложенной в эти две процедуры. Процедура С в этом примере обязана об ладать свойством повторной входимости, так как она обслуживает две различные и, вообще говоря, независи мые процедуры А и В. Предположим, что процедура С обрабатывает переменные, определенные в охватыва ющем блоке. На рис. 16 графически представлена такая структура. Пунктиром обозначены связи по опе рандам.
185
Тогда для охватывающего блока, с которого начинает ся выполнение всей программы, главная управляющая программа МСР выделяет программный сегмент и массив стека. Строится таблица (словарь) описателей программ ных сегментов. В этом словаре содержатся четыре слова: описатель программного сегмента процедуры С, проце дуры В, процедуры А и охватывающего блока ОБ. Бу дем считать, что в словаре дескрипторы для А, В и С содержат указание на отсутствие этих программных сег ментов в памяти и содержат, следовательно, адрес рас положения их на внешних носителях (на дисках).
Перед тем как начать выполнение программы, т. е. войти в охватывающий блок, в стек помещается управ ляющее слово стека. Несколько упрощая действительную схему, будем для простоты считать, что MSCW охваты вающего блока в поле смеще ния не содержит никакой ин формации, в поле уровня вло женности содержит номер 2.
Считается, что нулевой и пер вый уровень принадлежат программам (процедурам) опе рационной системы, от имени которых производится обра щение к самому внешнему блоку рабочей программы. В регистр F центрального про цессора машины помещается адрес MSCW по стеку, в ре гистр базы стека помещает ся начало стека, в регистр
границы стека — нижняя граница стека, в регистр S, указывающий текущее состояние стека, помещается адрес последнего занятого слова в стеке. Кроме того, в стек помещается некоторая другая информация, значение ко торой для рассматриваемого примера не представляет особого интереса. С этого момента внешний блок может реально выполняться. Во время его выполнения в соот ветствии с командами стек заполняется результатами промежуточных вычислений и счетчик S автоматически следит за заполнением стека и указывает последнее за нятое слово. В какой-то момент должно быть произведе
те
но обращение к процедуре А. Перед тем как реально на чать выполнение команд процедуры А, в стек «наталки вается» перечисленная ниже информация. По команде формируется новое управляющее слово стека MSCW по следующим правилам. В 14-разрядном поле этого управ ляющего слова помещается адрес регистра F, т. е. поме щается ссылка на предыдущее MSCW охватывающего блока. В поле смещения запоминается текущее смещение счетчика S, тем самым запоминается состояние магазина охватывающей процедуры к моменту перехода к вло женной процедуре. Далее в стек упрятывается ссылка на описатель, хранящий информацию о статусе внешней
процедуры и адрес силлабулы, на которую надо возвра титься после выполнения вложенной процедуры. В дан ном примере в управляющем слове программы хранится адрес начальной силлабулы охватывающей процедуры, номер ее уровня вложенности, состояние арифмети ческого устройства после выполнения последней ариф метической команды, режим ее выполнения. Далее в стек, если это необходимо, помещаются параметры, пе редаваемые от охватывающей процедуры процедуре А, и, наконец, осуществляется переход на выполнение ко манд процедуры А. На рис. 17 показано состояние реги стра центрального процессора и стека до перехода к вы полняемой процедуре А и после перехода. Прерывистой линией на рис. 17 обозначена ссылка от вновь образован ного в стеке MSCW к предыдущему. Адрес команды
187
программы формируется из дескриптора, который из влекается из словаря программных сегментов. Мы пред положили, что этот сегмент отсутствует в оперативной памяти, т. е. в его дескрипторе стоит признак «отсутст вия». При обращении к дескриптору с таким признаком происходит прерывание, по которому управляющая про грамма организует вызов нужного сегмента в оперативную память с дисков и окончательно формирует дескриптор программного сегмента, преобразуя его соответственным образом в словаре программных сегментов. Таким обра зом достигается динамизм вызова процедур в ходе выпол нения программы.
При формировании управляющего слова стека ве личина уровня вложенности возрастает на единицу. На самом деле номер уровня вложенности аппара турой машины интерпретируется как адрес одного из 32 быстрых регистров центрального процессора, назы ваемых регистрами-дисплеями или D-регистрами. Каждый такой регистр хранит адрес MSCW процедуры соответст вующего уровня. Это позволяет процедуре любого уровня вложенности обратиться к локальным данным процедур любого более высокого уровня. Причем это можно сде лать достаточно быстро, не раскручивая всю цепочку MSCW, хранящихся в стеке. Для этого достаточно указать номер регистра-дисплея и, задав относитель ный адрес нужной переменной, получить необходимый операнд, находящийся в соответствующей области стека.
Итак, мы проследили, как произошло обращение из охватывающего блока к процедуре А и что при этом произошло со стеком и регистрами F и S центрального процессора. В какой-то момент процедура А обратится к программному сегменту С. Это делается точно по той же схеме, как было рассказано выше, но при этом будет использован новый D-регистр, обеспечивая возможность в свою очередь процедуре С обращаться к более «глубо ким» процедурам. Если процедура С нуждается во внеш них данных, генерированных процедурой А, то она ими может воспользоваться, например, с помощью указания младшего по номеру D-регистра. Если ей нужны пере менные охватывающей процедуры, она также может ими воспользоваться через косвенную ссылку по D-регистру. Окончив свое выполнение, процедура С выйдет на коман-
188
ду возврата, и процедура А продолжит свое выполнение. Вся необходимая для возврата информация находится в стеке, а адрес, опираясь на который можно осуществить этот возврат, находится в регистре F. В самом деле, в сле дующем слове за MSCW, на которое указывает F, рас положено управляющее слово внешней процедуры, а в самом MSCW находится ссылка на MSCW, указывающая состояние стека внешней процедуры. Этот возврат де лается аппаратно, и управляющие регистры центрально го процессора приводятся в то состояние, которое они имели к моменту ухода на вложенную подпрограмму (процедуру, блок). В свою очередь, закончив свое вы полнение, процедура А осуществляет возврат в самый внешний блок. Таким же путем производится обращение к процедуре В и от В и С. Вот здесь следут заметить, что теперь процедура С будет использовать в качестве внеш них переменные величины, накопленные в стеке проце дурой В, а не процедурой А, как в предыдущем случае. При этом менять команды процедуры С нет никакой на добности, она воспользуется именно теми значениями, ко торые необходимы. Как можно заметить, аппарат обра щения к переменным внешней процедуры построен по рекурсивному принципу, и, если к процедуре С произо шло обращение от процедур очень глубоких уровней вло женности, путаницы не произойдет, обращение будет произведено к переменным охватывающей процедуры. В частности, этот механизм обеспечивает обращение процедуры к самой себе, т. е. обеспечивает рекурсивные обращения. Если использовать только возможности ап паратуры для организации вложений, то глубина не должна превышать 32 (для рабочих программ — 30). Практически это не является ограничением. Опыт про граммирования задач на АЛГОЛе говорит о том, что глубина вложений обычно равна 2—3, в достаточно ред ких случаях достигает 7—8. Разумеется, легко можно выдумать задачу, где глубина вложений может быть очень велика.
Общая картина организации программ, на которую рассчитана аппаратура, может быть сведена к следующей многоуровневой схеме. Процедуры главной управляю щей программы всегда занимают нулевой и первый уро вень вложенности. Для этих целей используются D-ре гистры D0 и D1. Рабочие программы задач, идущих в
189