Специфичные для микропроцессоров
В выпускаемых микропроцессорах часто можно встретить команды, которых нет в нашем иллюстративном микропроцессоре. Одни из них являются просто разновидностями команд нашего микропроцессора, другие более удобны с точки зрения программирования, третьи расширяют вычислительную мощь микропроцессора. Не ставя задачи рассмотреть все возможные виды команд, мы тем не менее приведём наиболее характерные из них.
Арифметические и логические команды с операндами в главной памяти
В иллюстративном процессоре все арифметические и логические команды работали с операндами, либо находящимися на регистрах микропроцессора, либо адресуемыми косвенно при помощи регистров Н и L. Во многих микропроцессорах встречаются арифметические и логические команды с прямой адресацией операнда в главной памяти. По такой схеме команда сложения, например, прибавляет содержимое ячейки памяти к содержимому внутреннего регистра, служащего аккумулятором, и помещает результат во внутренний регистр. При задании в команде прямого адреса операнда в главной памяти длина команды, естественно, возрастает.
В некоторых микропроцессорах возможности расширяются еще больше и предусматривается запись результата непосредственно в главную память. Примерами могут служить команды, инвертирующие содержимое ячейки памяти или увеличивающие его на единицу.
Команды условных переходов
|
|
В нашем микропроцессоре выбор направления вычислений выполняется с помощью шести команд условных переходов, в которых анализируется три условия: равно ли нулю содержимое аккумулятора, положительно ли оно и равен ли нулю бит триггера переноса. Во многих микропроцессорах, помимо перечисленных, анализируются следующие условия:
1. Переполнение при арифметических операциях.
2. Четность (или нечетность) числа единиц в содержимом регистра.
3. Строгая положительность содержимого регистра (положительно и не равно нулю).
4. Различные внешние условия, задаваемые сигналами на специальных входных линиях.
Во многих микропроцессорах команды условных переходов реагируют на состояние отдельных флажковых триггеров.
Значения этих триггеров устанавливаются в момент выполнения определенных операций. Например, может существовать флажок знака или флажок четности. На состояние этих флажков влияют только арифметические и (или) логические команды, тогда как другие команды, например загрузка аккумулятора, оставляют их неизменными. Таким образом, состояние каждого флажкового триггера будет отражать не обязательно текущее состояние того или иного регистра, а то его состояние, которое было получено в результате выполнения последней из команд, принадлежащих некоторой категории. Этот подход заметно отличается от принятого нами в иллюстративном микропроцессоре с двумя условиями N и Z, характеризующими состояние аккумулятора.
|
|
Обычно флажки состояний в микропроцессорах объединяются в специальный регистр. Содержимое этого регистра называется словом состояния программы и анализируется во всех командах условного перехода. Обычно предусматривается возможность передачи слова состояния программы на другие регистры микропроцессора или в главную память. В частности, слово состояния программы может сохраняться в стеке при вызове подпрограммы. В этом случае, даже если подпрограмма изменит слово состояния программы, при возврате из подпрограммы его можно восстановить.
Помимо (или вместо) условных переходов, в некоторых микропроцессорах применяются другие команды, позволяющие выбирать направление вычислений. О командах условного пропуска мы говорили в разд. 4. Можно также упомянуть команды условного перехода на подпрограмму и условного возврата из подпрограммы.
Команды обработки данных
Операции, выполняемые в иллюстративном микропроцессоре при помощи арифметических и логических команд, являются базисными и встречаются в большинстве микропроцессоров. В некоторых микропроцессорах, кроме того, предусмотрены команды десятичной арифметики, двоичного умножения, двоичного деления и других операций.
|
|
Десятичная арифметика встречается в системе команд многих микропроцессоров. Десятичные числа, как правило, представляются в коде 8421 BCD с четырехбитовыми цифрами, размещаемыми в слове данных вплотную друг к другу. Например, в микропроцессоре с восьмибитовым словом каждое слово интерпретируется как двузначное десятичное целое без знака.
Десятичное сложение обычно выполняется с помощью двоичного сложения и последующей коррекции результата. Для коррекции сначала определяются десятичные разряды, в которых выполняется одно из двух условий: (1) десятичная цифра в двоичной системе превышает 9 или (2) возникает перенос из старшего двоичного разряда цифры при двоичном сложении. К каждому такому десятичному разряду прибавляется корректирующая цифра 6, причем это сложение также выполняется обычным образом в двоичной системе с распространением всех переносов.
Реализуется описанная процедура в микропроцессорах обычно одним из двух способов. В первом случае предусматривается команда десятичного сложения, которая в процессе выполнения осуществляет и двоичное сложение, и коррекцию. Во втором — предусматривается отдельная команда десятичной коррекции (decimal-adjust instruction). В этом случае при десятичном сложении сначала выполняется обычная команда двоичного сложения, оставляющая результат в регистре, а затем выполняется команда десятичной коррекции.
|
|
Для правильной работы эта вторая команда должна располагать необходимой информацией. В частности, должно быть известно о наличии или отсутствии переносов из каждого десятичного разряда при двоичном сложении. В связи с этим обычно добавляются триггеры, фиксирующие переносы из каждого четвертого двоичного разряда при двоичном сложении. При восьмибитовом слове данных нужен только один дополнительный триггер переноса, поскольку триггер переноса из восьмого разряда — триггер переноса С — уже есть.
Умножение и деление — это относительно сложные операции, и аппаратно они реализуются лишь в немногих микропроцессорах. Обычно эти операции выполняются над двоичными целыми числами без знаков. Как правило, по команде умножения перемножается содержимое двух регистров, и результат двойной длины запоминается в паре регистров. При делении делимое обычно задается парой регистров, а делитель — одним. Целое частное при этом помещается в один регистр, а остаток — в другой. Перед выполнением деления, однако, происходит проверка на возможное переполнение частного. Переполнение происходит в том случае, когда для представления частного требуется больше разрядов, чем содержится в одном регистре. Тест переполнения можно провести, сравнивая делитель со старшей половиной делимого. Переполнения частного не произойдет, если делитель не равен нулю и по крайней мере вдвое превышает старшую половину делимого.
В силу сложности операций умножения и деления время их выполнения обычно существенно превышает время выполнения других операций. Каждая из них состоит из многих шагов, выполняемых в микропроцессоре последовательно.
Дата добавления: 2018-04-05; просмотров: 350; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!