Квант

2

двоичных разрядов, то есть в ней может помещаться набор из нулей и единиц, так называемое машинное слово.

Арифметическое устройство машин может выполнять определенный набор элементов операций. Алгоритм решения любой задачи нужно записать в виде последовательности таких элементов операций, которые и называют программим. Программа состоит из отдельных команд, каждой из которых содержит сведения об одной элементарной операции.

Команда (изображаемая машинным словом) делится на две части: операционную и адресную. Операционная часть команды содержит сведения о характере выполняемой операции (сложить, умножить и т. д.): элементарные операции машин们 перенumerироваются и в разрядах ячейки памяты машин们, отведенных для операционной части, записывается номер требуемой операции. Этот номер называют кодом операции (мы будем говорить просто код).

Адресная часть команды содержит адреся ячейек, содержимое которых участвует в операции. Число адресов в команде у различных машин может быть различным. Мы ограничимся рассмотренем трехадресов машин, в адресной части которых указаны адрес трех ячейки памяты: первый, второй и третьий адреса команды. Для арифметической операции (например, сложения) в первом и втором адресах записываются номера ячейек, содержащих исходные числа (слагаемые). Третья же адрес указает номер ячейки, куда следует записать результат (то есть сумму). Для других элементов операций используется адресованное адресов может быть иным (в частиности, один, два или даже все три адреса могут оказаться неужными для какой-либо команды, тогда соответствующие адресные ячейки заполют просто нулями).

Пусть, например, система команда (набор элементов операций) машин содержит 64=2664=2^6 элементарных операций.

ных операций. Тогда для их нумерации достаточно шести двойных разрядов, то есть код операции можно записать в памяти машин шестиначным двойным числом. Программисту же обычно удобнее разбить это число на две «триады», каждой из которых затем записывается одной цифрой в восемеричной (23=8)(2^3=8) системе численения, получая, таким образом, двухначное восемериное число. Если, например, N=4096=212N=4096=2^{12}, то в такой «двоично-восемеричной» системе для записи любого адреса потребуется не дванадцатирарядное, а лишь четырехирарядное, легче записываемое и читаемое число.

Если, скажем, код 01 означает операцию сложения, а 04 — деление, то машинное слово

01 1254 3172 6314

означает команду: числа, записанные в ячейках с адресами 1254 и 3172, сложить, и сумму записать в ячейку с адресом 6314. Аналогично слово

04 4365 2710 5024

предписывается разделить число из ячейки 4365 на число из ячейки 2710 и помещить часть в ячейку 5024.

Адрес ячейки, из которой устройство управления должно извлечь для выполнения очередную команду, записан в специальном счетчике команд, являющихся частью устройства управления. Если в счетчике записан некоторый адрес Я, то говорят, что «управление находится в ячейке Я». При выполнении команды, соответствующей арифметической операции, к содержимому счетчика команд автоматически прибавляется единица, так что управление передается ячейке со следующим адресом. Поэтому, если мы хотим, чтобы машина выполнила какую-либо последовательность арифметических операций, необходимо помещить соответствующую команду в ячейках памяти подряд.

Напишем, например, программу для вычисления величины

y=a+bxax+b.y = \frac{a+bx}{ax+b}.

4

числа из ячеек aa и R1R_1 и сумму записать в ячейку R1R_1), что, конечно, относить не следует понимать как «равенство» a=0a=0. Кстати, часто вместо знака = позволяет и пишут что-нибудь вроде→; но мы будем использовать стрелки для других целей.

Как уже говорилось, выполнение арифметической команды автоматически передает управление следующей ячейке, прибавляя единицу в счетчик команд. Но очень часто не удается расположить все нужные команды «в один столбик». Так, при решении квадратного управления ax2+bx+c=0ax^2+bx+c=0 в зависимости от знака дискриминаента D=b2−4acD=b^2-4ac нужно вычислять либо действительные, либо минимые корни, что делается, как известно, по-разному.

Для изменения порядка выполнения команд в числе элементов операций машины предусмотренные специальные команды управления (точнее — передачи управления), которые не совершают операций над содержимым ячеек памяты, а изменют содержимое счетчика команд.

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

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

a→b,ca \rightarrow b, c

(«переслать содержимое ячейки aa в ячейку bb и передать управление ячейке cc»).

Волее сложно работает команды условия передачи управления, передающие управление лишь при выполнении некоторых условий ускорения. Именно также команды требуют при программировании разветвляющихся процессов. Расмотрим одну из таких команд:

a<b,c.a < b, c.

При ее выполнения сравнивают числа, записанные в ячейках памяти aa и bb. Если написанное в команде неравенство справедливо, то управление передается ячейке cc, то есть вместо содержимого счетчика команд в него записьется третьий адрес команда (как при безусловной передаче управления). Если же a≥ba \geq b, то к содержимому счетчика прибавляется единица, как при арифметических операциях.

С помощью описанных команд можно уже запросимировать решение и некоторых задаченных невычислительной характера. Пусть, например, в ячейках x1x_1 и x2x_2 записаны неоторные числа, из которых требуется выбрать большее и записать его в ячейку xx. Это можно сделать с помощью следующей программы:

  1. x1<x2x_1 < x_2, 3,
  2. x1→xx_1 \rightarrow x, 4,
  3. 0+x2=x,0 + x_2 = x,
  4. cmoncmon

Первая ее команда — условная передача управления: если x2x_2 больше x1x_1, то управление будет передано команде 3). Это — арифметическая команда, в результате выполнения которой в ячейке xx будет записано число x2x_2. (Часто встречалось число 0 оказывается удобным «закрепить» за ячейкой, имеющей номер 0, что и делается почти во всех машинах.) Затем управление передает к следующей ячейке 4), в которой находится команда cmoncmon.

Если же x1≥x2x_1 \geq x_2, то команда 1) передает управление следующей ячейке 2), где находится команда безусловной передачи управления, засылающая в ячейку xx больше числа x1x_1 и передающая управление сразу на cmoncmon.

Вместо указания номера или условия команды, которая передается управление, часто просто стрелку до нужной команды. Вот как, например, выглідит аналогичная программа, от которой