4) SHLD, SHRD ‑ сдвиг двойного слова. Разновидность логического сдвига, при которой освобождающиеся позиции заполняются содержимым операнда-источника. Таким образом, эти команды имеют три параметра: сдвигаемый приемник, неподвижный источник и количество сдвигов.
3. Проверки и передача управления.
Команды этой группы,
используемые совместно, позволяют реализовать конструкции вида
IF условие {операторы}.
В этой конструкции операторы выполняются лишь в том случае, если истинно
заданное условие.
Для реализации таких конструкций используется сначала команда проверки, которая
изменяет состояние флагов в регистре [E]FLAGS. Затем
используется команда условного ветвления, которая нарушает естественный порядок
следования команд (загружает новое значение в счетчик команд), если выполнено
указанное условие (т.е. имеется заданное сочетание состояний флагов).
3.1. Команды проверки и сравнения
TEST - проверка отдельных битов операнда на знак и на равенство нулю. Эта команда может быть отнесена как в данную группу, так и в группу команд побитовых операций (что и сделано).
CMP - сравнение операндов путем вычитания. Результат вызывает изменение признаков (флагов), а затем теряется.
Строковые (блочные, цепочечные) команды сравнения.
CMPS – сравнение строк и изменение флагов по результату сравнения.
SCAS – сканирование строки – сравнение элементов строки с содержимым регистра AL или AX или EAX и изменение флагов по результату сравнения.
3.2. Команды условного ветвления.
Jсс (jump conditional). Их в системе команд х86.‑ (формально, по Intel Architecture Software Developer’s Manual, Volume 2, стр. 271 по сквозной нумерации)) – 63 штуки.
Мнемонические обозначения команд условного ветвления содержат сокращения анализируемых условий. Для простых условий используются те же обозначения, что и для флагов: jc – ветвление, если флаг cf установлен, jnz – ветвление, если флаг zf не установлен.
Для сложных
условий ‑ «больше», «больше или равно» «меньше или равно», «меньше» ‑
используются сокращения:
‑ от слов greater – «больше» и less – меньше ‑ при сравнениях
целочисленных операндов со знаком, и
‑ от слов above – «выше» (в смысле «больше») и below – «ниже» (в смысле «меньше») – при
сравнении беззнаковых операндов.
Условия, анализируемые командами условного ветвления уже были рассмотрены в разделе «Представление целых чисел».
Эти условия для можно разделить на три группы:
1) Ветвления по простым условиям. Для большинства процессоров в эту группу входят команды, анализирующие состояние «установлен» или «очищен» каждого из четырех основных флагов: – соответственно 8 команд. В регистре состояний процессоров х86 имеется еще флаг «четность» (parity, pf).
2) Ветвления по результату сравнения беззнаковых чисел (четыре условия: «больше», «больше или равно» «меньше или равно», «меньше»). Для удобства программиста, для каждой из команд имеется два альтернативных обозначения – итого 8 мнемоник).
3) Ветвления по результату сравнения чисел со знаком (четыре условия каждая команда имеет два альтернативных обозначения – итого 8 мнемоник).
Таблица команд условного ветвления для процессоров х86.
4) Кроме того имеется группа команд ветвления по содержимому регистра (E)CX.
Адресация в командах ветвления может быть относительная (со знаковым смещением 8 бит, либо 16 бит, либо 32 бит )
3.3. Команда организации цикла LOOP* позволяет организовать программный цикл с аппаратным счетчиком в регистре [e]cx. Мало используется, так как затруднительно организовывать вложенные циклы.
3.4. Команда безусловной передачи управления JMP. Имеет 9 вариантов адресации.
3.5. Команды поддержки модульной структуры программ
CALL вызов процедуры. Адресация в командах jmp и call делается такой, чтобы можно было "прыгнуть" в любое место программной памяти ("длинная" адресация). Call имеет 8 вариантов адресации, jmp имеет 9 вариантов адресации.
ENTER формирование стекового кадра.
LEAVE освобождение стекового кадра
RET возврат из процедуры
. (Более детально команды поддержки модульной структуры рассмотрены в разделе «Управление вычислительным процессом»)
При обращении / возврате надо обеспечить:
а) передачу управления в любое место памяти, поэтому "длинная" адресация;
б) возврат в то место, откуда был вызов (т.е. место вызова должно автоматически запоминаться)
в) запоминание промежуточных результатов, имеющихся к моменту вызова (содержимое регистров процессора, а при рекурсивном вызове процедуры надо запоминать и промежуточные результаты работы самой процедуры). Для запоминания всего этого чаще всего используется стек (участок ОЗУ или специальное ОЗУ со стековой адресацией). Часть вышеперечисленной информации запоминается автоматически при выполнении команды CALL, а сохранение оставшегося - дело программиста.
4. Команды ввода – вывода (обмена с периферийными устройствами[1]).
Фактически, команды это тоже команды пересылки. Основное отличие между пересылками «регистр-память» и пересылками из/в периферийное устройство ПУ состоит в том, что скорость функционирования ПУ может существенно отличаться от скорости работы процессора, и поэтому ПУ далеко не всегда бывает готово к обмену.
В системах на базе процессоров х86 регистры периферийных устройств имеют свою систему нумерации (адресации), адресное пространство ввода-вывода полностью изолировано от других адресных пространств и имеет размер 64 кБайт. Для обмена в системе команд есть две команды:
IN - команда ввода из ВНУ
OUT - команда вывода на ВНУ
Адресация в этих командах может быть абсолютной (номер порта в пределах от 000 до 255 указывается прямо в команде) или косвенно-регистровой, в качестве адресного регистра всегда используется регистр DX.
Строковые команды ввода вывода позволяют одной командой инициировать обмен цепочкой элементов (байтов, слов, двойных слов) с периферийным устройством.
INSB / INSW /INSD - команда ввода цепочки элементов из порта периферийного устройства,
OUTSB / OUTSW / OUTSD - команда вывода цепочки элементов в порт периферийного устройства.
4. Команды плавающей арифметики
Включают более 80 команд, работающих с вещественными числами
5. Набор дополнительных команд MMX (Math and Matrix eXtention)
Включает более 70 команд, реализующих идеологию SIMD – Single Instruction ‑ Multiple Data, позволяющих одной командой выполнить действие над несколькими целочисленными операндами (длиной 8 или 16 или 32 бита), упакованными в одно 64-битовое слово.
6. Набор дополнительных команд XMM
Включает 70 команд, реализующих идеологию SIMD – Single Instruction ‑ Multiple Data, позволяющих одной командой выполнить действие над несколькими вещественными операндами (длиной 32 бита), упакованными в одно 128-битовое слово.
7. Системные команды ( команды управления процессором )
[1] Периферийным устройством будем называть любое устройство, внешнее, по отношению к «вычислительному ядру» (т.е. к совокупности «процессор – основная память).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.