BIOS/DOS services are called via "software interrupts," i.e. the INT instruction. For example, service number 16H, subservice 04H, controls the keyboard click. To turn the click off, we would have the code MOV AH,4 ; subservice 4 MOV AL,0 ; turn off the click INT 16H ; call service 16 It would be inconvenient to have to add assembly-language subroutines to a C program whenever we needed an OS service. So, C compilers for DOS feature a library call int86(). Here is how we could do the above in C: #include union REGS InRegs,OutRegs; ... (intervening code) InRegs.x.ax = 0x40; int86(0x16,&InRegs,&OutRegs); (Here is a test of your knowledge of C: Why SPECIFICALLY do we need to include dos.h?) The REGS union form is required for the second and third parameters of int86(). It has fields for the various 80x86 registers (except for segment registers, for which there is an SREGS union). The second parameter is used to put values in the registers before the INT is done. The third parameter is used to retrieve values from registers after the INT is done (since many OS services have return values, which are returned via registers, though not in the keyclick case).