- •Вычислительные машины, системы и сети
- •Оглавление
- •Введение
- •Раздел 1. Центральный процессор
- •1.1. Архитектура центрального процессора
- •1.2. Организация памяти и способы адресации
- •1.3. Общая характеристика системы команд
- •1.4. Команды пересылки данных
- •1.5. Арифметические команды
- •1.6. Сдвиги и логические команды
- •1.7. Команды обработки строк данных
- •1.8. Команды передачи управления
- •1.9. Команды управления процессором
- •Раздел 2. Арифметический процессор
- •2.1. Архитектура арифметического процессора
- •2.2. Программная модель арифметического процессора
- •2.3. Система команд арифметического процессора
- •Раздел 3. Эволюция характеристик цп
- •3.1. Архитектура цп Pentium
- •3.2. Программная модель цп Pentium
- •3.3. Система команд ммх-расширения
- •3.4. Система команд sse-расширения
- •Раздел 4. Системные устройства вм
- •4.1. Программируемый контроллер прерываний
- •4.2. Программируемый контроллер пдп
- •4.3. Системный таймер
- •4.4. Системные регистры
- •Раздел 5. Защищенный режим работы вм
- •5.1. Максимальный режим работы цп
- •5.2. Дескрипторы и шлюзы
- •Контрольные вопросы
- •Раздел 6. Язык ассемблера
- •6.1. Программирование на языке ассемблера
- •6.2. Директивы языка ассемблера asm-86
- •6.3. Использование регистров Pentium
- •6.4. Директивы языка ассемблера asm-89
- •6.5. Модели программ, компиляция и отладка
- •Контрольные вопросы
- •Раздел 7. Специфика вычислительных систем
- •7.1. Мультипроцессорные системы
- •7.2. Управление процессами
- •7.3. Семафорные операции
- •7.4. Разделение общих процедур
- •7.5. Управление памятью
- •Контрольные вопросы
- •Раздел 8. Специализированные процессоры и вм
- •8.1. Процессор ввода-вывода
- •8.2. Программная модель процессора ввода-вывода
- •8.3. Система команд процессора ввода-вывода
- •8.4. Процессор операционной системы
- •Контрольные вопросы
- •Раздел 9. Назначение и топология сетей
- •9.1. Особенности и назначение сетей различных типов
- •Топология «звезда».
- •9.2. Кодирование информации
- •9.3. Назначение и структура пакетов
- •9.4. Методы управления обменом
- •9.5. Эталонные модели
- •Контрольные вопросы
- •Раздел 10. Практическая реализация сетей
- •10.1. Адресация в сетях
- •10.2. Основные службы Internet
- •10.3. Особенности web-дизайна
- •10.4. Особенности и тенденции развития Internet
- •Контрольные вопросы
- •Глоссарий
- •Литература
1.3. Общая характеристика системы команд
Для удобства рассмотрения систему команд ЦП разбивают на шесть групп: команды пересылки данных, арифметические команды, логические команды и сдвиги, команды анализа и преобразования строк, команды передачи управления и команды управления микропроцессором. При изучении системы команд целесообразно пользоваться мнемокодом, т. е. символическим обозначением кода операции, и для каждого мнемокода давать набор всех форматов, определяющих различные способы его использования в программах.
В ряде случаев, особенно при разработке программного обеспечения для систем реального времени, важным является время выполнения той или иной программы, поэтому для каждой команды указывается число тактов n, требуемых для ее выполнения. Поскольку один и тот же формат команды может быть использован для задания различных способов адресации и, следовательно, различных способов вычисления исполнительного адреса ЕА (см. 1.2), то время выполнения такой команды будет равно n + Ta, где Ta - время, необходимое для вычисления исполнительного адреса. Конкретное значение Ta зависит от используемого способа адресации, расположения 16-разрядного операнда в памяти (с четного или нечетного адреса) и наличия или отсутствия префикса замены сегмента. Для определения Ta могут быть использованы следующие данные (способ адресации – число тактов):
Прямая с 16-разрядным смещением - 6
По базе или с индексированием - 5
По базе или с индексированием при наличии константы смещения - 9
По базе с индексирование - 7
По базе с индексированием при наличии константы смещения - 11
Здесь приведены значения Ta для 8- или 16-разрядных операндов, расположенных по четным адресам. Если 16-разрядный операнд расположен с нечетного адреса, то к указанному выше значению времени следует прибавить еще четыре такта, а в случае использования префикса замены сегмента добавляется еще два такта.
1.4. Команды пересылки данных
Различают четыре типа пересылок: общего назначения, с участием аккумулятора, адреса операнда и флагов. Ни одна из команд этой группы не влияет на флаги, за исключением двух команд, которые осуществляют явную загрузку регистра флагов F.
Пересылки общего назначения. Задаются с помощью четырех мнемокодов: MOV (переслать), PUSH (занести в стек), POP (извлечь из стека) и XCHG (обменять).
Команда MOV осуществляет пересылку байта или слова из источника в место назначения. В качестве источника и места назначения может служить регистр, память или сегментный регистр. Кроме того, источником могут являться данные (константы), непосредственно представленные в формате команды. Команда MOV часто используется в программах, что является одной из причин существования достаточно большого числа ее форматов. Выбор подходящего формата в определенной степени может оптимизировать программу по времени ее выполнения.
Команда PUSH служит для занесения содержимого 16-разрядного источника в стек. Источником операнда может являться регистр, сегментный регистр или память. Выполнению команды предшествует формирование адреса вершины стека: (SP) = (SP) – 2.
Команда POP служит для извлечения 16-разрядного операнда из стека и пересылки его в регистр, память или сегментный регистр. Операция извлечения из стека завершается формированием нового адреса вершины стека (SP) = (SP) + 2.
Команда XCHG вызывает обмен байтами или словами между источниками. В качестве источников могут служить регистры и память. Команда имеет всего два формата, поскольку сегментные регистры не могут использоваться при обмене.
Пересылки с участием аккумулятора. Состоят из трех команд: IN (ввод), OUT (вывод) и XLAT (трансляция). В отличие от рассмотренных выше пересылок общего типа эти команды обязательно используют аккумулятор в качестве источника или места назначения операнда.
Команда IN служит для пересылки данных (байта или слова) из порта ввода в аккумулятор (в AL или АХ). Номер порта ввода может быть задан как непосредственно, во втором байте команды, так и косвенно, в регистре DX, причем только регистр DX из всех РОН может использоваться для этой цели. Если первый формат команды ввода позволяет адресоваться к 256 портам, то второй - к 216 = 65536 портам. Косвенное задание порта хотя и требует предварительной загрузки его номера в DX, однако позволяет организовывать программные циклы, в которых используется изменяющийся номер портов ввода.
Команда OUT служит для пересылки данных (байта или слова) из аккумулятора (из AL или АХ) в порт вывода. Эта команда, как и команда IN, имеет два формата, которые определяют способ адресации порта вывода. Преимущества и недостатки использования каждого из форматов определяются теми же соображениями, что и для команды IN.
Команда XLAT осуществляет табличное преобразование кодов. Таблица размером не более 256 байт размещается в памяти, а ее начальный адрес - в регистре ВХ. При выполнении этой команды содержимое AL используется в качестве относительного адреса строки таблицы, из которой байт пересылается в AL.
Пересылки адреса операнда. Включают три команды: LEA (загрузить исполнительный адрес), LDS (загрузить указатель в DS) и LES (загрузить указатель в ES). Эти команды служат средством управления механизмом адресации операндов.
По команде LEA извлекается не сам операнд, а его исполнительный адрес ЕА. Действие команды состоит в передаче вычисленного 16-разрядного адреса операнда в 16-разрядный регистр, код которого указан в поле reg. Использование команды LEA удобно при составлении подпрограмм, работающих с параметрами. В этом случае перед вызовом подпрограммы выделенный регистр загружается адресом переменной, которая предварительно записана в память в качестве параметра. Например, подпрограмма оперирует с параметром, адрес которого содержится в РОН ВХ. Если перед вызовом этой подпрограммы выполнить команду LEA BX, ALPHA, где ALPHA - имя ячейки памяти, содержащей переменную, то подпрограмма будет использовать в качестве параметра переменную из ячейки ALPHA. Если же перед вызовом подпрограммы выполнить команду LEA BX, BETA, то в качестве значения параметра подпрограмма будет использовать значение переменной из ячейки с именем BETA.
Команды LDS и LES используются, в основном, при обращении к данным, находящимся вне текущих сегментов DS или ES, так, что возникает необходимость изменить базовый адрес сегмента. Пара 16-разрядных адресов - база сегмента и смещение в сегменте, называемая указателем, предварительно загружается в память. Относительный адрес указателя определяется значениями полей mod и r/т постбайта команды LDS (или LES). Значение смещения содержится в двух первых байтах указателя, а базовый адрес сегмента - в третьем и четвертом байтах. По команде LDS (или LES) происходит обращение к указателю и осуществляется загрузка регистра DS (или ES) базовым адресом, а смещение пересылается в регистр, указанный полем reg постбайта команды.
Пересылки флагов. Включают четыре однобайтовые команды: LAHF (загрузить АН флагами), SAHF (запомнить АН в регистре F), PUSH F (занести F в стек) и POP F (извлечь из стека в F).
По команде LAHF осуществляется пересылка младшего байта регистра флагов F в АН, а по команде SAHF - обратная пересылка. Эти команды введены в систему команд ЦП для упрощения программной совместимости с ВМ80. В частности, без их использования для реализации команд PUSH PSW и POP PSW BM80 с помощью команд ЦП потребовалось бы по 9 байт памяти, а использование, например, команды LAHF позволяет при реализации команды PUSH PSW обойтись всего двумя байтами: LAHF, PUSH AX. Команда PUSHF помещает содержимое регистра F в стек, причем сначала записывается старший байт, а затем младший байт регистра F.