$put_perv_real = "/home/www/dvakompa-ru/dopol/"; ?>
Регистр кода условия
Регистр кода условия 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 означает перенос из младшей тетрады в старшую. Это специальный перенос, который отличается от разрядных переносов. Иногда при выполнении программы приходится учитывать этот перенос.
Флажок Н фиксирует перенос между тетрадами, который называется полупереносом, так как возникает посередине аккумулятора. При наличии полупереноса флажок Н устанавливается в единицу, а при его отсутствии сбрасывается в нуль.
Прерывания. Прерывание — одно из важнейших средств компьютера. При выполнении программы подключенные к процессору микросхемы могут послать в процессор биты, которые прерывают программу и заставляют процессор обратить внимание на прерывание. Когда бит прерывания достигнет процессора, он закончит текущий машинный цикл и будет обрабатывать прерывание.
При обработке прерывания процессор прежде всего сохраняет содержимое своих регистров в безопасной области памяти, называемой стеком. Если процессор сохраняет содержимое регистров, то после обслуживания прерывания он сможет восстановить регистры в то состояние, в каком они находились, и продолжит программу с точки прерывания.
После сохранения регистров процессор переходит к определенной процедуре прерывания. Прерывание заставляет процессор поместить в программный счетчик специальный адрес, называемый вектором. В этом контексте слово «вектор» означает двухбайтовый адрес. Процессор считывает вектор из ПЗУ и загружает его в программный счетчик.
Вектор является первым адресом специальной программы, которая обслуживает прерывание. Процессор последовательно выполняет эту программу.
После обслуживания прерывания процессор обращается к стеку. Он считывает первоначальное содержимое регистров, загружает регистры и продолжает с того места в основной программы, где она была прервана. Прерывания широко применяются в компьютерах. Они очень удобны, когда процессор должен взаимодействовать с периферийным устройством через микросхему ввода-вывода. Все операции с периферийными устройствами осуществляются через прерывания.
Поиск и устранение неисправностей в персональных компьютерах