Реферат Курсовая Конспект
Регистры отладки - раздел Компьютеры, Справочник по командам и архитектуре Pentium Dr0…dr3 – Хранят 32-Битные Линейные Адреса Точек Останова....
|
DR0…DR3 – хранят 32-битные линейные адреса точек останова.
DR6 (равносильно DR4) – отражает состояние контрольных точек.
DR7 (равносильно DR5) – управляет установкой контрольных точек.
Команды пересылки данных
MOV dest,src | Пересылка данных в регистр из регистра, памяти или непосредственного операнда. Пересылка данных в память из регистра или непосредственного операнда. Например, MOV AX,10; MOV EBX,ESI; MOV AL, BYTE PTR MEM. |
XCHG r/m,r | Обмен данными между регистрами или регистром и памятью. Команда «память – память» в микропроцессоре Intel не предусмотрена. |
BSWAP reg32 | Перестановка байт из порядка «младший – старший» в порядок «старший – младший». Разряды 7-0 обмениваются с разрядами 31-24, а разряды 15-8 с разрядами 23-16. Команда появилась в 486-м микропроцессоре. |
MOVSXB r,r/m | Пересылка байта с его расширением до слова или двойного слова с дублированием знакового бита: MOVSXB AX,BL; MOVSXB EAX,byte ptr mem. Команда появилась с 386-ого процессора. |
MOVSXW r,r/m | Пересылка слова с расширением до двойного слова с дублированием знакового бита: MOVSXW EAX,WORD PTR MEM. Команда появилась с 386-ого процессора. |
MOVZXB r,r/m | Пересылка байта с его расширением до слова или двойного слова с дублированием нулевого бита: MOVSXB AX,BL; MOVSXB EAX,byte ptr mem. Команда появилась с 386-ого процессора. |
MOVZXW r,r/m | Пересылка слова с расширением до двойного слова с дублированием нулевого бита: MOVZXW EAX,WORD PTR MEM. Команда появилась с 386-ого процессора. |
XLAT | Загрузить в AL байт из таблицы в сегменте данных, на начало которой указывает EBX (BX), при этом начальное значение AL играет роль смещения. |
LEA r,m | Загрузка эффективного адреса. Например, LEA EAX,MEM; LEA EAX,[EBX]. Данная команда обладает магическими свойствами, позволяющими эффективно выполнять арифметические действия. Например, команда LEA EAX,[EAX*8] умножает содержимое EAX на 8, LEA EAX,[EAX][EAX*4] на 5. Команда LEA ECX,[EAX][ESI+5] эквивалента 3(!) командам MOV ECX,EAX/ADD ECX,ESI/ADD ECX,5. |
LDS r,m | Загрузить пару DS:reg из памяти. Причем вначале идет слово (или двойное слово), а в DS - последующее слово. |
LES r,m | Аналогично предыдущему, но для пары ES:reg. |
LFS r,m | Аналогично предыдущему, но для пары FS:reg. |
LGS r,m | Аналогично предыдущему, но для пары GS:reg. |
LSS r,m | Аналогично предыдущему, но для пары SS:reg. |
SETcc r/m | Проверяет условие «cc», если выполняется, то первый бит байта устанавливается в 1, в противном случае в 0. Условия аналогичны в условных переходах (je, jc). Например, SETE AL. Команда появилась с 386-ого микропроцессора. |
LAHF | Загрузить флаги в AH (устарела). |
SAHF | Сохранить AH в регистре флагов (устарела). |
Команды ввода-вывода
IN AL(AX,EAX), Port IN AL(AX,EAX), DX | Ввод в аккумулятор из порта ввода-вывода. Порт адресуется непосредственно или через регистр DX. |
OUT port,AL (AX,EAX) OUT DX,AL (AX,EAX) | Вывод в порт ввода-вывода. Порт адресуется непосредственно или через регистр DX. |
[REP] INSB [REP] INSW [REP] INSD | Выводит данные из порта, адресуемого регистром DX в ячейку памяти ES:[EDI/DI]. После ввода байта, слова или двойного слова производится коррекция EDI/DI на 1, 2,4. При наличии префикса REP-процесс продолжается, пока содержимое CX не станет равным 0. |
[REP] OUTSB [REP] OUTSW [REP] OUTSD | Выводит данные из ячейки памяти, определяемой регистрами DS:[ESI/SI], в выходной порт, адрес которого находится в регистре DX. После вывода байта, слова, двойного слова производится коррекция указателя ESI/SI на 1, 2, 4. |
Инструкции работы со стеком
PUSH r/m | Поместить в стек слово или двойное слово. Поскольку при включении в стек слова нарушается выравнивание стека по границам двойных слов, рекомендуется в любом случае помещать в стек двойное слово. |
PUSH const | Поместить в стек непосредственный 32-битный операнд. |
PUSHA | Поместить в стек регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP. Команда появилась с 386-ого процессора. |
POP reg/mem | Извлечь из стека слово или двойное слово. |
POPA | Извлечение из стека данных в регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP. Команда появилась, начиная с 386-ого процессора. |
PUSHF | Помещение в стек регистра флагов. |
POPF | Извлечь данных в регистр флагов. |
Инструкции целочисленной арифметики.
ADD dest,src | Сложение двух операндов. Первый операнд может быть регистром или ячейкой памяти, второй – регистром, ячейкой памяти, константой. Невозможно только, когда оба операнда являются ячейками памяти. |
XADD dest,src | Данная операция производит в начале обмен операндами, а затем выполняет операцию ADD. Начиная 486-ого. |
ADC dest,src | Сложение с учетом флага переноса – в младший бит добавляется бит (флаг) переноса. |
INC r/m | Инкремент операнда. |
SUB dest,src | Вычитание двух операндов. Остальное аналогично сложению (команда ADD). |
SBB dest,src | Вычитание с учетом бита переноса. Из младшего бита вычитается бит (флаг) переноса. |
DEC r/m | Декремент операнда. |
CMP r/m,r/m | Вычитание без изменения операндов (сравнение). |
CMPXCHG r,m,a | Сравнение с обменом. Воспринимает три операнда (регистр – операнд - источник, ячейка памяти – операнд - получатель, аккумулятор, т.е. AL,AX или EAX) Если значения в операнде-получателе и аккумуляторе равны, операнд-получатель заменяется операндом-источником, исходное значение операнда-получателя загружается в аккумулятор. Начиная с 486-ого. |
CMPXCHG8B r,m,a | Сравнение и обмен восьми байт. Начиная с Pentium. |
NEG r/m | Изменение знака операнда. |
AAA | Коррекция после ASCII-сложения. Коррекция результата двоичного сложения двух неупакованных десятичных чисел. Например, AX содержит число 9H. Пара команд ADD AL,8/AAA приводит к тому, что в AX будет содержаться 0107, т.е. ASCII-число 17. |
AAS | Коррекция после ASCII-вычитания. Например: MOV AX,205H ;загрузить ASCII 25 SUB AL,8 ;двоичное вычитание AAS ;теперь AX содержит 107H, т.е. 17. |
AAM | Коррекция после ASCII-умножения. Для этой команды предполагается, что в регистре AX находится результат двоичного умножения двух десятичных цифр (диапазон от 0 до 81). После выполнения команды образуется двухбайтное произведение в регистре AX в ASII-формате. |
AAD | Коррекция перед ASCII-делением. Предполагается, что младшая цифра находится в AL, а старшая – в AH. |
DAA | Коррекция после BCD-сложения.[1] |
DAS | Коррекция после BCD-вычитания. |
MUL r/m | Умножение AL(AX,EAX) на целое беззнаковое число. Результат, соответственно, будет содержаться в AX, DX:AX, EDX:EAX. |
IMUL r/m | Знаковое умножение (аналогично MUL). Все операнды считаются знаковыми. Команда IMUL имеет также двухоперандный и трехоперандный вид. Двухоперандный вид IMUL r,src r<-r*src. Трехоперандный вид IMUL dst,src,imm dst<-src*imm. |
DIV r/m (src) | Беззнаковое деление. Аналогично беззнаковому умножению. Осуществляет деление аккумулятора и его расширения (AH:AL, DX:AX, EDX:EAX) на делитель src. Частное помещается в аккумуляторе, а остаток – в расширении аккумулятора. |
IDIV r/m | Знаковое деление. Аналогично беззнаковому. |
CBW | Расширение байта (AL) в слово с копированием знакового бита. |
CWD | Расширение слова (AX) в двойное слово (DX:AX) с копированием знакового бита. |
CWDE | Расширение слова (AX) в двойное слово (EAX) с копированием знакового бита. |
CDQ | Преобразование двойного слова (EAX) в учетверенное слово (EDX:EAX). |
Логические операции.
AND dest,src | Логическая операция «AND». Обнуление бит dest, которые равны нулю у src. |
TEST dest,src | Аналогична «AND», но не меняет dest. Используется для проверки ненулевых бит. |
OR dest,src | Логическая «ИЛИ». В dest устанавливаются биты, отличные от нуля в src. |
XOR dest,src | Исключающее «ИЛИ». |
NOT dest | Переключение всех бит (инверсия). |
Сдвиговые операции. Начиная с 386-ого микропроцессора, непосредственный операнд src может быть не только 1, но произвольным числом. В ранних версиях для количества сдвигов использовался регистр CL.
RCL/RCR dest,src | Циклический сдвиг влево/вправо через бит переноса CF. Src может быть либо CL, либо непосредственный операнд. |
ROL/ROR dest,src | Аналогично командам RCL/RCR, но по другому, работает с флагом CF. Флаг не участвует в цикле, но в него попадает бит, перешедший с начала на конец или наоборот. |
SAL/SAR dest,src | Сдвиг влево/право. Называется еще арифметическим сдвигом. При сдвиге вправо дублируется старший бит. При сдвиге влево младший бит заполняется нулем. Ушедший бит помещается в CF. |
SHL/SHR dest,src | Логический сдвиг влево/вправо. Сдвиг вправо отличается от SAR тем, что и старший бит заполняется нулем. |
SHLD/SHRD dest,src,count | Трехоперандные команды сдвига влево/вправо. Первым операндом, как обычно, может быть либо регистр, либо ячейка памяти, вторым операндом должен быть регистр общего назначения, третьим – регистр CL или непосредственный операнд. Суть операции заключается в том, что dest и src в начале объединяются, а потом производится сдвиг на количество бит count. Результат снова помещается в dest. |
Строковые операции
REP | Префикс, означающий повтор строковой операции до обнуления ECX. Префикс имеет также разновидности REPZ (REPE) – выполнять, пока не нуль (ZF=1), REPNZ (REPNE) – выполнять, пока нуль. |
MOVS dest,src | Команда передает байт, слово или двойное слово из цепочки, адресуемой DS:[ESI], в цепочку dest, адресуемую ES[EDI]. При этом EDI и ESI автоматически корректируются согласно значению флага DF. Допускается явная спецификация MOVSB (byte), MOVSW (word), MOVSD (word). Dest и src можно явно не указывать. |
LODS src | Команда загрузки цепочки в аккумулятор. Имеет разновидности LODSB, LODSW, LODSD. При выполнении команды байт, слово, двойное слово загружается соответственно в AL,AX,EAX. При этом ESI автоматически изменяется на 1 в зависимости от значения флага DF. Префикс REP не используется. |
STOS dest | Команда, обратная LODS, т.е. передает байт, слово или двойное слово из аккумулятора в цепочку и автоматически корректирует EDI. |
SCAS dest | Команда сканирования цепочки. Команда вычитает элемент цепочки dst из содержимого аккумулятора (ALAXEAX) и модифицирует флаги. Префикс REPNE позволяет найти в цепочке нужный элемент. |
CMPS dest,src | Команда сравнения цепочек. Данная команда производит вычитание байта, слова или двойного слова цепочки dst из соответствующего элемента цепочки src. В зависимости от результата вычитания модифицируются флаги. Регистры EDI и ESI автоматически продвигаются на следующий элемент. При использовании префикса REPE команда означает – сравнивать, пока не будет, достигнут конец цепочки или пока элементы не будут равны. При использовании префикса REPNE команда означает – сравнивать, пока не достигнут конец цепочки или пока элементы будут равны. |
Команды управления флагами
CLC | Сброс флага переноса. |
CMC | Инверсия флага переноса. |
STC | Установка флага переноса. |
CLD | Сброс флага направления. |
STD | Установка флага направления. |
CLI | Запрет маскируемых аппаратных прерываний. |
STI | Разрешение маскируемых аппаратных прерываний. |
CTS | Сброс флага переключения задач. |
Команды передачи управления
JMP target | Имеет пять форм, различающихся расстоянием назначения от текущего адреса, и способом задания целевого адреса. При работе в Windows используется в основном внутрисегментный переход (NEAR) в пределах 32-битного сегмента. Адрес перехода может задаваться непосредственно (в программе это метка) или косвенно, т.е. содержаться в ячейке памяти или регистре (JMP [EAX]). Другой тип перехода – короткий переход (SHORT), занимает всего 2 байта. Диапазон смещения, в пределах которого происходит переход: –128 … 127. Использование такого перехода весьма ограниченно. Межсегментный переход может иметь следующий вид: JMP FWORD PTR L, L – указатель на структуру, содержащую 48 битный адрес, в начале которого 32-й адрес смещения, затем 16-й селектор (сегмента, шлюза вызова, сегмента состояния задачи). Возможен также и такой вид межсегментного перехода: JMP FWORD ES:[EDI]. |
Условные переходы | JA/JNBE – перейти, если выше. JAE/JNB – перейти, если выше или равно. JB/JNAE – перейти, если ниже. JBE/JNA – перейти, если ниже. JC - перейти, если перенос. JE/JZ - перейти, если нуль. JG/JNLE – перейти, если больше. JGE/JNL – перейти, если больше или равно. JL/JNGE – перейти если меньше. JLE/JNG – перейти, если меньше или равно. JNC - перейти, если нет переноса. JNE/JNZ – перейти, если меньше или равно. JNO - перейти, если нет переполнения. JNP/JPO – перейти, если нет паритета. JNS - перейти, если нет знака. JO - перейти, если есть переполнения. JP/JPE - перейти, если есть паритет. JS - перейти, если есть знак. JCXZ - переход, если CX=0. JECXZ - переход, если ECX=0. В плоской модели команды условного перехода осуществляют переход в пределах 32-битного регистра. |
Команды управления циклом. Все команды этой группы уменьшают содержимое регистра ECX. | LOOP - переход, если содержимое ECX не равно нулю. LOOPE(LOOPZ) – переход, если содержимое ECX не равно нулю и флаг ZF=1. LOOPNE(LOOPNZ) – переход, если содержимое ECX не равно нулю и флаг ZF=0. |
CALL target | Передает управление процедуре (метке) с сохранением в стеке адреса, следующей за CALL-командой. В плоской модели адрес возврата представляет собой 32-битное смещение. Межсегментный вызов предполагает сохранение в стеке селектора и смещения, т.е. 48-битной величины (16 бит – селектор и 32 бита – смещение). |
RET [N] | Возврат из процедуры. Необязательный параметр N предполагает, что команда также автоматически чистит стек (освобождает N байт). Команда имеет разновидности, которые выбираются ассемблером автоматически, в зависимости от того, является процедура ближней или дальней. Можно, однако, и явно указать тип возврата (RETN или RETF). В случае плоской модели по умолчанию берется RETN с четырехбайтным адресом возврата. |
Команды поддержки языков высокого уровня
ENTER par1,par2 | Подготовка стека при входе в процедуру (см. главу 1.2.). |
LEAVE | Приведение стека в исходное состояние. |
BOUND REG16,MEM16 или BOUND REG32,MEM32 | Предполагается, что регистр содержит текущий индекс массива, а второй операнда определяет в памяти два слова или два двойных слова. Первое считается минимальным значением индекса, а второе – максимальным. Если текущий индекс оказывается вне границ, то генерируется команда INT 5. Используется для контроля нахождения индекса в заданных рамках, что является важным средством отладки. |
Команды прерываний
INT n | Двухбайтная команда. В начале в стек помещается содержимое регистра флагов, затем полный адрес возврата[DS1] . Кроме того, сбрасывается флаг TF. После этого осуществляется косвенный переход через n-й элемент дескрипторной таблицы прерываний. Однобайтная команда INT 3 называется прерыванием контрольного останова и используется в программах-отладчиках. |
INTO | Равносильна команде INT 4, если флажок переполнения OF=1, если OF=0 – команда не производит никакого действия. |
IRET | Команда возврата из прерываний. Извлекает из стека сохраненные в нем адрес возврата и регистр флажков. Бит уровня привилегий будет модифицироваться только в том случае, если текущий уровень привилегий равен 0. |
Команды синхронизации процессора
HLT | Останавливает процессор. Из такого останова процессор может быть выведен внешним прерыванием. |
LOCK | Представляет собой префикс блокировки шины. Он заставляет процессор сформировать сигнал LOCK# на время выполнения находящейся за префиксом команды. Этот сигнал блокирует запросы шины другими процессорами в мультипроцессорной системе. |
NOP | Холостая команда. Не производит никаких действий. |
WAIT(FWAIT) | Синхронизация с сопроцессором. Большинство команд сопроцессора автоматически вырабатывают эту команду. |
Команды обработки цепочки бит. Эти команды появились в 386-м процессоре
BSF(BSR) dest,src | Dest - 16-битный или 32-битный регистр. Src – регистр или ячейка памяти. При выполнении команды BSF операнд src просматривается с младших, а в команде BSR - со старших бит. Номер первого встречного бита, находящегося в состоянии 1, помещается в регистр dest, флажок ZF сбрасывается в 0. Если src содержит 0, то ZF=1, а содержимое dest не определено. |
BT dest,src | Тестирование бита с номером из src в dest и перенос его во флаг CF. |
BTC dest,src | Проверка и инвертирование бита из src в dest. |
BTR dest,src | Проверка и сброс бита из src в dest. |
BTS dest,src | Проверка и установка бита из src в dest. |
Команды управления защитой
LGDT src | Загрузка GDTR из памяти. Src указывает на 6-байтную величину. |
SGDT dest | Сохранить GDTR в памяти. |
LIDT src | Загрузить IDTR из памяти. |
SIDT dest | Сохранить IDTR в памяти. |
LLDT src | Загрузить LDTR из памяти (16 бит). |
SLDT dest | Сохранить LDTR в регистре или памяти (16 бит). |
LMSW src | Загрузка MSW. |
SMSW dest | Сохранить MSW в регистре или памяти (16 бит). |
LTR src | Загрузка регистра задачи из регистра или памяти (16 бит). |
STR dest | Сохранение регистра задачи в регистре или памяти (16 бит). |
LAR dest,src | Загрузка старшего байта dest байтом прав доступа дескриптора src. |
LSL dest,src | Загрузка dest лимитом сегмента, дескриптор которого задан src. |
ARPL r/m,r | Выравнивание RPL в селекторе до наибольшего числа из текущего уровня и заданного операндом. |
VERR seg | Верификация чтения: установка ZF=1, если задаче позволено чтение в сегменте SEG. |
VERW seg | Верификация чтения: установка ZF=1, если задаче позволена запись в сегменте SEG. |
– Конец работы –
Эта тема принадлежит разделу:
На сайте allrefs.net читайте: "Справочник по командам и архитектуре Pentium"
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Регистры отладки
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов