.RU

Еще один фактор в пользу интерпретации — существование быстрых постоян­ных запоминающих устройств (так называемых командных ПЗУ) для хранения интерпретаторов


^ Еще один фактор в пользу интерпретации — существование быстрых постоян­ных запоминающих устройств (так называемых командных ПЗУ) для хранения интерпретаторов. ^ архитектура, структура и формат команд.
Все МП делят на: универсальные и секционные.

Архитектура МП - это:

  1. типы обрабатываемых данных и способы их представления

  2. адресные структуры памяти

  3. способы адресации

  4. структура команд

  5. регистровые структуры

  6. особенности системы команд

Структура и формат команд:

Команда состоит из операции и операндов.

Программа - последовательность команд.

Команды состоят из двух частей:

Структура команды - состав, расположение и назначение полей в команде.

^ Формат команды - привязка структуры к конкретным разрядам слова.

Конвейеры

Уже много лет известно, что главным препятствием высокой скорости выполне­ния команд является их вызов из памяти. Для разрешения этой проблемы разра­ботчики придумали средство для вызова команд из памяти заранее, чтобы они имелись в наличии в тот момент, когда будут необходимы. Эти команды помеша­лись в набор регистров, который назывался буфером выборки с упреждением. Таким образом, когда была нужна определенная команда, она вызывалась прямо из буфера, и не нужно было ждать, пока она считается из памяти.

В действительности процесс выборки с упреждением подразделяет выполне­ние команды на два этапа: вызов и собственно выполнение. Идея конвейера еще больше продвинула эту стратегию вперед. Теперь команда подразделялась уже не на два, а на несколько этапов, каждый из которых выполнялся определенной час­тью аппаратного обеспечения, причем все эти части могли работать параллельно.

На рис. 8.3, а изображен конвейер из 5 блоков, которые называются стадиями. Стадия О вызывает команду из памяти и помешает ее в буфер, где она хранится до тех пор, пока не будет нужна. Стадия С2 декодирует эту команду, определяя ее тип и тип операндов, над которыми она будет производить определенные действия. Стадия СЗ определяет местонахождение операндов и вызывает их или из регистров, или из памяти. Стадия С4 выполняет команду, обычно путем провода операндов через тракт данных (см. рис. 8.2). И наконец, стадия С5 записывает результат обрат­но в нужный регистр.


С1

С2

С3

С4

С5


б

Рис. 8.3. Конвейер из 5 стадий (а); состояние каждой стадии в зависимости от количества пройденных циклов (б). Показано 9 циклов

На рис. 8.3, б мы видим, как действует конвейер во времени. Во время цикла 1 стадия С1 работает над командой 1, вызывая ее из памяти. Во время цикла 2 ста­дия С2 декодирует команду 1, в то время как стадия С1 вызывает из памяти коман­ду 2. Во время цикла 3 стадия СЗ вызывает операнды для команды 1, стадия С2 декодирует команду 2, а стадия С1 вызывает третью команду. Во время цикла 4 стадия С4 выполняет команду 1, СЗ вызывает операнды для команды 2, С2 деко­дирует команду 3, а С1 вызывает команду 4. Наконец, во время пятого цикла С5 записывает результат выполнения команды 1 обратно в регистр, тогда как другие стадии работают над следующими командами.

Возвратимся к нашему конвейеру, изображенному на рис 8.3. Предположим, что время цикла у этой машины 2 нс. Тогда для того, чтобы одна команда прошла через весь конвейер, требуется 10 нс. На первый взгляд может показаться, что такой компьютер может выполнять 100 млн. команд в секунду, в действительно­сти же скорость его работы гораздо выше. Во время каждого цикла (2 нс) завер­шается выполнение одной новой команды, поэтому машина выполняет не 100 млн., а 500 млн. команд в секунду.

Конвейеры позволяют найти компромисс между временем ожидания (сколь­ко времени занимает выполнение одной команды) и пропускной способностью процессора (сколько миллионов команд в секунду выполняет процессор). Если время цикла составляет Т нс, а конвейер содержит n стадий, то время ожидания составит nТ нс, а пропускная способность — 1000/Т млн команд в секунду.


6. ^ Организация ввода-вывода, периферийные устройства ЭВМ.

Команды ввода-вывода

Архитектура ввода/вывода представляет собой с точки зрения программиста модель того, как происходит доступ к портам ввода/вывода. В рассмотрение этой модели входят:

- Методы адресации портов ввода/вывода.

- Команды, выполняющие операции ввода/вывода.

