Введение

Инструкция языка сборки INT – это инструкция языка ассемблера для процессоров x86, генерирующая программное прерывание. Она принимает номер прерывания, представленный в виде байтового значения. В языке ассемблера инструкция записывается следующим образом:

INT X

где X – номер программного прерывания, которое необходимо сгенерировать (от 0 до 255). Как и в машинной двоичной арифметике, номера прерываний часто записываются в шестнадцатеричной форме, которую можно обозначить префиксом 0x или суффиксом h. Например, INT 13H сгенерирует 20-е программное прерывание (0x13 – это девятнадцать (19) в шестнадцатеричной системе счисления, и отсчет начинается с 0), что приведет к выполнению функции, на которую указывает 20-й вектор в таблице прерываний. INT широко используется в реальном режиме. В защищенном режиме INT все еще доступен, но SYSENTER/SYSEXIT или SYSCALL/SYSRET используются чаще из соображений эффективности.

Реальный режим

При генерации программного прерывания процессор вызывает одну из 256 функций, на которые указывает таблица векторов прерываний, расположенная в первых 1024 байтах памяти в реальном режиме (см. вектор прерывания). Поэтому вполне возможно использовать инструкцию дальнего вызова для ручного запуска функции прерывания после сохранения флагов. Примером полезного программного прерывания DOS был прерыв 0x21. Вызывая его с различными параметрами в регистрах (преимущественно ah и al), можно было получить доступ к различным операциям ввода-вывода, выводу строк и другим функциям. Большинство систем Unix и их производных не используют программные прерывания, за исключением прерывания 0x80, используемого для системных вызовов. Это достигается путем помещения 32-битного значения, соответствующего функции ядра, в регистр EAX процессора и последующим выполнением инструкции INT 0x80.

INT3

Инструкция INT3 — это однобайтовая инструкция, предназначенная для использования отладчиками для временной замены инструкции в работающей программе с целью установки точки останова в коде. Более общие инструкции INT XXh кодируются двумя байтами. Это делает их неподходящими для исправления инструкций (которые могут быть длиной в один байт); см. SIGTRAP. Код операции INT3 — 0xCC, в отличие от кода операции INT immediate8, который — 0xCD immediate8. Поскольку выделенный код операции 0xCC обладает некоторыми желательными специальными свойствами для отладки, которыми не обладает обычный двухбайтовый код операции для INT3, ассемблеры обычно не генерируют общий код операции 0xCD 0x03 из мнемонических обозначений.

Внутри

Инструкция INTO – это однобайтовая инструкция. Это условный вызов прерывания, который срабатывает, когда флаг переполнения установлен в момент выполнения этой команды. Это неявно указывает на прерывание номер 4. Код операции INTO – 0xCE, однако она недоступна в 64-битном режиме x86.