Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВЫЧИСЛИТЕЛЬНЫЕ МАШИНЫ, СИСТЕМЫ И СЕТИ.doc
Скачиваний:
32
Добавлен:
06.11.2018
Размер:
2.94 Mб
Скачать

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.