.section .text isr: pushal // save registers pushl %esp add $32, (%esp) call handle_interrupt add $4, %esp popal // restore registers add $8, %esp iret #define ISR_ERRCODE(ISR_NAME, INT_CODE) \ .global ISR_NAME; \ ISR_NAME:; \ pushl $INT_CODE; \ jmp isr; \ #define ISR_NO_ERRCODE(ISR_NAME, INT_CODE) \ .global ISR_NAME; \ ISR_NAME:; \ pushl $0; \ pushl $INT_CODE; \ jmp isr; \ // intel-defined ISR_NO_ERRCODE(int_de, 0) ISR_NO_ERRCODE(int_db, 1) ISR_NO_ERRCODE(int_nmi, 2) ISR_NO_ERRCODE(int_bp, 3) ISR_NO_ERRCODE(int_of, 4) ISR_NO_ERRCODE(int_br, 5) ISR_NO_ERRCODE(int_ud, 6) ISR_NO_ERRCODE(int_nm, 7) ISR_ERRCODE(int_df, 8) ISR_ERRCODE(int_ts, 10) ISR_ERRCODE(int_np, 11) ISR_ERRCODE(int_ss, 12) ISR_ERRCODE(int_gp, 13) ISR_ERRCODE(int_pf, 14) ISR_NO_ERRCODE(int_mf, 16) ISR_ERRCODE(int_ac, 17) ISR_NO_ERRCODE(int_mc, 18) ISR_NO_ERRCODE(int_xm, 19) ISR_NO_ERRCODE(int_ve, 20) // user-defined ISR_NO_ERRCODE(pic_pit, 32) ISR_NO_ERRCODE(pic_keyboard, 33)