What a fantastic series of videos, they really tickle my tech curiousity. Everything I've been puzzled by is explained so well. Thank you for making these
This is brilliant. All the other tutorials are messy file trees, horrible code, and hard to follow. This is perfect, easy to do, and the teacher is great. Keep going dude!
loved this! back in 1985 i built an 8-bit z80 computer on breadboard (with a 1k static-ram chip) and had to program the RAM chip using 8 dip-switches (no assember) just in pure binary! it took hours to write code similar to this. after writing the binary code to RAM, i would then send a signal to the RES pin on the CPU to begin the instruction pointer (IP) at zero and begin execution of the code. all i had was an array of 8 led's as my output display. the code I wrote made the led's flash from left to right and vice versa, amazing days! this brings it all back! 😊 ps. i had to clock the z80 cpu at only 1 instruction per second (1hz) to be able to see the led lights move and the z80 assembly for that code was something like: l0: ld b,7 ld a,128 l1: out 0,a rra djnz l1 ld b,7 l2: rla out 0,a djnz l2 jp l0 (program size was just 21 bytes lol!)
You did programming as von Neumann and the lord above us intended it, binary input, binary output, nothing else but switches and lights. A truly enlightening experience for anyone seeking the raw essence of what programming is. Its flicking switches to convince lights to blink in the right pattern.
I'm literally into tears 😭 ... Overwhelmed by grateful emotions ☺️😌 ... Can't believe you put it for free on RUclips! Thank You man, I can't thank you enough... !❣️🙏🏾🙏🏾
If anything RUclips does good from time to time, is that he suggested this to me. I highly valuate this type of content, and as a developer and a lover of coding I have a big respect to this type of talented people, its way out of my league to do such things, even that like 25 years ago when started coding using basic 1, I had such ideas 😅, now you know the life took me, and have to pay the bills so I am a web dev, thankfully I am still in the coding family. Big love and respect bro ❤
It's really good to see people having fun with Assembly like this. I know we live in the age of languages like Python and Assembly can be a frustrating, painfully slow, counterintuitive language at times that tests your patience and confidence when things don't work, but I think everyone who enjoys programming should learn to work with at least one instruction set and experiment with it like this. Just mess around, play with it. At the end of the day we're just kids playing with really complicated toys and making them do tricks when we program anyway.
Hey Nanobyte, you are one of the best and most underrated OSDev channels on RUclips! You even inspired me to create a OSDev channel. Just need to find a easy to use video editor and it's done! BTW I am a Legacy BIOS Windows 10 user (and I will change to Linux in 2025)
Amazing video, I managed to follow along, and I even learned some more asm. I have always been kind annoyed with there being very few resources online for learning asm, so I barely know any, so nice to finally find a good resource.
Thank you VERY much for this series. I have mentioned wanting to get into OS design many times on other programming groups and been laughed at and mocked because why am I not in the kitchen making dinner lol. I've been writing in C and recently learning assembly, so now I will go back to them with an OS (after a few more years of this).
This video is gold for people who want to learn something new everyday, but unfortunately we live in a world where a tiktoker easily gets millions of followers but a youtuber hardly gets any recognition.
Recording videos was really stressful, especially when I started making videos. Today, I have a better workflow which helps a bit, but mistakes still happen.
It's a nice editor, but I don't use it as much nowadays, VSCode is just better. When I need a simple editor on linux, I always fallback to vim because it's always there preinstalled, and I've learned a few basic commands.
@@nanobyte-dev Totally understandable. I never did get productive with vim, unfortunately. But with micro, I was actually able to learn a lot of shortcuts, so I'm pretty productive. I go back and forth between that and VS Code because it genuinely is amazing.
This is awesome. I watch it, and get like 50% of it. Then I search for while and I understand it more. But it was till I start building my own floppy disk OS bootloader to understand it on 100% Thank you very much for this. It made me eager to learn more!
I really enjoy technical low-level programming projects that present the necessary theory and definitions. I hope to see you building a compiler for a toy language from scratch one day. Or a webbrowser :)
Wow, everything in 23 minutes, it took me several days, weeks, to find info and figure out how to create a bootloader exactly like this 17 years ago in the 2000s internet
Badass dude really badass, this is Bill Gates level of making an OS. I will be looking forward to this. I am an Windows and Linux user so i play around with virtual machines so this should come out simple for me. Can't wait to make my own OS
There are some areas where they are useful, like memory management, or process scheduling. Also keep in mind that when you are building an OS you don't have the standard libraries, and you may need to implement some of these yourself. The good part is that there are a lot of resources available online, so you can learn them as you go.
This is a brilliant introduction to building an OS. I will look forward to working through the rest of the series of videos in an attempt to build my own PJR-DOS! My only criticsm is that I am building my OS in one virtual machine, and running it in another virtual machine, and all the while I have your video windowed in a third corner of my screen. Because you're using a 'black screen' for your coding, it is very difficult to see what you're typing some times (especially when the text is in red). I know I can download and look at your source code (and have done), but I'd really prefer to type in the commands in 'real time', so I can follow the stages you go though. I've yet to go through the other videos, but can I ask that when you do your next series, you can change your colours of your screen/text so that we can read the details, if at all possible, please? Otherwise, I look forward to going through the rest of your videos (and I've already 'subscribed' to your channel! A great 'thumbs up' from me!
When using VMware, it's actually faster to use PXE than going all the way to using floppy images, you just make an empty VM with a network card and you setup your Ubuntu as a BootP server + NFS server (in the old Sun style). From there, just reboot the VM, everything else is automatic, you can jump to 64-bit mode much earlier, even before you display anything. By the way, ISO images are also easy to generate and somewhat more "portable" than floppy images.
Wow amazing tutorials, I have previously written assembly bootloaders and a basic operating system more like a shell tbh and no one really explained about the syntax of certain assembly things like $ and $$, I knew I could jump to $ for a hlt but never what the $ - $$ did in the times loop and now I do!
12:30 Referencing a memory location: DS if unspecified? As long if BP is not used as an address register. Default seg reg for BP is SS if no segment override prefix is used. ;--.-.-- Intel manual: Instruction prefixes can be used to override the default operand size and address size of a code segment. These prefixes can be used in real-address mode as well as in protected mode and virtual-8086 mode. An operand-size or address-size prefix only changes the size for the duration of the instruction. The following two instruction prefixes allow mixing of 32-bit and 16-bit operations within one segment: •The operand-size prefix (66H) •The address-size prefix (67H) These prefixes reverse the default size selected by the D flag in the code-segment descriptor. ;--.-.-- So the only one difference between the 16 bit mode and the 32 bit mode is the default size selected by the D flag and how the operand size and address size prefixes reverse the default size if size prefixes are used or not used. ;--.-.-- Intel 80386+ A closer look to the possible sorts of bytes of one instruction: Instruction Prefix 0 or 1 Byte Address-Size Prefix 0 or 1 Byte Operand-Size Prefix 0 or 1 Byte Segment Prefix 0 or 1 Byte Opcode 1 or 2 Byte Mod R/M 0 or 1 Byte SIB, Scale Index Base (386+) 0 or 1 Byte Displacement 0, 1, 2 or 4 Byte (4 only 386+) Immediate 0, 1, 2 or 4 Byte (4 only 386+) Format of Postbyte(Mod R/M from Intel-manual) ------------------------------------------ MM RRR MMM MM - Memory addressing mode RRR - Register operand address MMM - Memory operand address RRR Register Names Filds 8bit 16bit 32bit 000 AL AX EAX 001 CL CX ECX 010 DL DX EDX 011 Bl BX EBX 100 AH SP ESP 101 CH BP EBP 110 DH SI ESI 111 BH DI EDI --- (Note: We observe the next two tables from the 16 bit address mode. The D flag in the code-segment descriptor is not set. The default size of memory access and the operand size (without size prefixes) is 16 bit.) 16bit memory (No 32 bit memory address prefix) MMM Default MM Field Field Sreg 00 01 10 11=MMM is reg 000 DS [BX+SI] [BX+SI+o8] [BX+SI+o16] 001 DS [BX+DI] [BX+DI+o8] [BX+DI+o16] 010 SS [BP+SI] [BP+SI+o8] [BP+SI+o16] 011 SS [BP+DI] [BP+DI+o8] [BP+DI+o16] 100 DS [SI] [SI+o8] [SI+o16] 101 DS [DI] [DI+o8] [SI+o16] 110 SS [o16] [BP+o8] [BP+o16] 111 DS [BX] [BX+o8] [BX+o16] Note: MMM=110,MM=0 Default Sreg is DS !!!! 32bit memory (Has 67h 32 bit memory address prefix) MMM Default MM Field Field Sreg 00 01 10 11=MMM is reg 000 DS [EAX] [EAX+o8] [EAX+o32] 001 DS [ECX] [ECX+o8] [ECX+o32] 010 DS [EDX] [EDX+o8] [EDX+o32] 011 DS [EBX] [EBX+o8] [EBX+o32] 100 SIB [SIB] [SIB+o8] [SIB+o32] 101 SS [o32] [EBP+o8] [EBP+o32] 110 DS [ESI] [ESI+o8] [ESI+o32] 111 DS [EDI] [EDI+o8] [EDI+o32] Note: MMM=110,MM=0 Default Sreg is DS !!!! --- SIB is (Scale/Base/Index) SS BBB III Note: SIB address calculated as: =+*(2^(Scale)) Fild Default Base BBB Sreg Register Note 000 DS EAX 001 DS ECX 010 DS EDX 011 DS EBX 100 SS ESP 101 DS o32 if MM=00 (Postbyte) SS EBP if MM00 (Postbyte) 110 SS ESI 111 DS EDI Fild Index III register Note 000 EAX 001 ECX 010 EDX 011 EBX 100 never Index SS can be 00 101 EBP 110 ESI 111 EDI Fild Scale coefficient SS =2^(SS) 00 1 01 2 10 4 11 8
I was sent here by a link in a comment written by someone named Tomi Ivaswort. I have no idea who you are, but I just want to say, thanks for that link.
Quick question, you put AX on the stack but then only write to AL so presumably AL is the only thing you have to put on the stack. I'm guessing you put AX on the stack though because you are working in 16 bit land and I guess whenever you put anything on the stack you are putting 16 bits there?
I've got kinda the same question. I mean, we set AX to 0 in the beginning. LODSB just uses AL. The interrupt uses just AL and AH. I've tried just removing the push and pop of AX and everything keeps working. So I am still a bit confused with that. Same to ES, which is also set to 0, but never used again. Also nothing changes if that line is removed. Could it be some sort of memory cleaning? Or some sort of measure to prevent weird behaviors?
Do you know how you could load this onto a usb and have it working on bare metal? I tried on linux using dd command, it does find boot sector but no string prints
whenever i get to the point of 8:55 and i try to test the operating system, i get an error saying "make: *** No targets specified and no makefile found. Stop." I've searched high and low over the internet and none of the recommendations work. If anyone one has any advice, that'd be greatly appreciated.
are you in the right directory where the makefile is? should look like something like this: . ├── build ├── makefile ├── readme.md └── src └── main.asm (i used the tree -L 2 command for it)
You can start with reading from the OSDev wiki, or following some text tutorials which will help you get started. The brokenthorn tutorial was my favorite. If you want to go into more depth and more theory, there are 2 great books that always get recommended, Modern Operating Systems by Andrew Tannenbaum and Operating System Concepts by Silberschatz. These are really good for theory, but maybe a bit difficult in practice. I know there is a good one about Minix, but haven't read it. I haven't really read any book related to operating systems (just partially read Tanenbaum's), but I would like to do that because I'm sure there are many things I could learn. I'm hoping to come back to this question in the future and come up with a better answer.
i had an error while running the qemu-system-i386 -fda build/main_floppy.img command,it shows Unable to init server: Could not connect: Connection refused WARNING: Image format was not specified for 'build/main_floppy.img' and probing guessed raw. Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. Specify the 'raw' format explicitly to remove the restrictions. gtk initialization failed running on ubuntu wsl which is on windows
It depends on X, and you don't have any X server running. Google how to run GUI programs in WSL. There may be other issues and limitations with WSL that I'm not aware of, so qemu may not run at all under it. The easiest alternative is to just use a Windows version of qemu.
Yes, maybe. But the difference is extremely small. If you're writing performance critical code, it might matter, but for this which just initializes the system and runs once, a few nanoseconds isn't a huge performance gain.
"so far our operating system does nothing and does it perfectly" top tier programming here
I loved it
The only time when an OS will be 100% bug and vulnerability free.
@@HaganeNoGijutsushi yeah
That would actually be a relief for it to do exactly what you expect 😀
99% of the time this doesn't happen
Yep sounds legit. About half of the demos I'm being shown.
This is the most complete video I've ever seen on building an OS. Thank you, sir! Don't stop, please
That’s what your mom said last night
He has stopped 😢
@@PoolNoodleOGAElmfao
He didnt stop here
@@PoolNoodleOGAEsasti backhodi
Absolutely adding this to the study list. I feel like this would probably be a great reference for delving further into CompSci
Do not waste your time on this crap
This is real computer science not website Makin
@@sastashroud7646you re-tard. The browsers are one the most complex systems out there.
That is the most complex "Hello, World" tutorial I've ever seen. Thank you for that
it's really rare to find quality videos in this topic.
Thank you sir for this excellent demo 🙏
just discovered this series , need to binge watch that now. This is so cool
What a fantastic series of videos, they really tickle my tech curiousity. Everything I've been puzzled by is explained so well. Thank you for making these
This is brilliant. All the other tutorials are messy file trees, horrible code, and hard to follow. This is perfect, easy to do, and the teacher is great. Keep going dude!
loved this! back in 1985 i built an 8-bit z80 computer on breadboard (with a 1k static-ram chip) and had to program the RAM chip using 8 dip-switches (no assember) just in pure binary! it took hours to write code similar to this. after writing the binary code to RAM, i would then send a signal to the RES pin on the CPU to begin the instruction pointer (IP) at zero and begin execution of the code. all i had was an array of 8 led's as my output display. the code I wrote made the led's flash from left to right and vice versa, amazing days! this brings it all back! 😊 ps. i had to clock the z80 cpu at only 1 instruction per second (1hz) to be able to see the led lights move and the z80 assembly for that code was something like: l0: ld b,7 ld a,128 l1: out 0,a rra djnz l1 ld b,7 l2: rla out 0,a djnz l2 jp l0 (program size was just 21 bytes lol!)
Wow... that's quite fascinating.
That's incredible, love it
wow
real programmer
You did programming as von Neumann and the lord above us intended it, binary input, binary output, nothing else but switches and lights.
A truly enlightening experience for anyone seeking the raw essence of what programming is. Its flicking switches to convince lights to blink in the right pattern.
i can say nothing more about this video other the "its perfect", the best OSDev tutorial i've seen yet. AMAZING
I'm literally into tears 😭 ... Overwhelmed by grateful emotions ☺️😌 ... Can't believe you put it for free on RUclips! Thank You man, I can't thank you enough... !❣️🙏🏾🙏🏾
You really sound like a bot rn
@@thewaterwave222 That's what she said bro 😭😅
ok bot
@@samarthtandale9121 thats what the [[BIG SHOT]] said
damn thats one useless bot
If anything RUclips does good from time to time, is that he suggested this to me. I highly valuate this type of content, and as a developer and a lover of coding I have a big respect to this type of talented people, its way out of my league to do such things, even that like 25 years ago when started coding using basic 1, I had such ideas 😅, now you know the life took me, and have to pay the bills so I am a web dev, thankfully I am still in the coding family.
Big love and respect bro ❤
Excellent Tutorial. I love how you explain everything you are doing, this is a much better tutorial then any of the others I have seen!
This is gold , Thank you for the efforts
It's really good to see people having fun with Assembly like this. I know we live in the age of languages like Python and Assembly can be a frustrating, painfully slow, counterintuitive language at times that tests your patience and confidence when things don't work, but I think everyone who enjoys programming should learn to work with at least one instruction set and experiment with it like this. Just mess around, play with it. At the end of the day we're just kids playing with really complicated toys and making them do tricks when we program anyway.
Hey Nanobyte, you are one of the best and most underrated OSDev channels on RUclips!
You even inspired me to create a OSDev channel. Just need to find a easy to use video editor and it's done!
BTW I am a Legacy BIOS Windows 10 user (and I will change to Linux in 2025)
Why 2025?
@@astric32dll thats the end of support for windows 10
@@antonGanG not anymore now it is end of 2023
Dual boot to get more familiar with Linux
Terry Davis would be proud. Now everyone can homebrew their own temple OS.
Amazing video, I managed to follow along, and I even learned some more asm.
I have always been kind annoyed with there being very few resources online for learning asm, so I barely know any, so nice to finally find a good resource.
I can already see that this is going to be easy with this tutorial! PLEASE DON'T STOP, KEEP UP THE GOOD WORK!
Hi! I thought this was great! I hope you'll make more some day. All the best from a fellow programmer(mostly c# :))!
this video is really good i never seen a complete video like this
this video would have saved me days of research if i knew it before i got into operating systems. Very consise and coherent, 10/10
Thank you VERY much for this series. I have mentioned wanting to get into OS design many times on other programming groups and been laughed at and mocked because why am I not in the kitchen making dinner lol. I've been writing in C and recently learning assembly, so now I will go back to them with an OS (after a few more years of this).
have you completed your os?
@@spytonic4171 Not even close. Life got in the way, but I am picking it back up now.
This video is gold for people who want to learn something new everyday, but unfortunately we live in a world where a tiktoker easily gets millions of followers but a youtuber hardly gets any recognition.
Nice video...
Looking forward to see how this progresses...
Made 4 yrs ago, I'll check your channel for other updates...
Thanks for the start. 👌
You explained the most complicated subject like it's a piece of cake. Hats off to you man !!
This video deserves millions of likes ☘☘
I have no idea what I'm watching, but I'm here for it lol. I have a lot to learn.
Randomly youtube recommended me this video. I wont try to build an OS but I always wondered how it works, thank you
the title is literally the content of the the video, you are amazing :) , dont stop never
I like this guy, he hesitates and still gets it wrong (13:29), but all in all good tutorial
Recording videos was really stressful, especially when I started making videos. Today, I have a better workflow which helps a bit, but mistakes still happen.
This is the perfect level of explanation for me, thanks!
Thank you for making this tutorial. Now I learned a lot of things that will be useful for me
YOU ARE A LEGEND ONLY THIS ONE WORKED PERFECTLY!!!!! THANK YOU!!!!
Finally, someone who appreciates micro. I absolutely love it.
It's a nice editor, but I don't use it as much nowadays, VSCode is just better. When I need a simple editor on linux, I always fallback to vim because it's always there preinstalled, and I've learned a few basic commands.
@@nanobyte-dev Totally understandable. I never did get productive with vim, unfortunately. But with micro, I was actually able to learn a lot of shortcuts, so I'm pretty productive. I go back and forth between that and VS Code because it genuinely is amazing.
@@trebabcock I Agree, My Chromebook Sucks At Running VS code, And Micro Is Much Better, Yes, Understandable.
That is one of the best tutorials of a complex subject I have ever watched. Kudos! 👏
This is a wonderful video, friend! Thank you for doing these videos, I'm loving them!
I love this, please keep doing this kind of tutorial
A stack is LIFO (last-in-first-out), not FIFO. The FIFO equivalent is called a queue.
Lov u
Yes I came down here to make this exact comment.
at least the animations were right
thank you, I was thinking the same thing !
This is awesome. I watch it, and get like 50% of it. Then I search for while and I understand it more. But it was till I start building my own floppy disk OS bootloader to understand it on 100% Thank you very much for this. It made me eager to learn more!
Thanks!
🤑🤑
Wow, thank you very much, you are very kind.
This made me actually understand kind of how an is works and I already have an idea of how a kernel works too
The best video for begginers about this topic!! Excellent!
Cool Thank you so much you are the best person who has explained assembly:)
I've been searching for ages to find something like this
just amazing!!!! in 17:11 u mentioned stack as fifo but it should be like LIFO right?
Yes, you are correct
just noticed the same :-)
I really enjoy technical low-level programming projects that present the necessary theory and definitions. I hope to see you building a compiler for a toy language from scratch one day. Or a webbrowser :)
this probably needed so much work thanks for the effort!
This is truly fascinating tutorial, congratulation
Wow, everything in 23 minutes, it took me several days, weeks, to find info and figure out how to create a bootloader exactly like this 17 years ago in the 2000s internet
Absolutely amazing video! Thank you loads!
6:50 fire voice crack 🔥🔥
Best for creating os. Please do more videos!
Very underrated
Thanks a lot sir, amazing explaination
Greatest stuff that i seen ever, man, continue plea
Very easy to follow instructions and explanations. One factual error: a stack is a LIFO not a FIFO.
waiting for the next video !!!!
17:04 *LIFO (Last In First Out). The FIFO is more for stream actions.
Rollercoaster Tycoon 2 was written entirely in Assembler. I cant even imagine how much work the guy put in this to make it happen.
Badass dude really badass, this is Bill Gates level of making an OS. I will be looking forward to this. I am an Windows and Linux user so i play around with virtual machines so this should come out simple for me. Can't wait to make my own OS
"so far our operating system does nothing and does it perfectly" wow incredible
This is great, thanks for teaching us. I thought it would have been funny if you used nano to build your os
Thank you so much for these videos!!
This tutorials are really awesome ! i just wanted to ask, is knowledge of Data structures and Algorithms are necessary for building an OS
There are some areas where they are useful, like memory management, or process scheduling. Also keep in mind that when you are building an OS you don't have the standard libraries, and you may need to implement some of these yourself. The good part is that there are a lot of resources available online, so you can learn them as you go.
@@nanobyte-dev thank you for your reply, you are doing great job for the community thank you so much!!
small correction about 7:11, the bios is actually looking for the bytes 55 AA, not AA 55
17:20 stack is LIFO(Last In First Out) not FIFO (First In First Out)
I actually followed this tutorial on android😂
Excellent tutorial 👍❤
There is probably absolutely no way you are making an OS on Android unless probably if you got an extremely high-end Phone.
@@CEJOPawHAR Samsung Galaxy A42 5G
This is a brilliant introduction to building an OS. I will look forward to working through the rest of the series of videos in an attempt to build my own PJR-DOS!
My only criticsm is that I am building my OS in one virtual machine, and running it in another virtual machine, and all the while I have your video windowed in a third corner of my screen. Because you're using a 'black screen' for your coding, it is very difficult to see what you're typing some times (especially when the text is in red). I know I can download and look at your source code (and have done), but I'd really prefer to type in the commands in 'real time', so I can follow the stages you go though. I've yet to go through the other videos, but can I ask that when you do your next series, you can change your colours of your screen/text so that we can read the details, if at all possible, please? Otherwise, I look forward to going through the rest of your videos (and I've already 'subscribed' to your channel!
A great 'thumbs up' from me!
just amazing
When using VMware, it's actually faster to use PXE than going all the way to using floppy images, you just make an empty VM with a network card and you setup your Ubuntu as a BootP server + NFS server (in the old Sun style). From there, just reboot the VM, everything else is automatic, you can jump to 64-bit mode much earlier, even before you display anything.
By the way, ISO images are also easy to generate and somewhat more "portable" than floppy images.
Wow amazing tutorials, I have previously written assembly bootloaders and a basic operating system more like a shell tbh and no one really explained about the syntax of certain assembly things like $ and $$, I knew I could jump to $ for a hlt but never what the $ - $$ did in the times loop and now I do!
FLIP db "blub blub"
fliplen = (FLIP - $)
$ is the current location in memory.
17:06 should it not be a filo manner?The stack works like first in last out or?
Great video, thank you. Subscribed!
12:30 Referencing a memory location: DS if unspecified?
As long if BP is not used as an address register. Default seg reg for BP is SS if no segment override prefix is used.
;--.-.--
Intel manual: Instruction prefixes can be used to override the default operand size and address size of a code segment. These prefixes can be used in real-address mode as well as in protected mode and virtual-8086 mode. An operand-size or address-size prefix only changes the size for the duration of the instruction.
The following two instruction prefixes allow mixing of 32-bit and 16-bit operations within one segment:
•The operand-size prefix (66H)
•The address-size prefix (67H)
These prefixes reverse the default size selected by the D flag in the code-segment descriptor.
;--.-.--
So the only one difference between the 16 bit mode and the 32 bit mode is the default size selected by the D flag and how the operand size and address size prefixes reverse the default size if size prefixes are used or not used.
;--.-.--
Intel 80386+
A closer look to the possible sorts of bytes of one instruction:
Instruction Prefix 0 or 1 Byte
Address-Size Prefix 0 or 1 Byte
Operand-Size Prefix 0 or 1 Byte
Segment Prefix 0 or 1 Byte
Opcode 1 or 2 Byte
Mod R/M 0 or 1 Byte
SIB, Scale Index Base (386+) 0 or 1 Byte
Displacement 0, 1, 2 or 4 Byte (4 only 386+)
Immediate 0, 1, 2 or 4 Byte (4 only 386+)
Format of Postbyte(Mod R/M from Intel-manual)
------------------------------------------
MM RRR MMM
MM - Memory addressing mode
RRR - Register operand address
MMM - Memory operand address
RRR Register Names
Filds 8bit 16bit 32bit
000 AL AX EAX
001 CL CX ECX
010 DL DX EDX
011 Bl BX EBX
100 AH SP ESP
101 CH BP EBP
110 DH SI ESI
111 BH DI EDI
---
(Note: We observe the next two tables from the 16 bit address mode. The D flag in the code-segment descriptor is not set. The default size of memory access and the operand size (without size prefixes) is 16 bit.)
16bit memory (No 32 bit memory address prefix)
MMM Default MM Field
Field Sreg 00 01 10 11=MMM is reg
000 DS [BX+SI] [BX+SI+o8] [BX+SI+o16]
001 DS [BX+DI] [BX+DI+o8] [BX+DI+o16]
010 SS [BP+SI] [BP+SI+o8] [BP+SI+o16]
011 SS [BP+DI] [BP+DI+o8] [BP+DI+o16]
100 DS [SI] [SI+o8] [SI+o16]
101 DS [DI] [DI+o8] [SI+o16]
110 SS [o16] [BP+o8] [BP+o16]
111 DS [BX] [BX+o8] [BX+o16]
Note: MMM=110,MM=0 Default Sreg is DS !!!!
32bit memory (Has 67h 32 bit memory address prefix)
MMM Default MM Field
Field Sreg 00 01 10 11=MMM is reg
000 DS [EAX] [EAX+o8] [EAX+o32]
001 DS [ECX] [ECX+o8] [ECX+o32]
010 DS [EDX] [EDX+o8] [EDX+o32]
011 DS [EBX] [EBX+o8] [EBX+o32]
100 SIB [SIB] [SIB+o8] [SIB+o32]
101 SS [o32] [EBP+o8] [EBP+o32]
110 DS [ESI] [ESI+o8] [ESI+o32]
111 DS [EDI] [EDI+o8] [EDI+o32]
Note: MMM=110,MM=0 Default Sreg is DS !!!!
---
SIB is (Scale/Base/Index)
SS BBB III
Note: SIB address calculated as:
=+*(2^(Scale))
Fild Default Base
BBB Sreg Register Note
000 DS EAX
001 DS ECX
010 DS EDX
011 DS EBX
100 SS ESP
101 DS o32 if MM=00 (Postbyte)
SS EBP if MM00 (Postbyte)
110 SS ESI
111 DS EDI
Fild Index
III register Note
000 EAX
001 ECX
010 EDX
011 EBX
100 never Index SS can be 00
101 EBP
110 ESI
111 EDI
Fild Scale coefficient
SS =2^(SS)
00 1
01 2
10 4
11 8
Good catch!
The best Tutorial guy!
16:40 I'm fairly sure you got this part backwards.
17:00 Also, the stack is "first in, last out", not "first in, first out", isn't it?
At 16:45, it should be right to left.
Thanks! That made good sense.
That was amazing man!
This channel is amazing. Keep the great work, mate!
Thats's fck'n awesome, i'm writting a compiler and the video is sooooo usefull
I love you man! Greetings from Serbia.
I was sent here by a link in a comment written by someone named Tomi Ivaswort. I have no idea who you are, but I just want to say, thanks for that link.
Good videos don't get old
Quick question, you put AX on the stack but then only write to AL so presumably AL is the only thing you have to put on the stack. I'm guessing you put AX on the stack though because you are working in 16 bit land and I guess whenever you put anything on the stack you are putting 16 bits there?
ah! forgot that AH is where OE goes!
I've got kinda the same question. I mean, we set AX to 0 in the beginning. LODSB just uses AL. The interrupt uses just AL and AH. I've tried just removing the push and pop of AX and everything keeps working. So I am still a bit confused with that.
Same to ES, which is also set to 0, but never used again. Also nothing changes if that line is removed.
Could it be some sort of memory cleaning? Or some sort of measure to prevent weird behaviors?
wow i just found this its awesome .
Do you know how you could load this onto a usb and have it working on bare metal? I tried on linux using dd command, it does find boot sector but no string prints
The best youtube channel ❤❤
Could dw 0AA55h also be written as dw 0xAA55 ? Do you know if the reason for this number is because it makes a nice pattern? 1010101001010101
Yes, those two notations mean the same thing. I never thought about those numbers, but the pattern makes sense.
whenever i get to the point of 8:55 and i try to test the operating system, i get an error saying "make: *** No targets specified and no makefile found. Stop." I've searched high and low over the internet and none of the recommendations work. If anyone one has any advice, that'd be greatly appreciated.
are you in the right directory where the makefile is?
should look like something like this:
.
├── build
├── makefile
├── readme.md
└── src
└── main.asm
(i used the tree -L 2 command for it)
Just type make Makefile
Good video Sir ! Btw do you recommend any books about things I should learn to better understand your tutorials ?
You can start with reading from the OSDev wiki, or following some text tutorials which will help you get started. The brokenthorn tutorial was my favorite. If you want to go into more depth and more theory, there are 2 great books that always get recommended, Modern Operating Systems by Andrew Tannenbaum and Operating System Concepts by Silberschatz. These are really good for theory, but maybe a bit difficult in practice. I know there is a good one about Minix, but haven't read it. I haven't really read any book related to operating systems (just partially read Tanenbaum's), but I would like to do that because I'm sure there are many things I could learn. I'm hoping to come back to this question in the future and come up with a better answer.
@@nanobyte-dev thanks ! I will take a look at these .
Well structure. Thank you very much
seems good. although, in diagram @9:29, i don't remember index registers (si,di), bp, sp, having a 8bit half counetrpart, they are 16bit only.
amazing ones
i had an error while running the qemu-system-i386 -fda build/main_floppy.img command,it shows
Unable to init server: Could not connect: Connection refused
WARNING: Image format was not specified for 'build/main_floppy.img' and probing guessed raw.
Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
Specify the 'raw' format explicitly to remove the restrictions.
gtk initialization failed
running on ubuntu wsl which is on windows
Try a Windows build of qemu, instead of running it in WSL.
it works when i used the virtual box ran everything from there.
but why cant i run that command in wsl
It depends on X, and you don't have any X server running. Google how to run GUI programs in WSL. There may be other issues and limitations with WSL that I'm not aware of, so qemu may not run at all under it. The easiest alternative is to just use a Windows version of qemu.
@@kinars8160 I found this article which describes how to run qemu in WSL: boxofcables.dev/running-windows-2000-on-wsl/
Very good videos dude, congrats! The stack is LIFO Last In First Out not FIFO 😂
Wouldnt xor ax, ax be better than mov ax, 0. Because it uses less space?
Yes, maybe. But the difference is extremely small. If you're writing performance critical code, it might matter, but for this which just initializes the system and runs once, a few nanoseconds isn't a huge performance gain.
defo, much more efficient 🤣😂
truly brilliant !
i couldnt get qemu installed on kali purple so i used Virtualbox else everything was GREAT!
Thank you for this!