Differenza tra Istruzioni RET e IRET nel Microprocessore 8086
Istruzioni di Ritorno in 8086: RET vs. IRET
Entrambe le istruzioni restituiscono il controllo da una procedura/interrupt, ma differiscono nel ripristino del contesto.
RET (Return from Subroutine)
- Scopo: Ritorno da CALL (near/far).
- Azione: Fa pop di IP (near) o CS:IP (far) dallo stack.
- Stack: Il chiamante spinge l'indirizzo di ritorno; RET lo fa pop.
- Flag: Non modifica il registro flag.
- Varianti: RET (near), RET n (fa pop di n byte dopo il ritorno), RETF (far).
IRET (Interrupt Return)
- Scopo: Ritorno da handler di interrupt (hardware INT, software INT, eccezione).
- Azione: Fa pop di IP, CS, FLAGS (in quest'ordine) dallo stack.
- Frame Stack (spinto dalla CPU sull'interrupt):
FLAGS CS IP
(Più codice errore per alcune eccezioni.) - Ripristina: Stato completo del processore (segmento, instruction pointer, tutti i flag: IF, TF, CF, ecc.).
- Obbligatorio per riabilitare gli interrupt (IF=1) se l'handler li ha disabilitati.
Tabella Comparativa
| Caratteristica | RET | IRET |
|---|---|---|
| Fa pop di IP | Sì | Sì |
| Fa pop di CS (far) | Sì (RETF) | Sì |
| Ripristina FLAGS | No | Sì |
| Usato Per | CALL (subroutine) | INT / Eccezione / NMI |
| Abilitazione Interrupt (IF) | Inalterata | Ripristinata dallo stack |
| Controllo Privilegio | No | Sì (se cambio CPL) |
Chiave di Lettura
IRET ripristina FLAGS; RET no. Questo è critico perché gli handler di interrupt spesso cancellano IF (disabilitano gli interrupt) e modificano altri flag. IRET assicura che il codice interrotto riprenda con lo stato esatto dei flag. Usare RET in un ISR lascerebbe IF=0, congelando il sistema.
Aggiunte in Modalità Protetta
- IRET può cambiare il livello di privilegio (ritorno in modalità utente dal kernel). Carica SS:ESP dallo stack se cambia il DPL.
- RET non può cambiare il CPL.
- Gli interrupt Task Gate usano IRET per cambiare task (legacy).
Nella moderna x86-64, SYSRET/SYSEXIT sostituiscono IRET per il rapido ritorno dalle syscall, ma IRET rimane per interrupt/eccezioni.