- Механизм защиты ввода/вывода.

Ни одна другая группа команд не различается настолько сильно в разных маши­нах, как команды ввода-вывода. В современных персональных компьютерах ис­пользуются три различные схемы ввода-вывода:

1. Программируемый ввод-вывод с активным ожиданием.

2. Ввод-вывод с управлением по прерываниям.

3. Ввод-вывод с прямым доступом к памяти. Мы рассмотрим каждую из этих схем по очереди.

Самым простым методом ввода-вывода является программируемый ввод-вывод, который часто используется в дешевых микропроцессорах, например во встроенных системах или в таких системах, которые должны быстро реагировать на внешние изменения (это системы, работающие в режиме реального времени). Эти процессоры обычно имеют одну входную и одну выходную команды. Каждая из этих команд выбирает одно из устройств ввода-вывода. Между фиксирован­ным регистром в процессоре и выбранным устройством ввода-вывода передается один символ. Процессор должен выполнять определенную последовательность команд при каждом считывании и записи символа.

В качестве примера данного метода рассмотрим терминал с четырьмя 1-байт-ными регистрами, как показано на рис. 5.19. Два регистра используются для вывода: регистр состояния устройства и регистр данных. Два регистра используются для вывода: тоже регистр состояния устройства и регистр данных. Каждый из них имеет уникальный адрес. Если используется ввод-вывод с распределением памяти, все 4 регистра являются частью адресного пространства, и будут считываться и за­писываться с помощью обычных команд. В противном случае для чтения и записи регистров используются специальные команды ввода-вывода, например IN и ОUТ. В обоих случаях ввод-вывод осуществляется путем передачи данных и информации о состоянии устройства между центральным процессором и этими регистрами.



Рис. 5.19. Регистры устройств для простого терминала

Регистр состояния клавиатуры содержит 2 бита, которые используются, и 6 би­тов, которые не используются. Аппаратное обеспечение устанавливает самый ле­вый бит на I всякий раз, когда появляется символ. Если программное обеспечение ранее установило на I бит 6, то производится прерывание. В противном случае прерывания не происходит. При программируемом вводе-выводе для получения входных данных центральный процессор обычно находится в цикле, периодичес­ки считывая регистр состояния клавиатуры, пока бит 7 не примет значение I. Ко­гда это случается, программное обеспечение считывает буферный регистр клавиа­туры, чтобы получить символ.

Вывод осуществляется сходным образом. Чтобы написать символ на экране, программное обеспечение сначала считывает регистр состояния дисплея, чтобы узнать, установлен ли бит READY (бит готовности) на I. Если он не установлен, программное обеспечение проходит цикл снова и снова до тех пор, пока данный бит не примет значение 1. Это значит, что устройство готово принять символ. Как только терминал приходит в состояние готовности, программное обеспечение за­писывает символ в буферный регистр дисплея, который переносит символ на эк­ран и дает сигнал устройству установить бит готовности в регистре состояния дис­плея на 0. Когда символ уже отображен, а терминал готов к обработке следующего символа, бит READY снова устанавливается на 1 контроллером.

Основной недостаток программируемого ввода-вывода заключается в том, что центральный процессор проводит большую часть времени в цикле, ожидая готовно­сти устройства. Такой процесс называется активным ожиданием. Если центрально­му процессору больше ничего не нужно делать (например, в стиральной машине), в этом нет ничего страшного (хотя даже простому контроллеру часто нужно конт­ролировать несколько параллельных процессов). Но если процессору нужно вы­полнять еще какие-либо действия, например запускать другие программы, то ак­тивное ожидание здесь не подходит, и нужно искать другие методы ввода-вывода.

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

Ввод-вывод с управлением по прерываниям — это большой шаг вперед по срав­нению с программируемым вводом-выводом, но все же он далеко не совершенен. Дело в том, что прерывание требуется для каждого передаваемого символа. Следо­вательно, нужно каким-то образом избавиться от большинства прерываний.

Решение лежит в возвращении к программируемому вводу-выводу. Но только эту работу должен выполнять кто-то другой. Посмотрите на рис. 5.20. Мы добави­ли новую микросхему— контроллер прямого доступа к памяти (ПДП)с прямым доступом к шине.

Шина

Рис. 5.20. Система с контроллером прямого доступа к памяти

