OSDev.org

The Place to Start for Operating System Developers
It is currently Tue Mar 19, 2024 2:07 am

All times are UTC - 6 hours




Post new topic Reply to topic  [ 26 posts ]  Go to page Previous  1, 2
Author Message
 Post subject: Re: Prototyping ASM in a higher level language
PostPosted: Sun Sep 05, 2021 2:46 am 
Offline
Member
Member

Joined: Wed Apr 01, 2020 4:59 pm
Posts: 73
eekee wrote:
C has goto. :) It can't jump out of a function


Sure it can! longjmp is there, just waiting to be (ab)used!


Top
 Profile  
 
 Post subject: Re: Prototyping ASM in a higher level language
PostPosted: Tue Sep 07, 2021 4:43 am 
Offline
Member
Member
User avatar

Joined: Mon May 22, 2017 5:56 am
Posts: 811
Location: Hyperspace
moonchild wrote:
eekee wrote:
C has goto. :) It can't jump out of a function


Sure it can! longjmp is there, just waiting to be (ab)used!

:lol: Yeah, "[C] does not prevent you doing stupid things because that would also prevent you doing clever things."

Isn't it curious how easy it is to forget C has goto, even when you know about longjmp?

_________________
Kaph — a modular OS intended to be easy and fun to administer and code for.
"May wisdom, fun, and the greater good shine forth in all your work." — Leo Brodie


Top
 Profile  
 
 Post subject: Re: Prototyping ASM in a higher level language
PostPosted: Wed Sep 08, 2021 2:21 am 
Offline
User avatar

Joined: Tue Jul 05, 2011 5:17 am
Posts: 8
Location: Delft, Netherlands
eekee wrote:
Isn't it curious how easy it is to forget C has goto, even when you know about longjmp?


Reminds me of Longjmp - FOR SPEED!!!.

More on-topic: in the computer organization course that I TA, we encourage to initially "play compiler" to learn common control flow patterns. We even specifically ask them to implement a recursive function in Java first, also because this may be the first time they encounter recursion as a concept.

But after that they should just write assembly straight from the specification. If they want to implement more complex algorithms such as sorting, we'd rather have them implement it from pseudo-code rather than translating each statement and expression from C. The goal of the course is to get the students to think in assembly, not C or Java.

I'd say building an OS in assembly has the same kind of goal. If you'd rather build a working OS, use a "higher-level language" (C, maybe C++, Rust and so on, but not Lua). The best way to learn assembly is by just writing assembly. Preferably first in a well-supported environment, where you have a C library to fall back on and a debugger to single-step through your code. And it doesn't have to be perfect -- my sorting algorithm turned out to have a runtime complexity of O(n² log n), but it usually sorted fewer than 25 items so it was good enough.


Top
 Profile  
 
 Post subject: Re: Prototyping ASM in a higher level language
PostPosted: Wed Sep 08, 2021 10:35 am 
Offline

Joined: Sat May 23, 2020 6:51 pm
Posts: 20
Wukl wrote:
But after that they should just write assembly straight from the specification. If they want to implement more complex algorithms such as sorting, we'd rather have them implement it from pseudo-code rather than translating each statement and expression from C. The goal of the course is to get the students to think in assembly, not C or Java.


Gracious! I would not want to think in Java! Seriously though, I think there is a lot of wisdom in this. I am not writing an operating system because I want to make the next fully featured Operating system that supports all hardware and emulates all computers hitherto. I want something more like DOS, but with less functionality. A hobby OS where everything is exactly like I want it. I also want to gain understanding about how computers work, and I have gained a lot of that. It is all about control for me, and assembly gives me the most control.


Top
 Profile  
 
 Post subject: Re: Prototyping ASM in a higher level language
PostPosted: Thu Sep 09, 2021 4:35 am 
Offline
Member
Member
User avatar

Joined: Mon May 22, 2017 5:56 am
Posts: 811
Location: Hyperspace
@JohnpaulTH: Your goals aren't very different to mine. (I'm also planning a novel UI, but that could be a separate project.) I also wanted control and simplicity, but as I struggled with assembly, I realised it would help if I made and stuck to a standard for subroutine calls; a simple ABI. Knowing a bit about Forth, I know a Forth compiler can be made as if it were just one step up from a macroassembler. Preferring Forth's ultrasimple design over the peculiarities and relative limitations of Nasm's syntax and macro system, I switched to Forth. I don't think I've lost any worthwhile control, or rather I will have more than enough control when I write my Forth compiler. However, despite its simplicity, I'm finding writing the compiler both tough and boring, so I keep getting distracted by more fun things.

_________________
Kaph — a modular OS intended to be easy and fun to administer and code for.
"May wisdom, fun, and the greater good shine forth in all your work." — Leo Brodie


Top
 Profile  
 
 Post subject: Re: Prototyping ASM in a higher level language
PostPosted: Fri Sep 10, 2021 3:04 am 
Offline
User avatar

Joined: Tue Jul 05, 2011 5:17 am
Posts: 8
Location: Delft, Netherlands
JohnpaulTH wrote:
Gracious! I would not want to think in Java!


Very! Especially considering that they will use Java for most of the CS program. :lol:

JohnpaulTH wrote:
I am not writing an operating system because I want to make the next fully featured Operating system that supports all hardware and emulates all computers hitherto. I want something more like DOS, but with less functionality. A hobby OS where everything is exactly like I want it. I also want to gain understanding about how computers work, and I have gained a lot of that. It is all about control for me, and assembly gives me the most control.


Awesome, that's how I started as well. Have fun :)


Top
 Profile  
 
 Post subject: Re: Prototyping ASM in a higher level language
PostPosted: Fri Sep 10, 2021 5:00 am 
Offline
Member
Member
User avatar

Joined: Sat Mar 31, 2012 3:07 am
Posts: 4591
Location: Chichester, UK
JohnpaulTH wrote:
Wukl wrote:
It is all about control for me, and assembly gives me the most control.
That's really not true - at least not in the sense that you need to write the whole OS in assembler. The most control is obtained by using the appropriate language for the situation. So you write those (very few) parts of the system where low-level control is needed in assembler. The rest you write in a far more organised language, such as C, which will make the code clearer, easier to maintain, and almost certainly more efficient.

IMO, one of the biggest mistakes a beginner can make is to restrict themselves to assembler. An experienced assembler programmer, with extensive knowledge of algorithms, data structures, and how to implement them, may be able to write an entire OS in assembler. But mere mortals, like most of us, are setting ourselves up for failure in imposing this totally artificial limitation.


Top
 Profile  
 
 Post subject: Re: Prototyping ASM in a higher level language
PostPosted: Fri Sep 10, 2021 9:41 am 
Offline

Joined: Sat May 23, 2020 6:51 pm
Posts: 20
iansjack wrote:
That's really not true - at least not in the sense that you need to write the whole OS in assembler.

I don't need to write it all in assembler to get the most control, but given how simple and low level my OS is, there is hardly anything that I wouldn't lose control over to some degree. I am interested in higher-level languages for writing programs, but building a compiler targetting my operating system is a large project in itself. So I would be expending a lot of energy to create something I would use for about 25% of the OS, when I could gain mastery of assembly in the same or shorter amount of time.


Top
 Profile  
 
 Post subject: Re: Prototyping ASM in a higher level language
PostPosted: Fri Sep 10, 2021 9:59 am 
Offline
Member
Member
User avatar

Joined: Sat Mar 31, 2012 3:07 am
Posts: 4591
Location: Chichester, UK
You don't need to write a C compiler that runs on your OS, any more than you need to write an assembler. (Not a trivial task, especially as you are limiting yourself to assembler.)

If you just want to learn assembly language then fair enough (although I would say that writing an OS is the very worst way of learning assembly language). But it's your project, and you know what you want to get out of it, so good luck with it. I just want to point out to other beginners that they should think very carefully before restricting themselves to assembly language. It seems obvious that this will lead to the most efficient OS, but in practice it almost certainly leads to a limited, buggy, inefficient result. (Unless you are an expert assembly language programmer.)


Top
 Profile  
 
 Post subject: Re: Prototyping ASM in a higher level language
PostPosted: Sat Sep 11, 2021 1:08 am 
Offline
Member
Member
User avatar

Joined: Mon May 22, 2017 5:56 am
Posts: 811
Location: Hyperspace
eekee wrote:
Forth Forth Forth

And now I'm thinking of using a web server written entirely in assembly language. :mrgreen: It's rwasa. I'm not sure though. Its benchmark graphs look a bit suspicious, does "12b" mean 12 bytes? I suppose so, because one graph has "128kb". 12 bytes is too small even for HEAD requests, but rwasa's performance falls behind on the 128"kb" test. There is one thing I really don't like about it. I'm glad I spotted this in the documentation: "Due to the lack of verbosity with rwasa for configuration issues, often the easiest way to locate errors is with strace." I could link the associated library for amd64 assembly coders, but would anyone want a library under the GPLv3, not even LGPL? Anyway, it's here.

But anyway, on topic, I'm restarting my Forth compiler and this time, I'm prototyping it in Forth for conversion to assembly. I don't expect the complete Forth code to run, but I do want to test components. Looking at the last attempt, I remember the problem wasn't just boredom. I was uncertain of some design details, developing it under DOS with an 80x25 screen didn't help, and I was coding for real mode which is not what I really want; I'd have to do it all again. This time, I'm working on Win10, targetting amd64 and Win10 to get started.

_________________
Kaph — a modular OS intended to be easy and fun to administer and code for.
"May wisdom, fun, and the greater good shine forth in all your work." — Leo Brodie


Top
 Profile  
 
 Post subject: Re: Prototyping ASM in a higher level language
PostPosted: Thu Sep 30, 2021 6:21 pm 
Offline
Member
Member
User avatar

Joined: Thu Jun 04, 2009 11:12 pm
Posts: 281
Hi JohnpaulTH,
See:
https://holub.com/compiler/
to get an idea how you would do an assembler like emulation in a high level language ( C ). The intermediate code section of this book would be useful.
The book is a tome. Section 6.2 is what I would encourage you to read for your purposes. This is for C, but you could do the same in Lua with a bit of imagination.

--Thomas


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 26 posts ]  Go to page Previous  1, 2

All times are UTC - 6 hours


Who is online

Users browsing this forum: Bing [Bot] and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group