>> Tecnologia Eletrônica >  >> Áudio Residencial >> Amplificadores

Diferença Entre Instruções RET e IRET no Microprocessador 8086

Instruções Retorno no 8086: RET vs. IRET

Ambas instruções retornam controle de procedimento/interrupção, mas diferem em restauração de contexto.

RET (Return from Subroutine)

  • Propósito: Retorno de CALL (near/far).
  • Ação: Desempilha IP (near) ou CS:IP (far) da stack.
  • Stack: Caller empilha endereço retorno; RET desempilha.
  • Flags: Não modifica registrador flags.
  • Variantes: RET (near), RET n (desempilha n bytes após retorno), RETF (far).

IRET (Interrupt Return)

  • Propósito: Retorno de handler interrupção (hardware INT, software INT, exceção).
  • Ação: Desempilha IP, CS, FLAGS (nesta ordem) da stack.
  • Stack Frame (empilhado pela CPU na interrupção):
    FLAGS CS IP 
    (Mais error code para algumas exceções.)
  • Restaura: Estado completo processador (segmento, instruction pointer, todas flags: IF, TF, CF, etc.).
  • Necessário para re-habilitar interrupções (IF=1) se handler desabilitou.

Tabela Comparação

FeatureRETIRET
Desempilha IPSimSim
Desempilha CS (far)Sim (RETF)Sim
Restaura FLAGSNãoSim
Usado ParaCALL (subrotinas)INT / Exceção / NMI
Interrupt Enable (IF)InalteradoRestaurado da stack
Verificação PrivilégioNãoSim (se mudança CPL)

Insight Chave

IRET restaura FLAGS; RET não. Crítico porque handlers interrupção frequentemente limpam IF (desabilitam interrupções) e modificam outras flags. IRET garante código interrompido retoma com estado exato flags. Usar RET em ISR deixaria IF=0, congelando sistema.

Adições Modo Protegido

  • IRET pode mudar nível privilégio (retorno user mode de kernel). Carrega SS:ESP da stack se mudança DPL.
  • RET não pode mudar CPL.
  • Interrupções Task Gate usam IRET para trocar tasks (legado).

Em x86-64 moderno, SYSRET/SYSEXIT substituem IRET para syscall return rápido, mas IRET permanece para interrupções/exceções.