Микросхема ПДП имеет по крайней мере 4 регистра. Все они могут загружать­ся программным обеспечением, работающим на центральном процессоре. Первый регистр содержит адрес памяти, который нужно считать или записать. Второй ре­гистр содержит число, которое показывает количество передаваемых байтов или слов. Третий регистр содержит номер устройства или адрес устройства ввода-вы­вода, определяя, таким образом, какое именно устройство нам требуется. Четвер­тый регистр сообщает, должны ли данные считываться с устройства или записы­ваться на него.

Отметим, что если какое-нибудь высокоскоростное устройство, например диск, будет запускаться контроллером ПДП, то потребуется очень много циклов шины и для обращений к памяти, и для обращений к устройству. Во время этих циклов центральному процессору придется ждать (ПДП всегда имеет приоритет над цен­тральным процессором на доступ к шине, поскольку устройства ввода-вывода обыч­но не допускают задержек). Процесс отбирания контроллером ПДП циклов шины у центрального процессора называется захватом цикла. Но выигрыш в том, что не нужно обрабатывать одно прерывание при каждом передаваемом байте (слове), сильно перевешивает потери, происходящие из-за захвата циклов.

7. ^ Структура микропроцессора. Система команд процессора, CISC и RISC процессоры

Процессор состоит из нескольких частей. Блок управления отвечает за вызов команд из памяти и определение их типа. Арифметико-логическое устройство выполняет арифметические операции (например, сложение) и логические опера­ции (например, логическое И).

Внутри центрального процессора находится память для хранения промежуточ­ных результатов и некоторых команд управления. Эта память состоит из несколь­ких регистров, каждый из которых выполняет определенную функцию. Обычно все регистры одинакового размера. Каждый регистр содержит одно число, которое ограничивается размером регистра. Регистры считываются и записываются очень быстро, поскольку они находятся внутри центрального процессора.

Самый важный регистр — счетчик команд, который указывает, какую команду нужно выполнять дальше. Название «счетчик команд» не соответствует действитель­ности, поскольку он ничего не считает, но этот термин употребляется повсеместно. Еще есть регистр команд, в котором находится команда, выполняемая в данный момент. У большинства компьютеров имеются и другие регистры, одни из них мно­гофункциональны, другие выполняют только какие-либо специфические функции.

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

^ Команды перемещения данных

Копирование данных из одного места в другое — одна из самых распространенных операций. Под копированием мы понимаем создание нового объекта с точно та­ким же набором битов, как у исходного объекта. Такое понимание слова «переме­щение» несколько отличается от его обычного значения. Если мы говорим, что какой-то человек переместился из Нью-Йорка в Калифорнию, это не значит, что в Калифорнии была создана идентичная копия этого человека, а оригинал остался в Нью-Йорке. Когда мы говорим, что содержимое ячейки памяти 2000 перемести­лось в какой-либо регистр, мы всегда подразумеваем, что там была создана иден­тичная копия и что оригинал все еще находится в ячейке 2000. Команды переме­щения данных лучше было бы назвать командами дублирования данных, но термин «перемещение данных» уже устоялся.

Есть две причины, по которым данные могут копироваться из одною места в другое. Одна из них фундаментальна: присваивание переменным значений. Опе­рация присваивания А=В выполняется путем копирования значения, которое находится в ячейке памяти с адресом В, в ячейку А, поскольку программист приказал это сделать. Вторая причина копирования данных — предоставить возможность быстрого обращения к ним. Как мы уже видели, многие команды могут обращаться к переменным только в том случае, если они имеются в регистре. Поскольку существует дна возможных источника элемента данных (память и регистр) и существует два возможных пун­кта назначения для элемента данных (память и регистр), следовательно, существует 4 различных способа копирования. В одних компьютерах содержится 4 команды для 4 случаев, в других — одна команда для всех 4 случаев. Некоторые компьюте­ры используют команду LOAD для перемещения из памяти в регистр, команду STORE — для перемещения из регистра в память, команду MOVE — для перемещения из одно­го регистра в другой регистр, но не имеют никакой команды для копирования из одной части памяти в другую.

Команды перемещения данных должны как-то указывать, какое именно коли­чество данных нужно переместить. Существуют команды для перемещения разно­го количества данных — от одного бита до всей памяти. В машинах с фиксирован­ной длиной слова обычно перемещается ровно одно слово. Любые перемещения другого количества данных (больше слова или меньше слова) должны выполняться программным обеспечением с использованием сдвигов и слияний. Некоторые архитектуры команд дают возможность копировать отрезки данных размером мень­ше слова (они обычно измеряются в байтах), а также сразу несколько слов. Копи­рование нескольких слов рискованно, особенно если максимальное количество слов достаточно большое, поскольку такая операция может занять много времени и, возможно, ее придется прерывать в середине. Некоторые машины с изменяемой длиной слов содержат команды, которые определяют только адреса источника и места назначения, но не количество данных. Перемещение продолжается до тех пор, пока не появится специальное поле конца данных.

