Введение
Инструкция языка сборки INT – это инструкция языка ассемблера для процессоров x86, генерирующая программное прерывание. Она принимает номер прерывания, представленный в виде байтового значения. В языке ассемблера инструкция записывается следующим образом:
INT is an assembly language instruction for x86 processors that generates a software interrupt. It takes the interrupt number formatted as a byte value. When written in assembly language, the instruction is written like this:
INT X
where X is the software interrupt that should be generated (0 255). As is customary with machine binary arithmetic, interrupt numbers are often written in hexadecimal form, which can be indicated with a prefix 0x or with the suffix h. For example, INT 13H will generate the 20th software interrupt (0x13 is nineteen (19) in hexadecimal notation, and the count starts at 0), causing the function pointed to by the 20th vector in the interrupt table to be executed. INT is widely used in real mode. In protected mode, INT is still available but SYSENTER/SYSEXIT or SYSCALL/SYSRET is more commonly used due to efficiency reasons.
INT X
INT is an assembly language instruction for x86 processors that generates a software interrupt. It takes the interrupt number formatted as a byte value. When written in assembly language, the instruction is written like this:
INT X
where X is the software interrupt that should be generated (0 255). As is customary with machine binary arithmetic, interrupt numbers are often written in hexadecimal form, which can be indicated with a prefix 0x or with the suffix h. For example, INT 13H will generate the 20th software interrupt (0x13 is nineteen (19) in hexadecimal notation, and the count starts at 0), causing the function pointed to by the 20th vector in the interrupt table to be executed. INT is widely used in real mode. In protected mode, INT is still available but SYSENTER/SYSEXIT or SYSCALL/SYSRET is more commonly used due to efficiency reasons.
где X – номер программного прерывания, которое необходимо сгенерировать (от 0 до 255). Как и в машинной двоичной арифметике, номера прерываний часто записываются в шестнадцатеричной форме, которую можно обозначить префиксом 0x или суффиксом h. Например, INT 13H сгенерирует 20-е программное прерывание (0x13 – это девятнадцать (19) в шестнадцатеричной системе счисления, и отсчет начинается с 0), что приведет к выполнению функции, на которую указывает 20-й вектор в таблице прерываний. INT широко используется в реальном режиме. В защищенном режиме INT все еще доступен, но SYSENTER/SYSEXIT или SYSCALL/SYSRET используются чаще из соображений эффективности.
INT is an assembly language instruction for x86 processors that generates a software interrupt. It takes the interrupt number formatted as a byte value. When written in assembly language, the instruction is written like this:
INT X
where X is the software interrupt that should be generated (0 255). As is customary with machine binary arithmetic, interrupt numbers are often written in hexadecimal form, which can be indicated with a prefix 0x or with the suffix h. For example, INT 13H will generate the 20th software interrupt (0x13 is nineteen (19) in hexadecimal notation, and the count starts at 0), causing the function pointed to by the 20th vector in the interrupt table to be executed. INT is widely used in real mode. In protected mode, INT is still available but SYSENTER/SYSEXIT or SYSCALL/SYSRET is more commonly used due to efficiency reasons.
Реальный режим
При генерации программного прерывания процессор вызывает одну из 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.