- •Классификация команд процессора Intel.
- •Команды пересылки данных: mov, cmoVcc, xchg, bswap, in, out.
- •Команды пересылки данных: push, pop, pusha, pushad, popa, popad.
- •Команды двоичной арифметики: add, adc, xadd, sub, sbb, inc, dec, neg.
- •Команды двоичной арифметики: imul, mul, idiv, div, cmp, cmpxchg, cmpxchg8b.
- •Команды десятичной арифметики: daa, das, aaa, aas, aam, aad.
- •Команды логических операций: and, or, xor, not, test.
- •Команды сдвиговых операций: sar, sal, shr, shl, shrd, shld.
- •Команды операций над битами и байтами: bt, bts, btr, btc, bsf, bsr, seTcc.
- •Команды сдвиговых операций: ror, rol, rcr, rcl.
- •Команды передачи управления: jmp, Jcc, jcxz, jecxz.
- •Команды передачи управления: loop, loope, loopz, loopne, loopnz.
- •Команды передачи управления: call, ret, retn, retf.
- •Команды передачи управления: int, iret, iretd, int3, into.
- •Префиксы повторения для строковых операций: rep, repe, repne, repz, repnz.
- •Строковые операции: movs, movsb, movsw, movsd, cmps, cmpsb, cmpsw, cmpsd.
- •Строковые операции: stos, stosb, stosw, stosd, ins, insb, insw, insd, outs, outsb, outsw, outsd.
- •Строковые операции: scas, scasb, scasw, scasd, lods, lodsb, lodsw, lodsd.
- •Команды управления флагами: stc, clc, cmc, std, cld, lahf, sahf.
- •Команды управления флагами: pushf, pushfd, popf, popfd, cli, sti, salc.
- •Директивы задания набора допустимых команд. Глобальные объявления.
- •Условное ассемблирование. Выражения. Операторы, используемые в выражениях.
- •Ввод данных с клавиатуры и вывод на экран.
Команды передачи управления: int, iret, iretd, int3, into.
Команда: |
INT число |
Назначение: |
Вызов прерывания |
Процессор: |
8086 |
INT помещает в стек содержимое регистров EFLAGS, CS и EIP, после чего передает управление программе, называемой «обработчик прерывания» с указанным в качестве операнда номером (число от 0 до 0FFh), аналогично команде CALL. В реальном режиме адреса обработчиков прерываний считываются из таблицы, начинающейся в памяти по адресу 0000h:0000h. Адрес каждого обработчика занимает 4 байта, так что, например, адрес обработчика прерывания 10h находится в памяти по адресу 0000h:0040h. В защищенном режиме адреса обработчиков прерываний находятся в таблице IDT и обычно недоступны для прямого чтения или записи, так что для установки собственного обработчика программа должна обращаться к операционной системе. В DOS вызовы прерываний используются для выполнения большинства системных функций — работы с файлами, вводом/выводом и т.д. Например, следующий фрагмент кода завершает выполнение программы и возвращает управление DOS:
mov ax,4C01h
int 21h
Команда: |
IRET IRETD |
Назначение: |
Возврат из обработчика прерывания |
Процессор: |
8086 |
Возврат управления из обработчика прерывания или исключения. IRЕТ загружает из стека значения IP, CS и FLAGS, a IRETD — EIP, CS и EFLAGS соответственно. Единственное отличие IRET от RETF состоит в том, что восстанавливается значение регистра флагов, из-за чего многим обработчикам прерываний приходится изменять значение EFLAGS, находящегося в стеке, чтобы, например, вернуть флаг CF установленным в случае ошибки.
Команда: |
INT3 |
Назначение: |
Вызов прерывания 3 |
Процессор: |
8086 |
Размер этой команды — один байт (код 0CCh), что делает ее удобной для отладки программ отладчиками, работающими в реальном режиме. Такие отладчики записывают этот байт вместо первого байта команды, перед которой требуется точка останова, и переопределяют адрес обработчика прерывания 3 на соответствующую процедуру внутри отладчика.
Команда: |
INTO |
Назначение: |
Вызов прерывания 4 при переполнении |
Процессор: |
8086 |
INTO — еще одна специальная форма команды INT. Эта команда вызывает обработчик прерывания 4, если флаг OF установлен в 1.
Префиксы повторения для строковых операций: rep, repe, repne, repz, repnz.
Все команды для работы со строками считают, что строка-источник находится по адресу DS:SI (или DS:ESI), то есть в сегменте памяти, указанном в DS со смещением в SI, а строка-приемник — соответственно в ES:DI (или ES:EDI). Кроме того, все строковые команды работают только с одним элементом строки (байтом, словом или двойным словом) за один раз. Для того чтобы команда выполнялась над всей строкой, необходим один из префиксов повторения операций.
Префикс: |
REP |
Назначение: |
Повторять |
Префикс: |
REPE |
Назначение: |
Повторять, пока равно |
Префикс: |
REPNE |
Назначение: |
Повторять, пока не равно |
Префикс: |
REPZ |
Назначение: |
Повторять, пока ноль |
Префикс: |
REPNZ |
Назначение: |
Повторять, пока не ноль |
Процессор: |
8086 |
Все эти команды — префиксы для операций над строками. Любой из префиксов выполняет следующую за ним команду строковой обработки столько раз, сколько указано в регистре ЕСХ (или СХ, в зависимости от разрядности адреса), уменьшая его при каждом выполнении команды на 1. Кроме того, префиксы REPZ и REPE прекращают повторения команды, если флаг ZF сброшен в 0, и префиксы REPNZ и REPNE прекращают повторения, если флаг ZF установлен в 1. Префикс REP обычно используется с командами INS, OUTS, MOVS, LODS, STOS, а префиксы REPE, REPNE, REPZ и REPNZ — с командами CMPS и SCAS. Поведение префиксов не с командами строковой обработки не определено.