^ Бинарные операции

Бинарные операции — это такие операции, которые берут два операнда и получа­ют из них результат. Все архитектуры команд содержат команды для сложения и вычитания целых чисел. Команды умножения и деления целых чисел также име­ются практически во всех случаях. Думаю, нет необходимости объяснять, почему компьютеры оснащены арифметическими командами.

Следующая группа бинарных операций содержит булевы команды. Существу­ет 16 булевых функций от двух переменных, но есть очень немного машин, в кото­рых имеются команды для всех 16. Обычно присутствуют И, ИЛИ и НЕ; иногда кроме них еще есть ИСКЛЮЧАЮЩЕЕ ИЛИ, НЕ-ИЛИ и НЕ-И.

Важным применением команды И является выделение битов из слов. Рас­смотрим машину со словами длиной 32 бита, в которой на одно слово приходится четыре 8-битных символа. Предположим, что нужно отделить второй символ от остальных трех, чтобы его напечатать. Это значит, что нужно создать слово, кото­рое содержит этот символ в правых 8 битах с нулями в левых 24 битах (так называ­емое выравнивание по правому биту).

Чтобы извлечь нужный нам символ, слово, содержащее этот символ, соединя­ется операцией И с константой, которая называется маской. В результате этой операции все ненужные биты меняются на нули:

10110111 10111100 11011011 10001011 А

00000000 11111111 00000000 00000000 В (маска)

00000000 10111100 00000000 00000000 А И В

Затем результат сдвигается на 16 битов вправо, чтобы нужный символ нахо­дился в правом конце слова.

Важным применением команды ИЛИ является помещение битов в слово. Эта операция обратна операции извлечения. Чтобы изменить правые 8 битов 32-битно­го слова, не повредив при этом остальные 24 бита, сначала нежелательные 8 битов надо заменить на нули, а затем новый символ соединить операцией ИЛИ с полу­ченным результатом:

10110111 10111100 11011011 10001011А

11111111 11111111 11111111 00000000 В (маска)

10110111 10111100 11011011 00000000 А И В

00000000 00000000 00000000 01010111 С

10110111 10111100 11011011 01010111 (А И В) ИЛИ С.

Операция И убирает единицы, и в полученном результате никогда не бывает больше единиц, чем в любом из двух операндов. Операция ИЛИ вставляет едини­цы, и поэтому в полученном результате всегда по крайней мере столько же еди­ниц, сколько в операнде с большим количеством единиц. Команда ИСКЛЮЧАЮ­ЩЕЕ ИЛИ, в отличие от них, симметрична в отношении единиц и нулей. Такая симметрия иногда может быть полезной, например при порождении случайных чисел.

Большинство компьютеров сегодня поддерживают команды с плавающей точ­кой, которые в основном соответствуют арифметическим операциям с целыми числа­ми. Большинство машин содержит по крайней мере 2 варианта таких чисел: более короткие для скорости и более длинные на тот случай, если требуется высокая точ­ность вычислений.

^ Унарные операции

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

Команды для сдвига и циклического сдвига очень полезны. Они часто даются в нескольких вариантах. Сдвиги — это операции, при которых биты сдвигаются налево или направо, при этом биты, которые сдвигаются за пределы слова, утрачи­ваются. Циклические сдвиги — это сдвиги, при которых биты, вытесненные с од­ного конца, появляются на другом конце. Разница между обычным сдвигом и цик­лическим сдвигом показана ниже:

00000000 00000000 00000000 01110011 А

00000000 00000000 00000000 00011100 сдвиг вправо на 2 бита

11000000 00000000 00000000 00011100 циклический сдвиг вправо на 2 бита

Обычные и циклические сдвиги влево и вправо очень важны. Если n-битное слово циклически сдвигается влево на к битов, результат будет такой же, как при циклическом сдвиге вправо на n-k битов.

Сдвиги вправо часто выполняются с расширением по знаку. Это значит, что позиции, освободившиеся на левом конце слова, заполняются изначальным зна­ковым битом (0 или 1), как будто знаковый бит перетащили направо. Кроме того, это значит, что отрицательное число останется отрицательным. Ниже показаны сдвиги на 2 бита вправо:

1111111 11111111 11111111 11110000 А

0011111 11111111 11111111 11111100 А сдвинуто без знакового расширения

