Регистр кода условия


Предыдущая | Следующая

Регистр кода условия
Регистр кода условия CCR содержит независимые биты. Каждый бит включен или выключен и действует как управляющий ключ для конкретной схемы. Биты, называемые флажками, не связаны друг с другом.
В 8-битовом процессоре регистр CCR имеет 8 бит, но используются они не все. Обычно CCR находится между аккумулятором и программным счетчиком. Аккумулятор соединен с CCR двунаправленными линиями, а программный счетчик — однонаправленной линией. Аккумулятор и CCR должны передавать биты друг другу, а в программный счетчик CCR только выводит. Пересылать биты из программного счетчика в регистр CCR не нужно.
При выполнении программы аккумулятор и CCR тесно взаимодействуют. Они контролируют каждый считываемый программой байт, проверяя, не является ли он кодом операции, который должен изменить адрес. Флажок можно установить в Н-состояние или сбросить в L-состояние. Большинство кодов операций содержит биты, которые вызывают установку или сброс флажков. В свою очередь, флажок может вызвать различные изменения в аккумуляторе и программном счетчике.
Флажки обычно называются переносом, переполнением, нулем, отрицательным, прерыванием, полупереносом, быстрым прерыванием и сохранением. Они служат ключами ВКЛ/ВЫКЛ для некоторых важных функций процессора. Программирующий на машинном языке должен знать, как флажки устанавливаются и сбрасываются при выполнении программы. Неправильный учет флажка может привести к краху программы.
Перенос. Флажок переноса С (Carry) работает с 8-битовым аккумулятором, являясь девятым битом аккумулятора (рис. 14.10). Во многих вычисления число превышает 8 бит и флажок С фиксирует лишний бит. В других ситуациях аккумулятор действует как регистр сдвига. При сдвиге вправо бит из разряда нуль выдвигается и попадает во флажок С. При сдвиге влево выдвигается бит 7 и он также направляется во флажок С. Операции сдвига называются обычным сдвигом вправо или влево и циклическим сдвигом вправо или влево. Флажок С сохраняет тот бит, который выдвигается с любой стороны аккумулятора.
Состояние флажка влияет на операцию команды. Когда процессор действует в соответствии с командой, он проверяет состояния флажков. Например, флажок переноса обычно сброшен. Если сложение вызывает перенос, флажок С устанавливается в единицу. В операции сложения процессор проверяет бит С и при наличии в нем единицы будет использовать единицу в операции сложения.
Отрицательный. Флажок N (Negative) называется флажком отрицательного числа (рис. 14.11). В регистре аккумулятора могут содержаться отрицательные числа. Знак числа показывает бит 7: если он содержит нуль, число положительное, а если бит 7 содержит единицу, число отрицательное и находится в диапазоне от — 1 до — 128.

В 8-битовом аккумуляторе может быть 256 комбинаций. Для беззнаковых чисел эти комбинации соответствуют числам от 0 до 255. В случае знаковых чисел эти же комбинации обозначают десятичные числа от — 128 до 4-127. В табл. 14.1 и 14.2 приведено кодирование знаковых и беззнаковых чисел.

При использовании знаковых чисел бит 7 показывает знак, поэтому для хранения кода числа остаются только биты 6 — 0. В этих семи битах можно закодировать 128 комбинаций и представить числа от 0 (00000000) до +127 (01111111).
Следующая комбинация после +127 есть 10000000 и она считается числом —128. Следующая комбинация 10000001 становится числом —127 и т.д. до 11111111, что эквивалентно числу —1. Таким образом, при инкременте аккумулятора от 00000000 до 11111111 знаковые числа изменяются от нуля до +127, а затем от — 128 до — 1.
Флажок N показывает знак числа. Кода бит 7 аккумулятора содержит нуль (число положительное) флажок N сбрасывается в нуль, а когда бит 7 содержит единицу, флажок N устанавливается в единицу. Она сигнализирует АЛУ и программному счетчику, что в аккумуляторе находится отрицательное число, и они действуют соответствующим образом.

Переполнение. Флажок переполнения V (overflow) устанавливается в единицу при наличии переноса из бита 6 в бит 7 и изменении знака (рис. 14.12). Он действует в операциях со знаковыми и беззнаковыми числами. При этом в операциях с беззнаковыми числами флажок переполнения можно игнорировать, но программист должен учитывать наличие флажка V.

Нуль. Флажок нуля Z (Zero) является самым простым (рис. 14.13). Он устанавливается в единицу, когда в регистре аккумулятора получается комбинация 00000000. Если в аккумуляторе хотя бы один бит содержит единицу, флажок Z сбрасывается в нуль. Флажок Z удобен в вычитающем счете. Можно написать программу для вычитания до нуля и ее останова при достижении в аккумуляторе 00000000.
Флажок Z связан с программным счетчиком. Он часто используется в программировании.

