INT — это инструкция языка ассемблера для процессоров x86 , которая генерирует программное прерывание . Она принимает номер прерывания, отформатированный как байтовое значение. [1]
На языке ассемблера инструкция выглядит следующим образом:
INT X
где X
— программное прерывание , которое должно быть сгенерировано (0-255).
Как это принято в машинной двоичной арифметике, номера прерываний часто записываются в шестнадцатеричной форме, что может быть указано с помощью префикса 0x или суффикса h . Например, INT 13H
сгенерирует 20-е программное прерывание (0x13 — это девятнадцать (19) в шестнадцатеричной системе счисления, а отсчет начинается с 0), в результате чего будет выполнена функция, на которую указывает 20-й вектор в таблице прерываний .
INT широко используется в реальном режиме . В защищенном режиме INT является привилегированной инструкцией . [1]
При генерации программного прерывания процессор вызывает одну из 256 функций, указанных в таблице адресов прерываний, которая находится в первых 1024 байтах памяти в реальном режиме (см. вектор прерывания ). Поэтому вполне возможно использовать инструкцию far-call для ручного запуска функции прерывания после нажатия регистра флага.
Примером полезного программного прерывания DOS было прерывание 0x21. Вызывая его с различными параметрами в регистрах (в основном ah и al), можно было получить доступ к различным операциям ввода-вывода, строковому выводу и т. д. [2]
Большинство систем Unix и производных не используют программные прерывания , за исключением прерывания 0x80, используемого для выполнения системных вызовов . Это достигается путем ввода 32-битного значения, соответствующего функции ядра, в регистр EAX процессора и последующего выполнения INT 0x80.
Инструкция INT3 — это однобайтовая инструкция, определенная для использования отладчиками для временной замены инструкции в работающей программе с целью установки точки останова кода . Более общие инструкции INT XXh кодируются с использованием двух байтов. Это делает их непригодными для использования в инструкциях по исправлению (которые могут быть длиной в один байт); см. SIGTRAP .
Код операции для INT3 — 0xCC
, в отличие от кода операции для INT immediately8 , который равен . Поскольку выделенный код операции имеет некоторые желаемые специальные свойства для отладки, которые не являются общими для обычного двухбайтового кода операции для INT3, ассемблеры обычно не генерируют общий код операции из мнемоники. [1]0xCD immediate8
0xCC
0xCD 0x03
Инструкция INTO — это еще одна однобайтовая инструкция. Это условное прерывание , которое срабатывает, когда флаг переполнения устанавливается во время выполнения этого опкода. Это неявно указывает на прерывание № 4.
Код операции для INTO — 0xCE
, однако он недоступен в режиме x86-64.