1111111 11111111 11111111 11111100 А сдвинуто со знаковым расширением

^ Операция сдвига используется при умножении и делении на 2. Если положи­тельное целое число сдвигается влево на к битов, результатом будет изначальное число, умноженное на Т. Если положительное целое число сдвигается вправо на к битов, результатом будет изначальное число, деленное на Т. Сдвиги могут использоваться для повышения скорости выполнения некото­рых арифметических операций. Рассмотрим выражение 18хn, где n — положитель­ное целое число. 18хn=16хn+2хn. 16хn можно получить путем сдвига копии n на 4 бита влево. 2хn можно получить, сдвинув n на 1 бит влево. Сумма этих двух чисел равна 18хn. Таким образом, это произведение можно вычислить путем од­ного перемещения, двух сдвигов и одного сложения, что обычно гораздо быстрее, чем сама операция умножения. Конечно, компилятор может применять такую схему, только если один из множителей является константой. Сдвиг отрицательных чисел даже со знаковым расширением дает совершенно другие результаты.

^ Операции циклического сдвига нужны для манипулирования последователь­ностями битов в словах. Если нужно проверить все биты в слове, при циклическом сдвиге слова последовательно по 1 биту каждый бит помещается в знаковый бит, где его можно легко проверить, а когда все биты проверены, можно восстановить изначальное значение слова. Операции циклического сдвига гораздо удобнее опе­раций обычного сдвига, поскольку при этом не теряется информация: произволь­ная операция циклического сдвига может быть отменена другой операцией цик­лического сдвига.

В некоторых бинарных операциях очень часто используются совершенно опре­деленные операнды, поэтому в архитектуры команд часто включаются унарные операции для их быстрого выполнения. Например, перемещение нуля в память или регистр чрезвычайно часто выполняется при начале вычислений. Перемеще­ние нуля — это особый случай команды перемещения данных. Поэтому для повы­шения производительности часто вводится операция с единственным адресом той ячейки, которую нужно очистить (то есть установить на 0).

Унарные и бинарные операции часто объединяются в группы по функциям, которые они выполняют, а вовсе не по числу операндов. В первую группу входят арифметические операции, в том числе операция отрицания. Во вторую группу входят логические операции и операции сдвига, поскольку эти две категории очень часто используются вместе для извлечения данных.

^ Сравнения и условные переходы

Практически все программы должны проверять свои данные и на основе результа­тов изменять последовательность команд, которые нужно выполнить. Рассмотрим функцию квадратного корня √х. Если число х отрицательное, процедура сообщает об ошибке; если число положительное, процедура вычисляет квадратный корень. Функция должна проверять х, а затем совершать переход в зависимости от того, положительно число х или отрицательно.

Это можно сделать с помощью специальных команд условного перехода, кото­рые проверяют какое-либо условие и совершают переход в определенный адрес памяти, если условие выполнено. Иногда определенный бит в команде указывает, нужно ли осуществлять переход в случае выполнения условия или в случае не­выполнения условия соответственно. Часто целевой адрес является не абсолют­ным, а относительным (он связан с текущей командой).

Самое распространенное условие, которое нужно проверить, — равен ли опре­деленный бит нулю или нет. Если команда проверяет знаковый бит числа и совер­шает переход к метке (LABEL) при условии, что бит равен 1, то если число было отрицательным, будут выполняться те утверждения, которые начинаются с метки LABEL, а если число было положительным или было равно 0, то будут выполнять­ся те утверждения, которые следуют за условным переходом.

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

В некоторых процессорах есть специальный разряд (бит) переноса, который принимает значение 1, если происходит перенос из самого левого бита (например, при сложении двух отрицательных чисел). Бит переноса нельзя путать с битом переполнения. Проверка бита переноса необходима для вычислений с повышен­ной точностью (то есть когда целое число представлено двумя или более словами). Проверка на ноль очень важна при выполнении циклов и в некоторых других случаях. Если бы все команды условного перехода проверяли только 1 бит, то то­гда для проверки определенного слова на 0 нужно было бы отдельно проверять каждый бит, чтобы убедиться, что ни один бит не равен 1. Чтобы избежать подоб­ной ситуации, во многие машины включается команда, которая должна проверять слово и осуществлять переход, если оно равно 0. Конечно же, это решение просто перекладывает ответственность на микроархитектуру. На практике аппаратное обеспечение обычно содержит регистр, все биты которого соединяются операцией ИЛИ, чтобы выдать на выходе один бит, по которому можно определить, содер­жит ли регистр биты, равные 1.

