Cамоучитель по Assembler

Минет



Приложение


Index0
Приложение. Система команд процессоров Intel Система команд процессоров Intel ААА ASCII-коррекция регистра АХ после сложения,AAD ASCII-коррекция регистра АХ перед делением, ААМ ASCII-коррекция...
Система команд процессоров Intel
Ниже приводится алфавитный перечень команд процессоров Intel с кратким описанием действия каждой команды и примерами ее использования.В разделах статей, начинающихся с обозначения 386+, описывают...
HLT Останов
Команда hlt прекращает выполнение программы и переводит процессор в состояние останова. Работа процессора возобновляется после операции запуска, а также в случае прихода немаскируемого или разреш...
IDIV Деление целых чисел со знаком
Команда IDIV выполняет деление целого числа со знаком, находящегося в регистрах АХ (в случае деления на байт) или DX:AX (в случае деления на слово), на операнд-источник (целое число со знаком). Ра...
Рисунок П3. Состояние стека после
Пример ;В полях данныхlong dd 0F0007h ;Делимое; В программном сегментеmov DX,word ptr long+2;DX=000Fh, старшая;часть делимогоmov AX,word ptr long;AX=0007h, младшая;часть делимогоmov CX,256 ;Делите...
INS Ввод строки из порта
INSB Ввод байта из порта INSW Ввод слова из порта INSD Ввод двойного слова из портаКоманды предназначены для ввода данных из порта непосредственно в память. Адрес порта указывается, как и для ком...
INT Программное прерывание
Команда hit инициирует в процессоре процедуру прерывания, в результате которой управление передается на обработчик прерывания с номером n, который указан в качестве операнда команды int. В стек т...
INTO Прерывание по переполнению
Команда into, будучи установлена вслед за какой-либо арифметической, логической или строковой командой, вызывает обработчик прерываний через вектор 4, если предшествующая команда установила флаг п...
MP Безусловный переход
Команда jmp передает управление в указанную точку того же или другого программного сегмента. Адрес возврата не сохраняется. Команда не воздействует на флаги процессора.Команда jmp имеет пять разн...
LAHF Загрузка флагов в регистр АН
Команда lahf копирует флаги SF, ZF, AF, PF и CF соответственно в разряды 7, 6, 4, 2 и 0 регистра АН. Значение битов 5, 3 и 1 регистра АН не определено. Команда не имеет параметров и не изменяет фл...
86+ LEAVE Выход из процедуры высокого уровня
Команда leave выполняет действия, противоположные действиям последней команды enter. Она логически уничтожает созданный командой enter стековый кадр со всеми содержащимися в нем локальными переме...
LES Загрузка указателя с использованием регистра ES
Команда les считывает из памяти по указанному адресу двойное слово (32 бит), содержащее указатель (полный адрес некоторой ячейки), и загружает младшую половину указателя (т.е. относительный адрес)...
86Р+ LGDT Загрузка регистра таблицы глобальных дескрипторов
Команда Igdt загружает регистр таблицы глобальных дескрипторов (GDTR) из 48-битового псевдодескриптора, содержащего 32-битовый базовый адрес и 16-битовую границу таблицы глобальных дескрипторов,...
Р+ LIDT Загрузка регистра таблицы дескрипторов прерываний
Команда lidt загружает регистр таблицы дескрипторов прерываний (IDTR) из 48-битового псевдодескриптора, содержащего 32-битовый базовый адрес и 16-битовую границу таблицы дескрипторов прерываний, н...
LOCK Запирание шины
Префикс lock, помещенный перед командой, устанавливает сигнал на линии LOCK системной шины и запрещает доступ к шине другим процессорам на время выполнения данной команды. Этот префикс предназнач...
LODS Загрузка операнда из строки
LODSB Загрузка байта из строки LODSW Загрузка слова из строкиКоманды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым). Они...
86+ LODSD Загрузка двойного слова из строки
Команда аналогична командам МП 86 lodb и lodsw, но позволяет загрузить из строки, адресуемой через регистры DS:ESI (DS:SI для 16-разрядных приложений), двойное слово в регистр ЕАХ.Пример ; В поля...
LOOP Циклическое выполнение, пока содержимое СХ не равно нулю
Команда loop выполняет декремент содержимого регистра СХ, и если оно не равно 0, осуществляет переход на указанную метку вперед или назад в том же программном сегменте в диапазоне -128... + 127 ба...
86Р+ LTR Загрузка регистра задачи TR
Команда Itr загружает регистр задачи TR селектором сегмента состояния задачи TSS из второго операнда, в качестве которого можно использовать 16- или 32-разрядный регистр общего назначения или 16-...
MOV Пересылка данных
Команда mov замещает первый операнд (приемник) вторым (источником). При этом исходное значение первого операнда теряется. Второй операнд не изменяется. В зависимости от описания операндов, пересыл...
MOVSB Пересылка байта данных из строки в строку
MOVSW Пересылка слова данных из строки в строкуКоманды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым). Они пересылают по...
ААА ASCII-коррекция регистра АХ после сложения
Команда ааа используется вслед за операцией сложения add в регистре AL двух неупакованных двоично-десятичных (BCD) чисел, если в АХ находится двухразрядное неупакованное двоично-десятичное число....
AAD ASCII-коррекция регистра АХ перед делением
Команда aad используется перед операцией деления неупакованного двоично-десятичного (BCD) числа в регистре АХ на другое неупакованное двоично-десятичное число. Команда не имеет параметров. Она пре...
MUL Умножение целых чисел без знака
Команда inul выполняет умножение целого числа без знака, находящегося в регистре AL (в случае умножения на байт) или АХ (в случае умножения на слово), на операнд-источник (целое число без знака)....
NEG Изменение знака, дополнение до 2
Команда neg выполняет вычитание целочисленного операнда со знаком из нуля, превращая положительное число в отрицательное и наоборот. Исходный операнд затирается. В качестве операнда можно указыват...
OUTSB Вывод байта в порт
OUTSW Вывод слова в порт OUTSD Вывод двойного слова в портКоманды предназначены для вывода данных в порт непосредственно из памяти. Адрес порта указывается, как и для команды out, в регистре DX,...
POP Извлечение слова из стека
Команда pop выталкивает 16-битовое данное из стека, т.е. пересылает слово из вершины стека (на которую указывает регистр SP) по адресу операнда-приемника. После этого содержимое SP увеличивается...
+ РОРА Восстановление из стека всех регистров
Команда рора восстанавливает из стека содержимое всех регистров, предварительно сохраненных в стеке командой pusha. Заполнение из стека регистров осуществляется в следующем порядке: DI, SI, BP, SP...
PUSH Занесение операнда в стек
Команда push уменьшает на 2 содержимое указателя стека SP и заносит на эту новую вершину двухбайтовый операнд-источник (проталкивает в стек новое данное). Проталкивать в стек можно только целые с...
+ PUSHA Сохранение в стеке всех регистров
Команда pusha сохраняет в стеке содержимое всех регистров в следующем порядке: АХ, СХ, DX, ВХ, значение указателя стека SP перед выполнением данной команды, дачее ВР, SI и DI. Команда не имеет пар...
Рисунок П4. Действие команды rcl.
В качестве операнда команды rcl можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредстве...
RCR Циклический сдвиг вправо через бит переноса
Команда rсl осуществляет сдвиг вправо всех битов операнда. Если команда записана в формате rcl операнд,1 сдвиг осуществляется на 1 бит. В старший бит операнда заносится значение флага CF; младший...
Рисунок П.5. Действие команды rcl.
В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значени...
Pentium+P RDMSR Чтение особого регистра модели
Команда читает содержимое внутреннего регистра, специфического для конкретной модели процессора.REP Повторение REPE Повторение пока равно REPZ Повторение пока нуль REPNE Повторение пока равно REPN...
RETN Возврат из ближней процедуры
RETF Возврат из дальней процедурыКоманда ret извлекает из стека адрес возврата и передает управление назад в программу, первоначально вызвавшую процедуру. Если командой ret завершается ближняя пр...
ROL Циклический сдвиг влево
Команда rol осуществляет сдвиг влево всех битов операнда. Если команда записана в формате rol операнд,1 сдвиг осуществляется на 1 бит. Старший бит операнда загружается в его младший разряд и одно...
Рисунок П6. Действие команды rol.
В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значени...
>ROR Циклический сдвиг вправо
Команда ROR осуществляет циклический сдвиг вправо всех битов операнда. Если команда записана в формате ror операнд,1 сдвиг осуществляется на 1 бит. Младший бит операнда записывается в его старший...
Рисунок П7. Действие команды ror.
В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значени...
Рисунок П8. Действие команды sal.
В качестве операнда команды sal можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредстве...
Рисунок П.9. Действие команды sar.
В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значени...
SBB Целочисленное вычитание с займом
Команда sbb вычитает второй операнд (источник) из первого (приемника). Результат замещает первый операнд, предыдущее значение которого теряется. Если установлен флаг CF, из результата вычитается...
SCAS Сканирование строки с целью сравнения
SCASB Сканирование строки байтов с целью сравнения SCASW Сканирование строки слов с целью сравненияКоманды предназначены для операций над строками (строкой называется последовательность байтов ил...
86+ SETcc Установка байта по условию
Команды, обозначаемые (в книгах, не в программах!) SETcc, осуществляют запись в указанный байтовый операнд 1 или 0 в зависимости от одного из 16 условий, определяемых флагами состояния. Если усло...
SHL Логический сдвиг влево
Команда полностью эквивалентна команде sal (арифметический сдвиг влево). См. описание команды sal.386+ SHLD Логический сдвиг влево с двойной точностьюТрехоперандная команда shld с операндами op1,...
Рисунок П10. Действие команды shld.
В качестве первого операнда op1можно указывать 16- или 32-разрядный регистр общего назначения или 16- или 32-битовую ячейку памяти. Вторым операндом ор2 может служить только 16- или 32-разрядный р...
Рисунок П11. Действие команды shr.
В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значени...
Рисунок П12. Действие команды shrd.
Третий операнд, характеризующий число битов сдвига, может находиться в регистре CL или быть непосредственным значением.Команда воздействует на флаги OF, SF, ZF, PF и CF.Пример mov AX,0C001hmov BX,...
86P+ SIDT Сохранение в памяти содержимого регистра таблицы дескрипторов прерываний
Команда копирует содержимое регистра таблицы дескрипторов прерываний IDTR (линейный базовый адрес таблицы и ее границу) в поле из 6 байт, указанное в качестве операнда....
Р+ SLDT Сохранение содержимого регистра таблицы локальных дескрипторов
Команда копирует содержимое регистра таблицы локальных дескрипторов LDTR (селектор таблицы) в 16- или 32-разрядный регистр или в 16- или 32-битовое поле памяти, указанные в качестве операнда.386Р+...
ADC Целочисленное сложение с переносом
Команда adc осуществляет сложение первого и второго операндов, прибаатяя к результату значение флага переноса CF. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сл...
ADD Целочисленное сложение
Команда add осуществляет сложение первого и второго операндов. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве пер...
STI Установка флага прерывания
Команда STI устанавливает флаг разрешения прерываний IF в регистре флагов, разрешая все аппаратные прерывания (от таймера, клавиатуры, дисков и т.д.). Команда не имеет параметров и не воздействуе...
STOS Запись в строку данных
STOSB Запись байта в строку данных STOSW Запись слова в строку данныхКоманды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержим...
86P+ STR Сохранение содержимого регистра состояния задачи
Команда str копирует содержимое регистра задачи TR (селектор сегмента состояния задачи) в двухбайтовый регистр общего назначения или 16-битовую ячейку памяти, указанные в качестве операнда....
SUB Вычитание целых чисел
Команда sub вычитает второй операнд (источник) из первого (приемника) и помещает результат на место первого операнда. Исходное значение первого операнда (уменьшаемое) теряется. Таким образом, если...
86+ XADD Обмен и сложение
Команда xadd выполняет в одной операции сложение и обмен операндов. Команда требует двух операндов, причем первый операнд должен быть ячейкой памяти, а второй - регистром. После сложения операндо...
Рисунок П13. Действие команды xadd.
Пример ; В полях данныхmem dw 99;В программном сегментеmov AX,48xadd mem,AX ;mem=147, AX=99...
XCHG Обмен данными между операндами
Команда xchg пересылает значение первого операнда во второй, а второго - в первый. В качестве любого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, однако не допускается о...
86+ BSF Прямое сканирование битов
Команда bsf сканирует слово или двойное слово в поисках бита, равного 1. Сканирование выполняется от младшего бита (0) к старшему. Если в слове не найдено установленных битов, то устанавливается...
+ BSR Обратное сканирование битов
Команда bsf сканирует слою или двойное слово в поисках бита, равного 1. Сканирование выполняется от старшего бита (15 или 31) к младшему. Если в слове не найдено установленных битов, то устанавлив...
86+ BTR Проверка и сброс бита
Команда btr проверяет определенный бит в слове, заданном первым операндом, копирует его значение в флаг CF и сбрасывает. Номер бита выступает в качестве второго операнда. Первым операндом команды...
+ BTS Проверка и установка бита
Команда bts проверяет определенный бит в слове, заданном первым операндом, копирует его значение в флаг CF и устанавливает. Номер бита выступает в качестве второго операнда. Первым операндом коман...
CLC Сброс флага переноса
Команда clc сбрасывает флаг переноса CF в регистре флагов. Команда не имеет параметров и не воздействует на остальные флаги процессора.Пример clc ;CF=0, независимо от ;исходного состояния...
CLD Сброс флага направления
Команда eld сбрасывает флаг направления DF в регистре флагов, устанавливая прямое (в порядке возрастания адресов) направление выполнения операций со строками (цепочками). Команда не имеет параметр...
СМР Сравнение
Сами операнды не изменяются. Таким образом, если команду сравнения записать в общем виде стр операнд_1, операнд_2 то ее действие можно условно изобразить следующим образом: операнд_1 - операнд_2...
CMPS Сравнение строк
CMPSB Сравнение строк по байтам CMPSW Сравнение строк по словамКоманды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым). О...
86+ CMPXCHG Сравнение и обмен
Команда cmpxchg выполняет в одной операции сравнение и обмен операндов. Команда требует два параметра и неявным образом использует третий операнд - регистр ЕАХ. Первый операнд (приемник) должен н...
Рисунок П1. Действие команды cmpxchg
Пример ; В полях данныхmem dw 135; В программном сегментеmov AX,135mov BX,60cmpxchg mem,BX ;mem=AX. Регистр ® память ;mem=60, BX=60, АХ=135 Пример ; В полях данныхmem dw 135;В программном сегменте...
Pentium+ CMPXCHG8B Сравнение и обмен 8 байтов
Команда cmpxchgSb выполняет в одной операции сравнение и обмен 8-байтовых операндов. Команда требует один параметр и неявным образом использует еще два операнда - пары регистров EDX:EAX и ЕСХ:ЕВХ....
Рисунок П2. Действие команды cmpxchg8b
Пример ; В полях данныхmem dq 1122334455667788h;В программном сегментеmov ЕСХ,9mov ЕВХ,5mov EDX,11223344hmov EAX,55667788hcmpxchgSb mem ;mem=EDX:EAX. ECX:EBX ® mem ;mem=0000000900000005h Пример ;...
DAA Десятичная коррекция в регистре AL после сложения
Команда daa корректирует результат сложения в регистре AL двух упакованных двоично-десятичных (BCD) чисел (по одной цифре в каждом полубайте), чтобы получить пару правильных упакованных двоично-д...
DAS Десятичная коррекция в регистре AL после вычитания
Команда das корректирует результат вычитания в регистре AL двух упакованных двоично-десятичных (BCD) чисел (по одной цифре в каждом полубайте), чтобы получить пару правильных упакованных десятичны...








Начало