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