Операция сравнения слов или символов очень важна, например, при сортиров­ке. Чтобы произвести сравнение, требуется три адреса: два нужны для элементов данных, а в третий адрес будет совершаться переход в случае выполнения условия. В тех компьютерах, где форматы команд позволяют содержать три адреса в команде, проблем не возникает. Но если такие форматы не предусмотрены, нужно что-то сделать, чтобы обойти эту проблему.

Одно из возможных решений — ввести команду, которая выполняет сравнение и записывает результат в один или несколько битов условия. Следующая команда может проверить биты условия и совершить переход, если два сравниваемых зна­чения были равны, или неравны, или первое из них было больше второго и т. д. Такой подход применяется в Pentium.

В сравнении двух чисел есть некоторые тонкости. Сравнение — это не такая простая операция, как вычитание. Если очень большое положительно число срав­нивается с очень большим отрицательным числом, операция вычитания приведет к переполнению, поскольку результат вычитания не может быть представлен. Тем не менее, команда сравнения должна определить, удовлетворено ли условие, и воз­вратить правильный ответ. При сравнении не должно быть переполнений.

Кроме того, при сравнении чисел нужно решить, считаются ли числа числами со знаком или числами без знака. Трехбитные бинарные числа можно упорядо­чить двумя способами. От самого маленького к самому большому:

Без знака

Со знаком

000

100 (самое маленькое)

001

101

010

110

011

111

100

000

101

001

11О

010

111

011 (самое большое)

В колонке слева приведены положительные числа от 0 до 7 по возрастанию. В колонке справа показаны целые числа со знаком от -4 до +3 в дополнительном двоичном коде. Ответ на вопрос: «Какое число больше: 011 или 100?» зависит от того, считаются ли числа числами со знаком. В большинстве архитектур есть ко­манды для обращения с обоими типами упорядочения.

^ Команды вызова процедур

Процедура — это группа команд, которая выполняет определенную задачу и кото­рую можно вызвать из нескольких мест программы. Вместо термина процедура часто используется термин подпрограмма, особенно когда речь идет о программах на языке ассемблера. Когда процедура закончила задачу, она должна вернуться к соответствующему оператору. Следовательно, адрес возврата должен как-то пере­даваться процедуре или сохраняться где-либо таким образом, чтобы можно было определить местонахождение после завершения задачи.

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

Более удачное решение — сохранить адрес возврата в первом слове процедуры. Тогда первой выполняемой командой будет второе слово процедуры. После завер­шения процедуры происходит переход к первому слову, а если аппаратное обеспе­чение в первом слове наряду с адресом возврата дает код операции, то происходит непосредственный переход к этой операции. Процедура может вызывать другие процедуры, поскольку в каждой процедуре имеется пространство для одного адре­са возврата. Но если процедура вызывает сама себя, эта схема не работает, поскольку первый адрес возврата будет уничтожен вторым вызовом. Способность процеду­ры вызывать саму себя, называемая рекурсией, очень важна и для теоретиков, и для практиков. Более того, если процедура А вызывает процедуру В, процедура В вызывает процедуру С, а процедура С вызывает процедуру А (непосредственная или цепочечная рекурсия), эта схема сохранения адреса возврата также не работает.

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

Самое лучшее решение — поместить адрес возврата в стек. Когда процедура завершена, она выталкивает адрес возврата из стека. При такой форме вызова про­цедур рекурсия не порождает никаких проблем; адрес возврата будет автоматичес­ки сохраняться таким образом, чтобы избежать уничтожения предыдущего адреса возврата.

^ Управление циклом

Часто возникает необходимость выполнять некоторую группу команд фиксиро­ванное количество раз, поэтому некоторые машины содержат команды для облег­чения этого процесса. Все эти схемы содержат счетчик, который увеличивается или уменьшается на какую-либо константу каждый раз при выполнении цикла. Кроме того, этот счетчик каждый раз проверяется. При выполнении определенно­го условия цикл завершается.

Определенная процедура запускает счетчик вне цикла и затем сразу начинает выполнение цикла. Последняя команда цикла обновляет счетчик, и если условие завершения цикла еще не выполнено, то происходит возврат к первой команде цикла. Если условие выполнено, цикл завершается и начинается выполнение команды, идущей сразу после цикла.


^ Команды процессора Pentium II

Команды перемещения

MOV DST, SRC

Перемещает SRC в DST

PUSH SRC

Помещает SRC в стек

POP DST

Выталкивает слово из стека и помещает его в DST

