Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОДЕРЖАНИЕ 3 (2).doc
Скачиваний:
39
Добавлен:
31.08.2019
Размер:
5.65 Mб
Скачать
  1. Операция пересылки

Операция пересылки состоит в копировании информации содержащейся одной ячейки памяти в другую ячейку без ее изменения.

Если форматы в ячейках совпадают, то выполнение операции тривиально. Если форматы не совпадают, то выполнение операции сводится к формированию задания системе Записи (раздел 3.3) и к передаче ей управления.

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

Если операнд является числом, но коды его представления в форматах операнда и результата не совпадают, то система арифметических операций должна выполнить преобразование кода операнда в код результата и передать системе Записи результат точного преобразования. Например, пусть в формате результата число должно быть представлено в прямом коде, а в формате операнда записан дополнительный код варианта B минимального числа 1|000|000. В такой ситуации система выполняет преобразование дополнительного кода в прямой без изменения значения числа и передает системе Записи прямой код 1|1000|000, расширив поле целого на одну позицию в любой системе счисления.

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

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

  1. Операция изменения знака

Система арифметических операций, контролируя операнд, может проявить ситуации невыполнимая операция, если

  • операнд не является числом;

  • формат результата не имеет поля знака;

  • операнд в дополнительном коде (вариант B или C) и имеет значение (+0).

Выполнение операции изменения знака числа сводится

  • в прямом коде – к инвертированию знакового разряда кода;

  • в обратном коде – к инвертированию знакового разряда и замене цифр обратными.

В дополнительном коде правила изменения знака числа зависят от применяемого варианта кода. При изменении знака числа

Вариант кода A. Код знака числа инвертируют. Если значащие разряды содержат только 0, их значение сохраняют. Иначе вычисляют дополнение значащих разрядов кода до веса знакового разряда.

Вариант кода B. Если ситуация невыполнимая операция не складывается, код знака инвертируют; расширяют поле целого на одну позицию слева (раздел 3.3.1), и вычисляют дополнение значащих разрядов кода до веса знакового разряда. Результат передают системе Записи в формат результата. При исходном коде 1|00…0 возможна исключительная ситуация переполнения, если формат результата совпадает с форматом операнда.

Вариант кода C. Если ситуация невыполнимая операция не складывается, код знака инвертируют, и вычисляют дополнение значащих разрядов кода до веса знакового разряда.

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

При изменении знака дополнительного кода варианта B 1|00…0 система арифметических операций должна переслать системе Записи код 0|100…0, расширив поле целого на 1 позицию слева. Если расширение формата не допускается, то возникает исключительная ситуация переполнения. Эти правила справедливы в любой системе счисления.

Если операцию изменения знака заменить операцией вычитания операнда из нуля, полагая что

, (4-01)

то при возможно получение ошибочного результата.

Действительно. Если система выполняет операцию вычитания в дополнительном коде (вариант B или C), знак результата равного нулю может быть только (+). Поэтому при результат будет (+0), а не (–0), и этот факт не будет обнаружен системой.

При вычитании из нуля в обратном или прямом коде знак результата равного нулю зависит от того, из (+0) или из (–0) и по какому правилу выполняется вычитание x. В некоторых случаях знак нуля может не изменяться. Подробнее описано в разделах 4.3.3, 4.3.6, 4.3.8.

Неправильное изменение знака нуля по (4-01) может быть причиной грубейших ошибок при выполнении программы на ЭВМ. Например, если после изменения знака x выполняется условный переход по знаку результата, то при ошибка в изменении знака нуля приведет к ветвлению программы в неправильном направлении со всеми вытекающими из этого последствиями.