BITS 16 ORG 0x7C00 SECTION .text JMP SHORT Main ;-----------------------------------------------------------------------------; ; MAIN -- Devinez ce que ça fait ^^' ; ;-----------------------------------------------------------------------------; Main: MOV AL, 00010001b OUT 0x20, AL OUT 0xA0, AL MOV AL, 0x18 OUT 0x21, AL MOV AL, 0x20 OUT 0xA1, AL MOV AL, 00000100b OUT 0x21, AL MOV AL, 0x02 OUT 0xA1, AL MOV AL, 00000001b OUT 0x21, AL OUT 0xA1, AL MOV AL, 11111110b OUT 0x21, AL MOV AL, 11111111b OUT 0xA1, AL MOV WORD [0x60], Isr_Pit MOV WORD [0x62], 0x0000 M_il: HLT JMP M_il ;-----------------------------------------------------------------------------; ; ISR_PIT -- Gère les interruptions du PIT de façon originale ; ;-----------------------------------------------------------------------------; Isr_Pit: CLI MOV SI, FirstString CALL Print_String MOV SI, SecondString CALL Print_String MOV AL, 0x20 OUT 0x20, AL STI IRET ;-----------------------------------------------------------------------------; ; PRINT_STRING (DS:SI String) -- Imprime une châine de caractère à l'écran ; ;-----------------------------------------------------------------------------; Print_String: PUSH AX PUSH BX PUSH SI MOV AH, 0x0e MOV BH, 0x00 MOV BL, 0x07 MOV AL, [BYTE SI] CMP AL, 0x00 JE PS_end PS_loop: INT 0x10 ADD SI, 0x01 MOV AL, [BYTE SI] CMP AL, 0x00 JNE PS_loop PS_end: POP SI POP BX POP AX RET SECTION .data FirstString: db 'I caught an interruption from the PIT !!!', 0 SecondString: db ' ', 0