For example, in order to print a character to the console in real mode, we should set al
to a desired character, and ah
to 0x0e
, specify 0x10
as a interrupt vector. Although there's a site dedicated to this (such as Ralf Brown's Interrupt List), I rather want a formal documentation from Intel. Compared to a list of instruction set (which is formally documented), I'm having a hard time finding this. Does it ever exist?

- 2,271
- 1
- 15
- 32
-
@harold Then, how can I find those information (possibly formal)? I assumed that, although the implementation may differ by operating systems, the interface should coincide so that It can be logically provided by Intel... I'm a novice, so can you give me more insight? – eca2ed291a2f572f66f4a5fcf57511 Sep 04 '17 at 08:27
-
1No, the interface _won't_ coincide. Intel makes CPUs that can take interrupts, and the interrupt vector table formats are what is agreed between Intel and the rest of the world. But what values go in which registers at an interrupt is an arbitrary choice made by the BIOS writer (**not** Intel) for any of a number of reasons known only to themselves. Because the BIOS writers aren't required to publicly reveal their interrupt list, what you're looking for may never have been formally published, although it may have been reverse engineered multiple times. – Iwillnotexist Idonotexist Sep 04 '17 at 09:46
1 Answers
Several articles in Wikipedia mention the document called "Intel® 64 and IA-32 Architectures Developer's Manual".
The part 6.15 in the volume 3 (page 2859) is called "EXCEPTION AND INTERRUPT REFERENCE". The document is far less exhaustive, however, it lists the proper information which should be defined by Intel. Of course, if one needs to find a clue on some interrupt, say, 0x80 with respect to a certain OS, it will be incorrect to expect such information to come from Intel. So, the document states clearly that interrupts 32-255 are user defined. At the same time, Ralf Brown's interrupt list is meant to encompass information from different sources (both official and unofficial, documented and undocumented), so, in example, the reference for 0x80 on this page lists Linux and BSD system calls among the other options. Hence, if your intention is to find information to assist a certain development process, it might be fairly good to use Ralf Brown's list.
-
In fact, I've already looked over the specific part you just mentioned, but I couldn't understand what that meant in the first place, since I have zero background in this field. Now that you gave me some overview that ties everything together, it's stating to make sense to me. – eca2ed291a2f572f66f4a5fcf57511 Sep 04 '17 at 09:37
-
However, I have to ask you that, what does `user-defined` mean specifically? Is it by operating system, bios, or something else? What should I consult to, when I need to see a complete list of interrupts available? I'm using _bochs_ in school project in order to make a small operating system. Does _bochs_ come with a pre-defined list of interrupts available? – eca2ed291a2f572f66f4a5fcf57511 Sep 04 '17 at 09:42
-
I'd suggest to retain the term `user-defined` as one having some generic sense. Indeed, it may come from OS, BIOS and from elsewhere. In example, if we take a glance at [this](http://www.ctyme.com/intr/int-80.htm) page one more time, we'll see that, in example, BIOS is also mentioned there alongside with some drivers (which also could be the "users"). Also, to make a better example I'd like to reference the section 1.6. "The BTX server" from [this](https://www.freebsd.org/doc/en/books/arch-handbook/book.html) page: – Sep 04 '17 at 10:00
-
Here is an interesting excerpt from that page: `"The BTX server prepares a simple environment and switches from 16-bit real mode to 32-bit protected mode, right before passing control to the client. This includes initializing and updating the following data structures: Modifies the Interrupt Vector Table (IVT). The IVT provides exception and interrupt handlers for Real-Mode code.` So, when the OS boots, a data structure called "Interrupt Vector Table" (IVT) is modified. Here is where the `user-defined` interrupts comes from in the context of FreeBSD. – Sep 04 '17 at 10:06
-
As for `bochs`, I'm afraid I can't opine specifically, but, perhaps, it also could deal with CPU control data structures. – Sep 04 '17 at 10:06