For the purposes of this section, we will focus our examples on the Intel x86 architecture, although these examples apply to most other CPU architectures.
The original x86 architecture leveraged interrupts to provide system call ABIs. The APIs provided by the operating system would program specific registers on the CPU, and make a call to the operating system using an interrupt.
For example, using BIOS, an application could read data from a hard disk using int 0x13 with the following register layout:
- AH = 2
- AL: Sectors to read
- CH: Cylinder
- CL: Sector
- DH: Head
- DL: Drive
- ES:BX: Buffer address
The application author would use the read() API command to read this data, while under the hood, read() would perform ...