
- •Замковец с.В. Левин н.А. Попкова е.Я. Архитетура микропроцессоров
- •Удк 681.3.06
- •Классификация микропроцессоров по архитектуре
- •Архитектура микропроцессоров 80х86
- •2.1. Используемые типы данных
- •2.2. Регистры микропроцессоров
- •2.3. Режимы адресации
- •2.4. Управление стеками
- •2.5. Сегментная организация памяти
- •Система команд микропроцессоров
- •3.2.Команды передачи данных
- •Команды двоичной арифметики
- •Команды десятичной арифметики
- •Логические команды
- •Команды сдвигов
- •Команды обработки бит и байт
- •Команды обработки цепочек
- •Команды передачи управления
- •3.9.1. Команды условных переходов
- •3.9.2 Команды безусловных переходов
- •3.9.3 Команды вызова подпрограмм
- •3.9.4 Команды возврата из подпрограмм
- •4. Прерывания
- •4.1. Прерывания в реальном режиме
- •Защита по привилегиям
- •5.1. Определение уровней привилегий
- •Вычисления с плавающей запятой
- •6.1. Форматы чисел с плавающей запятой
- •6.3. Регистры сопроцессора
- •Mmx архитектура
- •7.1. Форматы представления данных
- •7.2. Арифметика с насыщением
- •7.3. Mmx регистры
- •7.4. Система команд mmx
- •1. Классификация микропроцессоров по архитектуре ... 8
- •2. Архитектура микропроцессоров 80х86 ………………...10
Команды обработки бит и байт
В систему команд микропроцессоров семейства Intel, начиная с процессора i486, введены две подгруппы эффективных команд манипуляций двоичными или битовыми цепочками, т.е. последовательностями бит. Такие последовательности, как типы данных, широко применяются в компьютерной графике.
Команда проверки бита BT (bit test) выбирает определенный разряд в двоичной цепочке и передает его значение во флаг переноса CF. Общее представление этой команды имеет следующий вид:
BT dst, index
В этом представлении операнд dst задает адресуемую цепочку, а index выбирает конкретный разряд в цепочке. Данная команда имеет формат:
BT reg/mem16, reg16;
BT reg,mem32, reg32;
BT reg/mem16, imm8;
BT reg/mem32, imm8.
Как видно из этих форматов операнд dst определяет слово или двойное слово в регистре или ячейке памяти, а значение index находится в регистре или задается как непосредственный операнд. Когда index определен как константа, его диапазон составляет от от 0 до 31. Если dst определяет ячейку памяти, то значение index в регистре считается знаковым целым числом.
На эту команду похожи команды проверки и инвертирования разряда BTC, проверки и установки разряда BTS и проверки и сброса разряда BTR, которые дополнительно к действию команды BT осуществляют инвертирование, установку в 1 и сброс в 0 выбранного разряда. Форматы этих трех команд одинаковы с форматом описанной команды BT.
Две команды сканирования разрядов вперед BSF и сканирования разрядов назад предназначены для поиска в слове или двойном слове позиции первого единичного разряда. Эти команды имеют следующее общее представление:
BSx dst, src
В этом представлении операнд dst должен быть 16- или 32-разрядным регистром, а операнд src может быть регистром или ячейкой памяти:
BSx reg16, reg/mem16;
BSx reg32, reg/mem32.
При выполнении команды BSF операнд src просматривается с младших, а в команде BSR – со старших разрядов. Номер разряда первого встреченного бита (беззнаковое смещение относительно нулевого разряда), находящегося в единице, помещается в регистр dst. Если операнд src нулевой, то флаг ZF устанавливается в единицу, а выполнение команды заканчивается.
Команды обработки цепочек
Под цепочкой понимается последовательность контекстно-связанных байт, слов или двойных слов, находящихся в соседних ячейках памяти. В системе команд данного микропроцессора имеется пять команд, предназначенных для обработки одного элемента цепочки и автоматического продвижения на следующий элемент. Таким цепочечным командам может предшествовать префикс повторения REP, который вызывает повторное действие команды над следующим элементом. Благодаря использованию такого префикса цепочки обрабатываются значительно быстрее, чем при организации программного цикла. Повторение рассчитано на максимальную длину цепочек 64 Кбайт и может заканчиваться по нескольким условиям.
Команды могут определять цепочку-источник src, цепочку-приемник dst или то и другое одновременно. Подразумевается, что цепочка-источник по умолчанию находится в текущем сегменте данных, который определяется сегментным регистром DS, но допускается замена этого сегмента. Цепочка-приемник должна находиться только в дополнительном сегменте данных, который определяется регистром ES, и замена этого сегмента не допускается. Для указания смещения текущего элемента цепочки-источника используется содержимое регистра ESI/SI, а для указания смещения текущего элемента цепочки-приемника - содержимое регистра EDI/DI. Эти регистры необходимо перед выполнением цепочечной команды соответственно инициализировать, для чего обычно используются команды загрузки адресов LEA, LDS и LES.
При выполнении цепочечной команды содержимое регистров ESI/SI и EDI/DI автоматически модифицируется таким образом, чтобы адресовать следующие элементы цепочек. Флаг направления DF определяет автоинкремент (DF=0) или автодекремент (DF=1) индексных регистров. Величина инкремента/декремента зависит от размера элемента и составляет 1, 2 или 4, когда элементами цепочек являются, соответственно, байты, слова или двойные слова.
Если команде предшествует префикс повторения, то после каждого выполнения этой команды производится декремент регистра-счетчика ECX/CX, поэтому счетчик необходимо предварительно инициализировать на требуемое число повторений. Когда содержимое регистра ECX/CX достигнет нуля, управление передается следующей по порядку команде.
Префикс повторения имеет пять мнемокодов REP, REPE, REPZ, REPNE и REPNZ, однако они определяют только два объектных кода префикса и введены для лучшей передачи содержательного смысла команды.
Префикс REP используется с командами MOVS и STOS, которые не воздействуют на флаги. Этот префикс означает “повторять, пока не достигнут конец цепочки”, т.е. до тех пор, пока содержимое регистра ECX/CX не достигнет нуля. Префиксы REPE/REPZ действуют одинаково и применяются с командами CMPS и SCAS и учитывают состояние флага ZF, на который воздействуют эти команды: операция повторяется, если ECX/CX не равен 0 и ZF=1. Префиксы REPNE/REPNZ действуют аналогично предыдущим, но для повторения операции требуется ненулевое состояние счетчика ECX/CX и ZF=0.
Команда передачи цепочки MOVS имеет следующее общее представление:
movs dst, src.
Эта команда осуществляет передачу байта, слова или двойного слова из цепочки src, адресуемой регистрами DS:[ESI/SI], в цепочку, адресуемую регистрами ES:[EDI/DI], и корректирует указатели ESI/SI и EDI/DI для адресации следующих элементов цепочек. При использовании префикса повторения REP эта команда осуществляет блоковую передачу память - память. Эта команда допускает явную спецификацию размера элементов в цепочке в мнемониках Ассемблера MOVSB (байт), MOVSW (слово) и MOVSD (двойное слово).
Команда сравнения цепочек CMPS имеет следующее общее представление:
cmps dst, src (src) – (dst)
Данная команда производит вычитание байта, слова или двойного слова цепочки dst из соответствующего элемента цепочки src. В зависимости от результатов вычитания осуществляется модификация флагов, но сами операнды не изменяются, а регистры-указатели продвигаются на следующие элементы цепочек. Если перед командой CMPS указан префикс REPE/REPZ, операция интерпретируется как “сравнивать, пока не достигнут конец цепочки или пока элементы будут неравны”. При использовании префикса REPNE/REPNZ операция приобретает смысл “сравнивать, пока не достигнут конец цепочки или пока элементы будут равны”. Поэтому команду CMPS удобно применять для поиска одинаковых или различающихся элементов цепочки. Команда сравнения цепочек имеет возможность указать длину сравниваемых элементов – CMPSB (байт), CMPSW (слов) и CMPSD (двойных слов).
Команда сканирования или просмотра цепочек SCAS имеет следующее общее представление:
scas dst (acc) - (dst)
Эта команда вычитает элемент цепочки dst (байт, слово или двойное слово) из содержимого аккумулятора AL/AX/EAX. В соответствии с полученной разностью изменяются флаги, но значения операндов не меняются. С префиксом REPE/REPZ команду SCAS можно использовать для поиска элементов цепочки со значением, отличающимся от заданного в аккумуляторе значения, а применение префикса REPNE/REPNZ позволяет найти элемент цепочки, значение которого равно значению в аккумуляторе.
Для явного указания размера элементов цепочки используются мнемокоды SCASB, SCASW и SCASD.
Команда загрузки цепочки в аккумулятор LODS имеет следующее общее представление:
lods src.
При выполнении этой команды элемент цепочки src (байт, слово или двойное слово) загружается в аккумулятор AL/AX/EAX и указатель цепочки ESI/SI продвигается на следующий элемент цепочки. Обычно эта команда с префиксом повторения не используется, однако ее удобно применять в программных циклах. В Ассемблере допускаются мнемокоды этой команды LODSB, LODSW и LODSD, которые явно определяют тип элементов цепочки.
Команда сохранения или запоминания содержимого аккумулятора в цепочке STOS передает байт, слово или двойное слово из аккумулятора AL/AX/EAX в элемент цепочки и продвигает регистр-указатель EDI/DI на следующий элемент. С префиксом повторения REP эта команда представляет собой удобное средство инициализации цепочки на фиксированное значение. Тип элементов цепочки можно указывать мнемокодом STOSB, STOSW и STOSD.