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

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

(что правильно: -1 + 1 = 0). Но в этой системе увеличение слова 0111 приводит к ошибочной ситуации: 0111 + 1 = 1000 (7 + 1 = -8), при этом имеет место перенос в знаковый бит.

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

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

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

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

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

2. Если машинные слова интерпретируются как числа со знаком,
то результат сложения

а) двух положительных чисел будет арифметически правильным
тогда и только тогда, когда не будет переноса в знаковый бит;

б) двух отрицательных чисел будет арифметически правильным
тогда и только тогда, когда будет происходить перенос в знаковый
бит, причем в этой ситуации перенос из знакового бита происходит
всегда;

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

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

Пример 1. Рассмотрим сложение двух чисел 0101 + 0011 = 1000. В результате выполнения операции сложения произошел перенос в знаковый бит, а переноса из знакового бита не было. Таким образом, после завершения этой операции индикатор переноса будет сброшен, а индикатор переполнения установлен. Поэтому если рассматривать эти два числа как целые без знака, то результат является арифметически правильным, так как индикатор переноса сброшен. Если рассматривать числа в системе со знаком, то бит переполнения показывает, что произошло изменение знака (перенос в знаковый бит есть, а из — нет), поэтому арифметический результат неправильный.

Пример 2. В результате сложения 1101 + 0101 = 0010 происходит перенос и в знаковый бит, и из знакового бита. Поэтому будет установлен индикатор переноса, а индикатор переполнения сброшен. Следовательно, в системе чисел без знака результат является арифметически неправильным, а в системе чисел со знаком -правильным.

Г 73

Пример 3. В результате сложения 0011 + 0010 = 0101 не происходит переноса ни в знаковый бит, ни из него. Поэтому оба индикатора будут сброшены. Следовательно, в этом случае в обеих числовых системах (без знака и со знаком) результат будет арифметически правильным.

Операцию вычитания можно свести к операции сложения в силу того, что А-В = А +. (-5). Таким образом, необходимо только над вычитаемым произвести операцию дополнения до двух и сложить его с уменьшаемым. Например, операция ООП - 1001 эквивалентна операции ООП + (ОНО + 1) = ООП + 0111 = 1010. В этом случае в системе чисел без знака (3 - 9 = 10) и со знаком (3-(-7) = -6) резуль тат является арифметически неправильным.

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

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

Пример 4. В результате выполнения операции вычитания 1001-0011 = 1001 + +(-0011)= 1001 +(1100+ 1)= 1001 + 1101 =0110 происходит перенос из знакового бита, а переноса в знаковый бит нет. Следовательно, индикатор переноса будет сброшен, а индикатор переполнения установлен, что указывает на то, что в данном примере в системе без знака результат арифметически правильный, а в системе со знаком — неправильный.

3.4.3. ПРЕДСТАВЛЕНИЕ СИМВОЛЬНОЙ ИНФОРМАЦИИ В ЭВМ

В отличие от обычной словесной формы, принятой в письменном виде, символьная информация хранится и обрабатывается в памяти ЭВМ в форме цифрового кода. Например, можно обозначить каждую букву числами, соответствующими ее порядковому номеру в алфавите: А- 01, Б - 02, В - 03, Г - 04,..., Э - 30, Ю - 31, Я - 32. Точно так же можно договориться обозначать точку числом 33, запя тую - 34 и т.д. Так как в устройствах автоматической обработки ин формации используются двоичные коды, то обозначения букв надо перевести в двоичную систему. Тогда буквы будут обозначаться следующим образом: А - 000001, Б - 000010, В - 000011, Г - 000100,..., Э - 011110, Ю - 011111, Я - 100000. При таком кодировании любое слово можно представить в виде последовательности кодовых групп, составленных из 0 и 1. Например, слово ЭВМ выглядит так: 011110000011001110.

При преобразовании символов (знаков) в цифровой код между множествами символов и кодов должно иметь место взаимно однозначное соответствие, т.е. разным символам должны быть наз начены разные цифровые коды, и наоборот. Это условие является единственным необходимым требованием при построении схемы преобразования символов в числа. Однако существует ряд прак тических соглашений, принимаемых при построении схемы преоб разования исходя из соображений наглядности, эффективности, стандартизации. Например, какое бы число ни назначили коду для знака О (не следует путать с числом 0), знаку I удобно назначить число, на единицу большее, чем код О, и т.д. до знака 9. Аналогичная ситуация возникает и при кодировке букв алфавита: код для Б на единицу больше кода для А, а код для В на единицу больше кода для Б и т. д. Таким образом, из соображений наглядности и легкости запоминания целесообразно множества символов, упорядоченных по какому-либо признаку (например, лексико-графическому), коди ровать также с помощью упорядоченной последовательности чисел.

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

При назначении кодов знакам надо также учитывать соглашения, касающиеся стандартизации кодировки. Можно назначить знаковые коды по своему выбору, но тогда возникнут трудности, связанные с необходимостью обмена информацией с другими организациями, использующими кодировку, отличную от нашей. В настоящее время существует несколько широко распространенных схем кодирования. Например, код BCD (Binary-Coded Decimal) — двоично-десятичный код используется для представления чисел, при котором каждая десятичная цифра записывается своим четырехбитовым двоичным эквивалентом. Этот код может оказаться полезным, когда нужно преобразовать строку числовых знаков, например, строку из числовых знаков «2537» в число 2537, над которым затем будут производиться арифметические действия. Расширением этого кода является EBCDIC (Extended Binary-Coded Decimal Interchange Code) — расширенный двоично-десятичный код обмена информацией, который преобразует как числовые., так и буквенные строки.

В ЭВМ типа PDP (или СМ) применяется код ASCII (American Standard Code for Information Interchange) - американский стандар тный код обмена информацией. Этот код генерируется некоторыми внешними устройствами (принтером, АЦПУ) и используется для об мена данными между ними и оперативной памятью ЭВМ. Например, когда нажимаем на терминале клавишу G, то в результате этого действия код ASCII для символа G (1000111) передается в ЭВМ. А если надо этот символ распечатать на АЦГГУ, то его код ASCII должен быть послан на печатающее устройство.

Отечественной версией кода ASCII является код КОИ-7 (двоич ный семибитовый код обмена информацией), который совпадает с ним, за исключением букв русского алфавита.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: