logo
Informatics

3.4.2. Индикаторы переноса и переполнения

Рассмотрим более подробно ситуацию, приводящую при увеличении четырех-битового числа (т.е. прибавления к нему 1) к неверному арифметическому результату, возникшую из-за конечности числовой системы ЭВМ. В числовой системе без знака эта проблема возникает при увеличении слова 1111, прижатом имеет место перенос единицы из знакового бита. В случае системы чисел со знаком перенос из старшего бита дает верный результат: 1111+ 0001 = 0000 (что правильно: -1+1=0). Но в этой системе увеличение слова 0111 приводит к ошибочной ситуации: 0111+1=1000 (7+1 =-8), при этом имеет место перенос в знаковый бит.

В процессоре ЭВМ (устройстве, в котором выполняются арифметические операции) содержатся два индикатора - индикатор переноса и индикатор переполнения. Каждый индикатор содержит 1 бит информации и может быть процессором установлен (в этом случае ему придается значение, равное 1) или сброшен (равен 0). Индикатор переноса указывает на перенос из знакового бита, а индикатор переполнения - на перенос в знаковый бит. Таким образом, после завершения операции, в которой происходит перенос в старший бит, процессор устанавливает индикатор переполнения, если такого переноса нет, то индикатор переполнения сбрасывается. Индикатор переноса обрабатывается аналогичным образом.

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

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

Например, правильность операции сложения определяется на основании следующих условий:

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

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

Таким образом, если в результате выполнения операции сложения происходит перенос из знакового бита, то индикатор переноса устанавливается, если нет, то индикатор переноса сбрасывается, т.е. состояние индикатора переноса, сброшенное или установленное, показывает соответственно правильность или неправильность операции сложения без учета знака. Индикатор переполнения устанавливается, если два складываемых числа имеют один и тот же знак, а результат сложения получается с противоположным знаком; в противном случае он сбрасывается, т.е. индикатор переполнения устанавливается тогда и только тогда, когда происходит только один из переносов в знаковый бит или из него. Тем самым состояние индикатора переполнения (сброшенное или установленное) может использоваться для определения соответственно правильности или неправильности сложения с учетом знака.

Операцию вычитания можно свести к операции сложения в силу того, что А - В = А + (-В). Таким образом, необходимо только над вычитаемым произвести операцию дополнения до двух и сложить его с уменьшаемым.

Правильность или неправильность результатов вычитания, так же как и при сложении, зависит от того, происходили (или нет) переносы в знаковый бит или из него. Чтобы понять, как процессор устанавливает индикаторы переноса и переполнения, надо помнить, что вычитание выполняется как сложение: А-В=А+ (-В). Если это сложение приводит к переносу из знакового бита, то индикатор переноса сбрасывается, иначе он устанавливается. Следовательно, в случае вычитания индикатор переноса устанавливается обратно тому, как при сложении. Индикатор переполнения устанавливается, если уменьшаемое и вычитаемое имеют противоположные знаки (т.е. имеют разные знаковые биты), а результат вычитания имеет тот же знак, что и вычитаемое, то индикатор переполнения сбрасывается.

Таким образом, состояние индикатора переноса (сброшен или установлен) показывает соответственно на правильность и неправильность вычитания в числовой системе без учета знака, а сброшенный или установленный индикатор переполнения показывает соответственно на правильность или неправильность вычитания в числовой системе со знаком. При этом индикатор переноса устанавливается тогда и только тогда, когда нет переноса из знакового бита, а индикатор переполнения устанавливается тогда и только тогда, когда был только один перенос в знаковый бит или из него.