XCHGDS1.DS2

Меняет местами DS1 и DS2

LEA DST, SRC

Загружает действительный адрес SRC в DST

CMOV DST, SRC

Условное перемещение

Арифметические команды

ADD DST, SRC

Складывает SRC и DST

SUB DST, SRC

Вычитает SRC из DST

MUL SRC

Умножает ЕАХ на SRC (без знака)

IMUL SRC

Умножает ЕАХ на SRC (со знаком)

DIV SRC

Делит EDX:EAX на SRC (без знака)

IDV SRC

Делит EDX:EAX на SRC (со знаком)

ADC DST, SRC

Складывает SRC с DST и прибавляет бит переноса

SBB DST, SRC

Вычитает DST и переносит из SRC

INC DST

Прибавляет 1 к DST

DEC DST

Вычитает 1 из DST

NEG DST

Отрицает DST (вычитает DST из 0)

Двоично-десятичные команды

DAA

Десятичная коррекция

DAS

Десятичная коррекция для вычитания

AAA

Коррекция кода ASCII для сложения

AAS

Коррекция кода ASCII для вычитания

ААМ

Коррекция кода ASCII для умножения

AAD

Коррекция кода ASCII для деления

Логические команды

AND DST, SRC

Логическая операция И над SRC и DST

OR DST, SRC

Логическая операция ИЛИ над SRC и DST

XOR DST, SRC

Логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ над SRC и DST

NOT DST

Замещение DST дополнением до 1

Команды сдвига/циклического сдвига

^ SAL/SAR DST, #

Сдвиг DST влево/вправо на # битов

SHL/SHRDST, #

Логический сдвиг DST влево/вправо на # битов

^ ROL/ROR DST, #

Циклический сдвиг DST влево/вправо на # битов

ROL/ROR DST, #

Циклический сдвиг DST по переносу на # битов

Команды тестирования/сравнения

TSTSRC1.SRC2

Операнды логической операции И, установка флагов

CMPSRC1.SRC2

Установка флагов на основе вычитания SRC1-SRC2

Команды передачи управления

JMPADDR

Переход к адресу

JxxADDR

Условные переходы на основе флагов

CALL ADDR

Вызов процедуры по адресу

RET

Выход из процедуры

IRET

Выход из прерывания

LOOPxx

Продолжает цикл до удовлетворения определенного условия

INT ADDR

Инициирует программное прерывание

INTO

Совершает прерывание, если установлен бит переполнения

Команды для операций над цепочками

LODS

Загружает цепочку

STOS

Сохраняет цепочку

MOVS

Перемещает цепочку

CMPS

Сравнивает две цепочки

SCAS

Сканирование цепочки

