INT - это инструкция на языке ассемблера для процессоров x86 , которая генерирует программное прерывание . Он принимает номер прерывания, отформатированный как значение байта . [1]
При написании на ассемблере инструкция записывается так:
INT X
где X
- программное прерывание, которое должно быть сгенерировано (0-255).
Как это принято в машинной двоичной арифметике, номера прерываний часто записываются в шестнадцатеричной форме, которая может быть обозначена префиксом 0x или суффиксом h . Например, INT 13H
будет сгенерировано 20-е программное прерывание (0x13 - это число от 19 до 19, записанное в шестнадцатеричной системе счисления, а счет начинается с 0), в результате чего будет выполнена функция, на которую указывает 20-й вектор в таблице прерываний.
Реальный режим
При генерации программного прерывания процессор вызывает одну из 256 функций, на которые указывает таблица адресов прерывания, которая находится в первых 1024 байтах памяти в реальном режиме (см. Вектор прерывания ). Следовательно, вполне возможно использовать команду дальнего вызова для запуска функции прерывания вручную после нажатия регистра флага.
Одним из наиболее полезных программных прерываний DOS было прерывание 0x21. Вызывая его с разными параметрами в регистрах (в основном ah и al), вы можете получить доступ к различным операциям ввода-вывода, строковому выводу и многому другому. [2]
Большинство систем Unix и их производных не используют программные прерывания, за исключением прерывания 0x80, используемого для выполнения системных вызовов . Это достигается путем ввода 32-битного значения, соответствующего функции ядра, в регистр EAX процессора и последующего выполнения INT 0x80.
INT3
INT3 команда представляет собой один байт-инструкция определяется для использования отладчиков временно заменить команду в работающую программу для того , чтобы установить код точки останова . Более общие инструкции INT XXh кодируются с использованием двух байтов. Это делает их непригодными для использования в инструкциях по установке исправлений (которые могут быть длиной в один байт); см. SIGTRAP .
Код операции для INT3 - это 0xCC
, в отличие от кода операции для INT немедленно8 , который равен . Поскольку выделенный код операции имеет некоторые требуемые специальные свойства для отладки, которые не используются обычным двухбайтовым кодом операции для INT3, ассемблеры обычно не генерируют общий код операции из мнемоники. [1]0xCD immediate8
0xCC
0xCD 0x03
В
INTO инструкция является еще один байт-инструкция. Это условное прерывание, которое запускается при установке флага переполнения во время выполнения этого кода операции. Это неявно указывает на прерывание №4.
Код операции для INTO есть 0xCE
, однако он недоступен в режиме x86-64.
Смотрите также
Рекомендации
- ^ a b Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32 (PDF) . 2 . Корпорация Intel . Сентябрь 2016. с. 3-457 . Проверено 19 февраля 2020 .
- ^ Определение: int 21