INT (instrucció x86)

De la Viquipèdia, l'enciclopèdia lliure

INT és una instrucció de llenguatge ensamblador per a processadors x86 que genera una interrupció de programari. Pren el número d'interrupció formatat com a valor de byte.[1]

Quan s'escriu en llenguatge ensamblador, la instrucció s'escriu així:

INT X

on X és la interrupció de programari que s'ha de generar (0-255).

Com és habitual amb l'aritmètica binària de màquina, els nombres d'interrupció sovint s'escriuen en forma hexadecimal, que es pot indicar amb un prefix 0x o amb el sufix h. Per exemple, INT 13H generarà la 20a interrupció de programari (0x13 és el número 19 -dinou - escrit en notació hexadecimal i el recompte comença amb 0), fent que la funció assenyalada pel 20è vector de la taula d'interrupcions sigui executat.[2]

INT s'utilitza àmpliament en mode real. En mode protegit, INT encara està disponible, però SYSENTER/SYSEXIT o SYSCALL/SYSRET s'utilitzen més habitualment per raons d'eficiència.[3]

Mode real[modifica]

Quan es genera una interrupció de programari, el processador crida a una de les 256 funcions assenyalades per la taula d'adreces d'interrupció, que es troba en els primers 1024 bytes de memòria mentre està en mode real (vegeu Vector d'interrupció). Per tant, és totalment possible utilitzar una instrucció de trucada llunyana per iniciar la funció d'interrupció manualment després de prémer el registre de senyalització.

Un exemple d' interrupció útil del programari DOS va ser la interrupció 0x21. En cridar-lo amb diferents paràmetres als registres (principalment ah i al), podríeu accedir a diverses operacions d'IO, sortida de cadena i més.

La majoria de sistemes i derivats Unix no utilitzen interrupcions de programari, amb l'excepció de la interrupció 0x80, que s'utilitza per fer crides al sistema. Això s'aconsegueix introduint un valor de 32 bits corresponent a una funció del nucli al registre EAX del processador i després executant INT 0x80.

INT3[modifica]

La instrucció INT13 és una instrucció d'un byte definida per a l'ús dels depuradors per substituir temporalment una instrucció en un programa en execució per tal d'establir un punt d'interrupció del codi. Les instruccions XXh es codifiquen amb dos bytes. Això fa que no siguin adequats per utilitzar-los en instruccions de pedaç (que poden tenir un byte de llarg); veure SIGTRAP.

El codi operatiu per a INT3 és 0xCC, a diferència del codi operatiu per a INT immediate8, que és 0xCD immediate8. Com que el codi operatiu 0xCC dedicat té algunes propietats especials desitjades per a la depuració, que no són compartides pel codi operatiu normal de dos bytes per a un INT3, els assembladors normalment no generen de forma genèrica el codi 0xCD 0x03.[4]

INTO[modifica]

La instrucció INTO és una altra instrucció d'un byte. És una interrupció condicional que s'activa quan s'estableix la bandera de desbordament en el moment d'executar aquest codi operatiu. Això indica implícitament la interrupció #4.

El codi operatiu per a INTO és 0xCE, però no està disponible en mode x86-64.

Referències[modifica]

  1. Intel® 64 and IA-32 Architectures Software Developer's Manual. 2. Intel Corporation, September 2016, p. 3-457. 
  2. «INT n/INTO/INT3/INT1 — Call to Interrupt Procedure» (en anglès). [Consulta: 3 desembre 2023].
  3. «X86 Opcode and Instruction Reference» (en anglès). [Consulta: 3 desembre 2023].
  4. Intel® 64 and IA-32 Architectures Software Developer's Manual (en anglès). 2. Intel Corporation, September 2016, p. 3-457.