estestvenno-matematicheskie-i-tehnicheskie-nauki-byulleten-novih-postuplenij-iyul-sentyabr-2008-g.html
estestvenno-matematicheskie-nauki-tehnika-barr-s-rossipi-golovolomok-tekst-stiven-barr-per-s-angl-yu-n-sudareva-m-mir-1987-415-s.html
estestvenno-nauchnaya-osnova-fizicheskoj-kulturi.html
estestvenno-pravovaya-teoriya-po-dzhonu-lokku.html
estestvenno-tehnicheskie-nauki-informacionnij-byulleten-53-konkursi-granti-konferencii-fevral-2010g.html
estestvenno-yazikovie-modeli-i-obobshennie-ogranicheniya-v-zadachah-upravleniya-manipulyacionnimi-robotami.html
  • bukva.bystrickaya.ru/organizaciya-sistemi-adaptacii-novih-sotrudnikov.html
  • literatura.bystrickaya.ru/reshenie-po-rezultatam-rassmotreniya-zhalobi-na-dejstviya-aukcionnoj-komissii-gosudarstvennoj-sluzhbi-chuvashskoj.html
  • occupation.bystrickaya.ru/mezhdunarodnij-toplivno-energeticheskij-forum.html
  • zanyatie.bystrickaya.ru/nalichie-koncepcii-i-programmi-informatizacii-municipalnih-obrazovanij.html
  • tasks.bystrickaya.ru/134spisok-literaturi-13-0predlozheniya-po-organizacii-i-vedeniyu-ekologicheskogo-monitoringa.html
  • kolledzh.bystrickaya.ru/analiz-finansovogo-krizisa-sentyabrya-2008-g-v-rossii.html
  • zanyatie.bystrickaya.ru/proschyoti-pri-zaklyuchenii-sdelok.html
  • college.bystrickaya.ru/1155-va-kazantsev-ab-bogomolov-2009-herald-of-the-mechnikov-saint-petersburg-state-medical-academy.html
  • lektsiya.bystrickaya.ru/postanovlenie-pravitelstva-rf-ot-15-dekabrya-2007-g-872-o-sozdanii-i-regulirovanii-deyatelnosti-federalnih-kazennih-predpriyatij.html
  • pisat.bystrickaya.ru/tairibi-aji-aashini-erekshelg-men-pajdasi.html
  • college.bystrickaya.ru/03-obzor-istochnikov-diplomnaya-rabota.html
  • pisat.bystrickaya.ru/sudbi-v-proizvedenii.html
  • holiday.bystrickaya.ru/o-kursah-povisheniya-kvalifikacii-trenerov-prepodavatelej-sekcij-po-armsportu.html
  • report.bystrickaya.ru/ispolzovanie-muziki-m-rabiger-rezhissura-dokumentalnogo-kino-i-postprodakshn.html
  • school.bystrickaya.ru/kak-zarozhdalis-i-izmenyalis-osnovnie-vidi-upakovki.html
  • studies.bystrickaya.ru/lekciya-doktora-rata-dr-rath-ot-31-oktyabrya-2004-g.html
  • shpargalka.bystrickaya.ru/vashego-resheniya-bistro-zafiksirovat-ubitok-ili-bilo-chto-to-eshe-redaktor-a-dzyura-shzz-shvager-dzh-d-novie-magi.html
  • reading.bystrickaya.ru/mehatronika-avtomatizaciya-upravlenie-mau-2010.html
  • reading.bystrickaya.ru/marsh-i-vstrechnij-boj-taktika-v-boevih-primerah.html
  • zanyatie.bystrickaya.ru/shojgu-ozhidaet-povtornih-zemletryasenij-v-regionah-sibiri-informacionnoe-agentstvo-rosbalt-18022012.html
  • kontrolnaya.bystrickaya.ru/raspisanie-gruppi-eu231-specialnost-ekonomika-i-upravlenie-na-predpriyatii.html
  • pisat.bystrickaya.ru/teatralizovannaya-muzikalno-literaturnaya-viktorina.html
  • holiday.bystrickaya.ru/novosti-obrazovaniya-i-nauki-hronika-mapryal-vi-mezhdunarodnaya-nauchnaya-konferenciya-yazik-i-socium-belarus-3-4-dekabrya-2004g.html
  • composition.bystrickaya.ru/pechat-logosa-kniga-pervaya.html
  • obrazovanie.bystrickaya.ru/programma-disciplini-obshaya-psihologiya-dlya-napravleniya-030100-62-filosofiya-podgotovki-bakalavra-avtor-kuznecova-m-d.html
  • uchit.bystrickaya.ru/testi-russkaya-muzika-do-18-veka-uchebno-metodicheskij-kompleks-disciplini-federalnoe-agentstvo-po-obrazovaniyu.html
  • upbringing.bystrickaya.ru/mechta-raziskivaet-put.html
  • uchitel.bystrickaya.ru/rabochaya-programma-disciplini-specializacii-tehnohimicheskij-kontrol-hlebopekarnogo-makaronnogo-i-konditerskogo-proizvodstv.html
  • crib.bystrickaya.ru/i-i-rozhdestvenskij-yu-v-obshaya-filologiya.html
  • kolledzh.bystrickaya.ru/annotaciya-osnovnaya-obrazovatelnaya-programma-visshego-professionalnogo-obrazovaniya-napravlenie-podgotovki-080200-menedzhment.html
  • studies.bystrickaya.ru/422-protokoli-mnozhestvennogo-dostupa-s-obnaruzheniem-nesushej-kurs-kompyuternie-seti-glava-mas-poduroven-dostup.html
  • textbook.bystrickaya.ru/i-k-voprosu-o-regeneratornih-vozmozhnostyah-miokarda-mlekopitayushih.html
  • abstract.bystrickaya.ru/14-organizaciya-itogovogo-kontrolya-znanij-uchebno-metodicheskij-kompleks-po-discipline-osobie-proizvodstva-v-rossijskom.html
  • esse.bystrickaya.ru/rabochaya-programma-po-discipline-b-transportnaya-energetika.html
  • credit.bystrickaya.ru/osnovnaya-obrazovatelnaya-programma-podgotovki-specialista-po-specialnosti-specialnostyam-050716-00-specialnaya-psihologiya-s-dop-spec-logopediya-05-07-15-00-logopediya.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.