BIOS odpowiada zazwyczaj za komunikację między programem a urządzeniami. Udostępnia on zazwyczaj swój interfejs i umożliwia dostęp do sprzętu bez bezpośredniego odwoływania się do niego.
BIOS zawiera sterowniki najczęściej używanych urządzeń, na przykład:
Ponieważ BIOS oferuje większą abstrakcję niż "goły" komputer, używanie jego funkcji w swoich programach gwarantowało kiedyś ich większą przenośność. Dziś system operacyjny komunikuje się raczej bezpośrednio z urządzeniami, by mieć nad nimi większą kontrolę i większy wpływ na szybkość wykonywanych operacji, a programy użytkownika nie korzystają w trybie chronionym z możliwości BIOSu.
BIOS zmienia kilka pozycji w tablicy przerwań wstawiając tam wskaźniki do swoich funkcji. Następnie system operacyjny (lub program, jeżeli system umożliwia wykonywanie przerwań, jak w systemie DOS) wywołuje przerwanie o określonym numerze (int 0xNUMER). W rejestrach ogólnego przeznaczenia przekazywane są parametry funkcji. BIOS wykonuje funkcję i wraca wykonując instrukcję procesora IRET.
Bios trzyma swoje zmienne w specjalnym obszarze pamięci od adresu 0040:0000. Zmienne te można zarówno odczytywać jak i modyfikować. Wywołania funkcji BIOSu mogą powodować ich zmianę, co należy brać pod uwagę przy pisaniu programów zapisujących tam wartości.
W poniższej tabeli znajdują się przykładowe przesunięcia względem adresu 0040:0000 oraz ich znaczenia.
| Przesunięcie | Znaczenie |
| 0x0000 | Adresy wejścia/wyjścia dla portów szeregowych |
| 0x0008 | Adresy wejścia/wyjścia dla portów równoległych |
| 0x0017 | Słowo zawierające stan klawiatury |
| 0x001A | Początek bufora klawiatury |
| 0x001C | Koniec bufora klawiatury |
| 0x001E | Bufor klawiatury (32 bajty) |
| 0x003F | Jeden bajt - stan silników stacji dysków |
| 0x004E | Początek obrazu ekranu w pamięci karty graficznej |
| 0x006B | Ostatnie przerwanie sprzętowe, np. bit 5 ustawiony na 1 oznacza wystąpienie przerwania IRQ 5, |
| 0x0074 | Stan ostatniej operacji dyskowej (po int 0x13), np. 0x4 to błąd "sektor nie istnieje" |
| 0x0075 | Ilość twardych dysków w systemie |
| 0x0078 | Przekroczenie czasu oczekiwania w porcie równoległym numer 1 |
| 0x008B | Bajt konfiguracji stacji dysków, np. bity 7-6 oznaczaja predkosc przesyłu danych do kontrolera (np. 00 - 500 Kbit/sek, 01 - 300 Kbit) |
| 0x008C | Bajt stanu kontrolera twardego dysku |
| 0x0096 | Flagi stanu klawiatury, np. bit 3 jest równy 1, gdy wciśnięto prawy klawisz Alt |
| 0x0097 | Flagi stanu klawiatury, bit 2 to zapalona dioda Caps Lock, bit 1 to dioda Num Lock, bit 0 to dioda Scroll Lock, bit 7 to błąd przesyłu z klawiatury |
Tablica przerwań znajduje się w pamięci operacyjnej na początku pamięci (pod adresem 0) i zajmuje jeden kilobajt. Jest tam 256 wskaźników do funkcji wywoływanych przez przerwania programowe. Każdy wskaźnik zajmuje cztery bajty. Tak jest oczywiście tylko w trybie rzeczywistym.
Poniżej znajduje się tabela z listą przerwań BIOSu.
| Numer przerwania |
Opis przerwania |
| 0x0 | Przerwanie dzielenia przez zero |
| 0x1 | Praca krok po kroku |
| 0x2 | Non-maskable interrupt (przerwanie niemaskowalne) |
| 0x3 | Trap (pułapka), przydatne przy odpluskwianiu |
| 0x4 | Nadmiar |
| 0x5 | PrintScreen (Drukowanie ekranu) |
| 0x6 | Zarezerwowane |
| 0x7 | Zarezerwowane |
| 0x8 | IRQ 0 - zegar systemowy |
| 0x9 | IRQ 1 - klawiatura |
| 0xA | IRQ 2 - zarezerwowane |
| 0xB | IRQ 3 - łącze szeregowe 2 |
| 0xC | IRQ 4 - łącze szeregowe 1 |
| 0xD | IRQ 5 - łącze równoległe 2 |
| 0xE | IRQ 6 - sterownik dyskietek |
| 0xF | IRQ 7 - łącze równoległe 1 |
| 0x10 | Karta graficzna |
| 0x11 | Do odczytu konfiguracji |
| 0x12 | Wielkość pamięci konwencjonalnej |
| 0x13 | Przerwanie do obsługi dysków twardych |
| 0x14 | Port szeregowy |
| 0x15 | Inne funkcje |
| 0x16 | Funkcje klawiatury |
| 0x17 | Funkcje drukarki |
| 0x18 | Wywołanie ekranu konfiguracyjnego BIOSu |
| 0x19 | Ładowanie systemu operacyjnego |
| 0x1A | Funkcje dotyczące zegara |
| 0x1B | Przerwanie Ctrl+Break |
| 0x1C | Przerwanie zegara czasu rzeczywistego |
| 0x1D | Ustawienia sterownika graficznego |
| 0x1E | Ustawienia napędu stacji dysków |
| 0x1F | Wskaźnik na tablicę rozszerzonych znaków ASCII |
Jak widać, przy pomocy funkcji BIOSu można całkiem dużo zrobić. Całkiem ciekawym zastosowaniem jest programowanie karty VGA - jest to proste, a napisane dla niej programy zadziałają na dowolnym komputerze (uruchomione w trybie rzeczywistym, bo w chronionym zazwyczaj nie ma dostępu do funkcji BIOSu). Oto przykład programu przełączającego kartę VGA w tryb 320x200:
mov ax, 0x13 int 0x10
Później wystarczy jedynie ustawić paletę kolorów i umieszczać wartości w pamięci karty graficznej od adresu 0xA000. Jest to bardzo wygodne i działa z każdą kartą VGA. Z tego powodu powstało wiele programów i gier wykorzystujących tę funkcję BIOSu.