Полуперенос. Флажок Н (Half carry) показывает полуперенос. Он не похож на флажок переноса С, который служит девятым битом аккумулятора, а больше похож на флажок переполнения V. Флажок Н следит за переносом, который возникает из бита 3 в бит 4 (рис. 14.14).

Восемь битов аккумулятора состоят из двух тетрад — старшей в битах 7 —4 и младшей в битах 3 — 0. Тетрады достаточно для кодирования одной десятичной или 16-ричной цифры.
Когда аккумулятор выполняет сложение, он фактически суммирует тетрады. Наличие двоичного переноса из бита 3 в бит 4 означает перенос из младшей тетрады в старшую. Это специальный перенос, который отличается от разрядных переносов. Иногда при выполнении программы приходится учитывать этот перенос.
Флажок Н фиксирует перенос между тетрадами, который называется полупереносом, так как возникает посередине аккумулятора. При наличии полупереноса флажок Н устанавливается в единицу, а при его отсутствии сбрасывается в нуль.
Прерывания. Прерывание — одно из важнейших средств компьютера. При выполнении программы подключенные к процессору микросхемы могут послать в процессор биты, которые прерывают программу и заставляют процессор обратить внимание на прерывание. Когда бит прерывания достигнет процессора, он закончит текущий машинный цикл и будет обрабатывать прерывание.
При обработке прерывания процессор прежде всего сохраняет содержимое своих регистров в безопасной области памяти, называемой стеком. Если процессор сохраняет содержимое регистров, то после обслуживания прерывания он сможет восстановить регистры в то состояние, в каком они находились, и продолжит программу с точки прерывания.
После сохранения регистров процессор переходит к определенной процедуре прерывания. Прерывание заставляет процессор поместить в программный счетчик специальный адрес, называемый вектором. В этом контексте слово «вектор» означает двухбайтовый адрес. Процессор считывает вектор из ПЗУ и загружает его в программный счетчик.
Вектор является первым адресом специальной программы, которая обслуживает прерывание. Процессор последовательно выполняет эту программу.
После обслуживания прерывания процессор обращается к стеку. Он считывает первоначальное содержимое регистров, загружает регистры и продолжает с того места в основной программы, где она была прервана. Прерывания широко применяются в компьютерах. Они очень удобны, когда процессор должен взаимодействовать с периферийным устройством через микросхему ввода-вывода. Все операции с периферийными устройствами осуществляются через прерывания.

В группе флажков один или несколько флажков отводятся для прерываний и называются флажками I (Interrupt). Флажки I сами прерываниями не являются — они служат масками прерываний. Прерывание — это биты от устройства в процессор, а флажки действуют как маски этих битов. Флажок маски не пропускает входной бит прерывания, если маска содержит единицу, и позволяет биту прерывания пройти, если маска содержит нуль.
Причина установки маски в единицу состоит в том, чтобы запретить последующие прерывания при обработке текущего прерывания. Процессор в любой момент времени может обрабатывать только одно прерывание. Все остальные прерывания маскируются.
Бит I в состоянии единица маскирует большинство прерываний, но в процессоре имеется так называемое немаскируемое прерывание, которое подается на специальный входной контакт процессора. Оно вызывает прерывание независимо от состояния бита I. Немаскируемое прерывание подается только тогда, когда компьютер находится в опасности. Например, при распознавании неисправности питания компьютер формирует немаскируемое прерывание.
Флажки и команды условного перехода. Регистр CCR влияет на такие коды операций, которые вызывают изменение адреса. За исключением безусловного относительного перехода Branch уловные переходы проверяют флажки, определяя, нужно ли изменять адрес. Когда команда Branch поступает в процессор, он прибавляет байты «трайлера» к программному счетчику и выдает на шину адреса новый адрес перехода. Процессор проверяет по флажкам, нужно ли проводить переход в командах условного перехода. Например, в регистре команды может появиться команда перехода, если аккумулятор равен нулю. Когда аккумулятор содержит 00000000, флажок Z установлен в единицу, а при любом другом содержимом аккумулятора флажок Z сброшен в нуль.
Процессор проверяет флажок Z. Если аккумулятор содержит нуль, флажок Z установлен в единицу и процессор выполняет переход. Байты «трайлера» прибавляются к программному счетчику, и происходит обращение по новому адресу. Если же флажок Z сброшен в нуль, то аккумулятор не равен нулю. Поэтому код операции игнорируется и программный счетчик просто адресует следующую по порядку команду.
Флажки из регистра CCR включены в процессоре между аккумулятором и программным счетчиком. Большинство команд при выполнении устанавливает или сбрасывает флажки. Программирующий на ассемблере должен следить за состояниями флажков. При программировании на языке высокого уровня компилятор или интерпретатор учитывают флажки автоматически. Однако при заводских испытаниях много диагностических тестов и программ вводятся на машинном языке, и нужно помнить о флажках.

 

 Поиск и устранение неисправностей в персональных компьютерах