element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Code Exchange
  • Technologies
  • More
Code Exchange
Forum OS Development
  • Blog
  • Forum
  • Documents
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Code Exchange to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Not Answered
  • Replies 13 replies
  • Subscribers 48 subscribers
  • Views 1516 views
  • Users 0 members are here
  • Code Exchange
  • assembly
Related

OS Development

nick123
nick123 over 10 years ago

     I've been studying assembly language for a long long long time, and I want to try OS Development. I've heard of MikeOS it was entirely written in real mode assembly. I looked over the code of MikeOS and now I feel very discouraged. It is a lot of complicated code just for a simple os.

 

MikeOS - simple x86 assembly language operating system

  • Sign in to reply
  • Cancel

Top Replies

  • michaelkellett
    michaelkellett over 10 years ago +1
    Most OS are not written in assembler but in C or other high level language. To write even a small scheduler type OS in assembler is an odd thing to do since it will make it take longer and it won't be…
  • johnbeetem
    johnbeetem over 10 years ago in reply to nick123 +1
    Nick Gallagher wrote: Why is C portable and not assembly? An assembly language program only runs on one computer architecture, i.e., one instruction set. You can't run ARM assembly language on x86…
  • clem57
    clem57 over 10 years ago in reply to nick123 +1
    Yes if they produce a .COM module and assembly inline OK if you are careful.
  • shabaz
    0 shabaz over 10 years ago

    Read Labrosse' book about uC/OS-II. That is about the easiest book (practical oriented) on operating systems for microcontrollers.

    There is a good book by Tannenbaum but it would be a bit scary for a beginner.

    There are also books on OS theory - depends on how deep you want to go - from your comments it sounds like you want to examine real implementations though.

     

    There really is no need to study assembler for a long time, because only the bare minimum needs to be written in assembler for an OS.

    (The rest is all about optimisation, and often a C compiler is very good).

    Writing more than the minimum could mean that your OS is harder to port to different processor architectures.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • clem57
    0 clem57 over 10 years ago

    nick123

         Hi, I work with assembler for most of my life and I can say there is no simple OS. It can be cleanly written, but the details of handling hardware is always present. By not going into virtual mode, address relies on segment registers which is uglier than setting up virtualization IMHO. Why? Because you address 64K chunks of code or data and makes this such a challenge. So you see it is relative to what you want to tackle. But to be in real mode you must know how the hardware handles addressing. That is why simple here is a wrong word...

    Clem

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • nick123
    0 nick123 over 10 years ago in reply to clem57

    Should I make the bootloader in assembly and the kernel in C? I found this website on OSDev, is it good?

    BrokenThorn Entertainment

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • clem57
    0 clem57 over 10 years ago in reply to nick123

    I read just the introduction and it lays a good foundation. If you can follow and understand this, I can see it as a building block toward writing a bootloader. That is a very good goal imho. I will be around if you wish guidance.

    A journey starts with one leg forward and a lot of faith,

    Clem

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • clem57
    0 clem57 over 10 years ago in reply to nick123

    Pick C for now and later rewrite in ASM.

    Clem

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • johnbeetem
    0 johnbeetem over 10 years ago

    C was originally created as a system programming language so that you could write operating system kernels and utilities using portable high-level syntax.  C was designed to be easy to compile into efficient assembly language, specifically PDP-11.  Like many people, I think of C as a portable assembly language that uses high-level notations.

     

    As an amusing historical note, I once used a Unix system where the man page for the assembler had the following text:

    Assembly language is dead.  Necrophilia will be punished.

    That said, you'll write better C programs if you've mastered assembly language first.  You'll also find it easier to debug C programs since the C run-time model is machine language, i.e., no seat belts to protect your program from itself.

     

    JMO/YMMV

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • michaelkellett
    0 michaelkellett over 10 years ago

    Most OS are not written in assembler but in C or other high level language.

    To write even a small scheduler type OS in assembler is an odd thing to do since it will make it take longer and it won't be portable.

    However you sometimes have to write small sections of the code in assembler because there may be things that C (or other high level language) just can't do - like, for example atomic compare and set or re-entrant interrupts on an arm.

    Sometimes you need to use assembler because even optimizing compilers just don't get it - so you might design a filter where the coefficients and processing steps are carefully arranged so that you end up with all division being by 2^8 or 2^16 but the compiler doesn't see it (much less common than it used to be) so you end up using assembler to get the ultimate performance. But you should always write the code in straightforward C first and only hand optimize in assembler if the compiled code isn't fast enough. (This is very unlikely to be the case with a boot loader.)

     

    If you are using tiny 8 or 4 bit processors then you may have no choice but to use assembler, but make sure you are going to use a lot of them else it will be cheaper to use an ARM Cortex M0 and write the code in C with much less time and effort.

     

    MK

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • clem57
    0 clem57 over 10 years ago in reply to michaelkellett

    Arduino comes to mind when you say too slow to process interrupts on a large scale per second.

    Clem

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • michaelkellett
    0 michaelkellett over 10 years ago in reply to clem57

    Well the Arduino is a bit of a mad thing - running a C/C++ hybrid on an 8 bit processor and competing in a 32bit world the amazing thing is that it holds its own so well. It has problems during interrupts since it has to stack 16 bit (or more) context over an 8 bit bus so needs extra cycles.

     

    I used to use AtmelAVRs quite a bit but I haven't designed one into a new project for several years (about 7, I think).

     

    MK

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • nick123
    0 nick123 over 10 years ago in reply to johnbeetem

    Why  is C portable and not assembly?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube