The best way to learn is by practising (and it doesn't apply just to computer science, it's the same for every single domain; whether it's hobby or professional!) - Grab documentation, tutorials (although it's recommended to have
textual tutorials instead of videos), example source code & even projects that uses the language(s) that you chose to learn; try to create/modify the source code and see what happens!
On the x86 architecture, I suggest you to start off by doing small programs on MS-DOS in
Real Mode with NASM - The best program that allows you to emulate (and not virtualize) an x86 machine with MS-DOS is
DOSBox; since it allows you to directly map folders & disk images to drive letters (for example, I can "mount" my home directory located in `/home/alex/` to drive letter C; that way I can then change my current drive to C: & thus I can access all of my files and run my assembled binaries from there!). There is a good tutorial about this software here:
https://www.dosbox.com/wiki/Basic_Setup ... _of_DosBoxThere is also a good website that lists all of the available interrupts in Real Mode here (yep, it's Ralf Brown's Interrupt List!):
http://www.ctyme.com/intr/cat.htm (although I
strongly recommend for beginners to use the "Category" section of the website instead of the "Interrupt table" section). When you choose a specific interrupt sub-routine, it tells you exactly what registers values to set & what interrupt to call; so this is really practical!
Once you have a bit of experience on this, you can try to make a simple boot sector that switches to
Protected Mode & displays "Hello World" without using the BIOS interrupts (since you can't use them anyways, unless if you enable the
Virtual 8086 Mode)! And then, you can try to do even more stuff from there
- There is a good article on the OSDev's wiki that talks about the boot sequence, so that can be also useful for you:
https://wiki.osdev.org/Boot_SequenceOf course if you don't want to learn how a BIOS-based boot strap works, you can directly skip to how UEFI manages the boot-loading sequence (and that can be understandable since UEFI is less requiring in knowledge, see this article for more information:
https://wiki.osdev.org/UEFI)
Anyways, that's what I suggest you to do but you are free to do whatever suits you the best - good luck & have fun in your operating system development journey