Основы микропроцессорной техники | |
Раздел 3. Функционирование процессора | |
| «Структура курса | Глава 1 | Глава 2 | Глава 3 | Глава 4 | Глава 5 | Глава 6 | Раздел 7 | Глава 8 | Дополнения | |
| Раздел 3 - Страницы: « | 1 | 2 | 3 | 4 | 5 | » | |
3.3.3. Логические командыЛогические команды выполняют над операндами логические (побитови) операции, то есть они рассматривают коды операндов не как единственное число, а как набор отдельных битов. Этим они отличаются от арифметических команд. Логические команды выполняют следующие основные операции:
Команды логических операций позволяют побитно вычислять основные логические функции двух входных операндов. Кроме того, сделка И (AND) используется для принудительного очистки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующих очистки, установленные в ноль). Операция ИЛИ (OR) применяется для принудительного установления заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующих установки в единицу, равны единице. Операция "неравнозначности" (XOR) используется для инверсии заданных битов (в качестве одного из операндов при этом применяется код маски, в котором биты, подлежащих инверсии, установленные в единицу). Команды требуют двух входных операндов и формируют один выходной операнд. Команды сдвигов позволяют побитно сдвигать код операнда вправо (в сторону младших разрядов) или влево (в сторону старших разрядов). Тип сдвига (логический, арифметический или циклический) определяет, какое будет новое значение старшего бита (при сдвиге вправо) или младшего бита (при сдвиге влево), а также определяет, будет где сохранено прежнее значение старшего бита (при сдвиге влево) или младшего бита (при сдвиге вправо. Например, при логическом сдвиге вправо в старшем разряде кода операнда устанавливается ноль, а младший разряд записывается как флаг переноса в регистр состояния процессора. А при арифметическом сдвиге вправо значение старшего разряда сохраняется неизменным (нулем или единицей), младший разряд также записывается как флаг переноса. Циклические сдвиги позволяют сдвигать биты кода операнда по кругу (по часовой стрелке при сдвиге вправо или против часовой стрелки при сдвиге влево). При этом в кольцо сдвига может входить или не входить флаг переноса. В бит флага переноса (если он используется) записывается значение старшего бита при циклическом сдвиге влево и младшего бита при циклическом сдвиге вправо. Соответственно, значение бита флага переноса будет переписываться в младший разряд при циклическом сдвиге влево и в старший разряд при циклическом сдвиге вправо. Для примера на Рис. 3.12 показаны действия, выполняемые командами сдвига вправо. Команды проверки битов и операндов предназначены для установки или очистки битов регистра состояния процессора в зависимости от значения выбранных битов или всего операнда в целом. Выходного операнда команды не формируют. Команда проверки операнда (TST) проверяет весь код операнда в целом на равенство нулю и в знак (значение старшего бита), она требует только одного входного операнда. Команда проверки бита (BIT) проверяет только отдельные биты, для выбора которых в качестве второго операнда используется код маски. В коде маски битам, которые проверяются, основного операнда должны соответствовать единичные разряды.
Наконец, команды установки и очистки битов регистра состояния процессора (т.е. флагов) позволяют установить или очистить любой флаг, бывает очень удобно. Каждому флага обычно отвечают две команды, одна из которых устанавливает его в единицу, а другая сбрасывает в ноль. Например, флага переноса C (от Carry) будут отвечать команды CLC (очистка) и SEC или STC (установка). 3.3.4. Команды переходовКоманды переходов предназначены для организации всевозможных циклов, ветвлений, вызовов подпрограмм и т.д., т.е. они нарушают последовательный ход выполнения программы. Эти команды записывают в регистр-счетчик команд новое значение и тем самым вызывают переход процессора не к следующей по данной команде, а к любой другой команды в памяти программ. Некоторые команды переходов предусматривают дальнейшем возвращение назад, в место, из которого был сделан переход, другие не предусматривают этого. Если возвращение предусмотрено, то текущие параметры процессора сохраняются в стеке. Если возвращение не предусмотрено, то текущие параметры процессора не сохраняются. Команды переходов без возврата делятся на две группы:
В обозначениях этих команд используются слова Branch (ветвление) и Jump (прыжок). Команды безусловных переходов вызывают переход на новый адрес независимо ни от чего. Они могут вызвать переход на указанную величину смещения (вперед или назад) или на указанный адрес памяти. Размер сдвига или новое значение адреса указываются входящего операнда. Команды условных переходов вызывают переход не всегда, а только при выполнении заданных условий. Как такие условия обычно выступают значения флагов в регистре состояния процессора (PSW). То есть условием перехода результат предыдущей операции, которая изменяет значение флагов. Всего таких условиях перехода может быть от 4 до 16. Несколько примеров команд условных переходов:
Если условие перехода выполняется, то происходит загрузка в регистр-счетчик команд новое значение. Если же условие перехода не выполняется, счетчик команд просто наращивается, и процессор выбирает и выполняет последовательно следующую команду. Специально для проверки условий перехода применяется команда сравнения (CMP), которая предшествует команде условного перехода (или даже нескольким командам условных переходов. Но флаги могут устанавливаться и любой другой командой, например командой пересылки данных, любой арифметической или логической командой. Отметим, что сами команды переходов флаги не меняют, что именно и позволяет ставить несколько команд переходов одну за другой. Совместное использование нескольких команд условных и безусловных переходов позволяет процессору выполнять разветвленные алгоритмы любой сложности. Для примера на Рис. 3.13 показано разветвления программы на двух ветвей с последующей сообщением, а на Рис. 3.14 - разветвления на три ветви с последующей сообщением. Команды переходов с последующим возвращением в место, из которого был выполнен переход, применяются для выполнения подпрограмм, т.е. вспомогательных программ. Эти команды называются также командами вызова подпрограмм (распространенное название - CALL. Использование подпрограмм позволяет упростить структуру основной программы, сделать ее более логичной, гибкой, легкой для написания и отладки. В то же время надо учитывать то, что широкое использование подпрограмм, как правило, увеличивает время выполнения программы.
Все команды переходов с возвратом предполагают безусловный переход (они не проверяют никаких флагов. При этом они требуют одного входного операнда, что может указывать как абсолютное значение нового адреса, так и сдвиг, состоящий из текущим значением адреса. Текущее значение счетчика команд (текущая адрес) сохраняется перед выполнением перехода в стеке. Для обратного возвращения в место вызова подпрограммы (место перехода) используется специальная команда возврата (RET или RTS). Эта команда извлекает из стека значение адреса команды перехода и записывает его в регистр-счетчик команд. Особое место среди команд перехода с возвратом занимают команды прерываний (распространенное название - INT. Эти команды входящего операнда требуют номер прерывания (адрес вектора. Обслуживание таких переходов осуществляется точно так же, как и аппаратных прерываний. То есть для выполнения данного перехода процессор обращается к таблице векторов прерываний и получает с нее номера прерывания адрес памяти, куда ему необходимо перейти. Адрес вызова прерывания и сельскохозяйственного производственного состояния процессора (PSW) хранятся в стеке. Сохранение PSW - важное отличие команд прерывания от команд переходов с возвратом. Команды прерываний во многих случаях оказываются удобными, чем обычные команды переходов с возвратом. Сформ ровать таблицу векторов прерываний можно один раз, а потом уже обращаться к ней по мере необходимости. Номер прерывания соответствует номеру подпрограммы, т.е. номера функции, выполняемой подпрограммой. Поэтому команды прерывания гораздо чаще включаются в системы команд процессоров, чем обычные команды переходов с возвратом. Для возвращения из подпрограммы, вызванной командой прерывания, используется команда возвращения из прерывания (IRET или RTI). Эта команда извлекает из стека сохраненное там значение счетчика команд и регистра состояния процессора (PSW). Отметим, что в некоторых процессоров предусмотрены также команды условных прерываний, например, команда прерывания при переполнении. Конечно, в данном разделе мы рассмотрели только основные команды, наиболее часто встречающихся в процессорах. В конкретных процессоров может быть и много других команд, не относящихся к перечисленным групп команд. Но изучать их надо уже после того, как выбран тип процессора, который подходит для задачи, решаться данной микропроцессорной системой. | |
| «Структура курса Раздел 3 - Страницы: « | 1 | 2 | 3 | 4 | 5 | » | |