Assembly Language & x86 Low-Level Systems Programming · Lezione

Il Programmable Interrupt Controller (PIC) e l’APIC

Scopra come le richieste di interrupt hardware raggiungono la CPU attraverso il PIC 8259 e il moderno APIC, incluso il rimappamento degli IRQ, il masking e il segnale di fine interrupt.

Lezione 4 di 413 passaggi

Il Programmable Interrupt Controller (PIC) e l’APIC è una lezione Assembly Language & x86 Low-Level Systems Programming gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Assembly Language & x86 Low-Level Systems Programming, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Assembly Language & x86 Low-Level Systems Programming include 4 lezioni in totale.

Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.

Why a Controller Is Needed

The CPU has only a single hardware interrupt pin (INTR), yet a PC has dozens of devices that need attention. A dedicated chip multiplexes these IRQ lines onto that one pin and tells the CPU which device fired.

That chip is the Programmable Interrupt Controller (PIC).

The Legacy 8259 PIC

The classic PC uses two cascaded 8259A chips, giving 15 usable IRQ lines (IRQ0-IRQ15). The master handles IRQ0-7, the slave IRQ8-15 connected through IRQ2.

  • IRQ0 = system timer
  • IRQ1 = keyboard
  • IRQ14/15 = ATA disks

I/O Ports of the PIC

Each PIC is programmed through two I/O ports:

  • Master: command 0x20, data 0x21
  • Slave: command 0xA0, data 0xA1

You send Initialization Command Words (ICWs) and Operation Command Words (OCWs) to these ports.

IRQ Remapping

On boot the PIC maps IRQ0-7 onto interrupt vectors 8-15 — which collide with CPU exceptions like the double fault (vector 8). Kernels remap the PIC, typically to vectors 0x20-0x2F, to avoid this clash.

Remapping in Assembly

Remapping is an ICW sequence: start init, set the new vector offset, define cascade wiring, set 8086 mode.

mov al, 0x11      ; ICW1: begin init, expect ICW4
out 0x20, al      ; master command
out 0xA0, al      ; slave command
mov al, 0x20      ; ICW2: master vector offset 0x20
out 0x21, al
mov al, 0x28      ; ICW2: slave vector offset 0x28
out 0xA1, al

Masking Interrupts

The Interrupt Mask Register (IMR) lets you disable individual IRQ lines. Writing a 1 to a bit masks (ignores) that line; 0 enables it.

in al, 0x21       ; read current master mask
or al, 0x02       ; set bit 1 -> mask IRQ1 (keyboard)
out 0x21, al      ; write it back

End of Interrupt (EOI)

After servicing an IRQ the handler must send an End Of Interrupt command, or the PIC will not deliver further interrupts on that line.

For IRQ8-15 you must EOI both the slave and the master.

mov al, 0x20      ; non-specific EOI
out 0x20, al      ; tell master we are done

Limitations of the PIC

The 8259 design is single-CPU only and supports just 15 lines. It cannot route interrupts to different cores, which makes it useless for SMP systems.

This is why modern hardware moved to the APIC.

The APIC Architecture

The Advanced Programmable Interrupt Controller has two parts:

  • Local APIC — one per CPU core, handles the timer and inter-processor interrupts (IPIs)
  • I/O APIC — routes external device IRQs to any core

Local APIC and IPIs

The Local APIC is memory-mapped (default base 0xFEE00000). It provides a per-core timer and lets one core signal another via an IPI through the Interrupt Command Register — essential for waking up cores during boot.

Disabling the PIC for APIC

To use the APIC you mask all PIC lines by writing 0xFF to both data ports, then enable the Local APIC via the spurious interrupt vector register. Modern OSes prefer the APIC for multicore scaling.

mov al, 0xFF
out 0x21, al      ; mask all master IRQs
out 0xA1, al      ; mask all slave IRQs

Quick Check

Test your understanding of the PIC.

Recap

You learned how device IRQs reach the CPU:

  • The 8259 PIC multiplexes 15 IRQ lines onto one CPU pin
  • IRQs are remapped to vectors 0x20-0x2F to avoid exception clashes
  • The IMR masks lines; an EOI ends each interrupt
  • The APIC replaces the PIC for multicore routing and IPIs
Gratis per iniziare

Impara Assembly con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
12
Lezioni
48

Domande Frequenti

La lezione «Il Programmable Interrupt Controller (PIC) e l’APIC» è gratuita?

Sì — il testo completo di «Il Programmable Interrupt Controller (PIC) e l’APIC» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Assembly Language & x86 Low-Level Systems Programming, passa a CoddyKit PRO. Il corso Assembly Language & x86 Low-Level Systems Programming include 4 lezioni in totale.

Cosa imparerò in «Il Programmable Interrupt Controller (PIC) e l’APIC»?

Scopra come le richieste di interrupt hardware raggiungono la CPU attraverso il PIC 8259 e il moderno APIC, incluso il rimappamento degli IRQ, il masking e il segnale di fine interrupt. Eserciti Assembly Language & x86 Low-Level Systems Programming con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Assembly Language & x86 Low-Level Systems Programming?

Non è richiesta alcuna esperienza precedente. Assembly Language & x86 Low-Level Systems Programming su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Il Programmable Interrupt Controller (PIC) e l’APIC»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Assembly Language & x86 Low-Level Systems Programming?

Sì. Ogni lezione Assembly Language & x86 Low-Level Systems Programming include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Comprendere interrupt e trap
  2. Interrupt Descriptor Table (IDT)
  3. Gestori di eccezioni personalizzati
  4. Il Programmable Interrupt Controller (PIC) e l’APIC
← Torna a Assembly Language & x86 Low-Level Systems Programming