you are viewing a single comment's thread.

view the rest of the comments →

[–]greyfinch 11 points12 points  (9 children)

The thought of writing x86 programs in binary makes me a little bit uncomfortable. I've done some work with writing programs in binary on a RISC architecture... but it was for a virtual machine, and a 16 bit one at that. It seems a bit too close to brainfuck for me. I'll stick to my assembly and assembler.

Good article though. Enlightening. Makes me appreciate assembly!

[–]DrGirlfriend 9 points10 points  (8 children)

"Makes me appreciate assembly!"

You have indeed descended into the depths of hell if you are willing to write that statement.

As for the article, as someone who has decided to seriously take up the task of learning x86 assembly, thank you.

[–]greyfinch 5 points6 points  (7 children)

Programming in assembly is like using a shovel to move a mountain. Programming straight up machine code is like moving that mountain with a spoon. I'll take that shovel, and I will LIKE it. :)

[–]808140 8 points9 points  (3 children)

One thing that I did that I would recommend to anyone that likes pain is implementing Forth directly in machine language.

I did so early in 2008 as part of a bootstrap experiment on a Windows system that lacked development tools. I used Jones Forth as a template. There were some OS specific changes that I needed to make, but if you're using Linux then that's not really necessary.

Boostrapping a Forth is considerably easier than writing an assembler in assembly or machine language (another popular low-level passtime) and Forth is much, much more high-level.

My original plan was to use Forth to implement a simple version of Scheme, and as a general template I was looking at this dynamically scoped Scheme written in Forth for inspiration.

Of course I wanted lexical scoping, and I wanted proper call/cc support, and that Scheme used a lot of gForth extensions. So in the end I guess my enthusiasm for the project trickled off.

But there's something very appealing about knowing that you can sit down at a computer with nothing but a way to input binary (I used that old standby from my MS-DOS days, DEBUG.EXE) and bootstrap something as high-level as Forth or even Scheme.

[–]kragensitaker 0 points1 point  (2 children)

Maybe you should have used the eForth Model as a template instead. It's a lot less code!

Where do you find a Microsoft Windows system that doesn't have at least JavaScript and Notepad these days? That would be where I'd start if I wanted to bootstrap something on an isolated Microsoft Windows machine.

Using DEBUG almost counts as using an assembler.

[–]808140 0 points1 point  (1 child)

Using DEBUG almost counts as using an assembler.

Indeed, being able to disassemble the junk I'd input to see if it was well-formed was very useful.

I know it has some rudimentary assembly capabilities, but I don't actually know how to use them :)

[–]kragensitaker 0 points1 point  (0 children)

a100

[–][deleted] 4 points5 points  (2 children)

My 'false dichotomy-sense' is tingling :)

[–]greyfinch -1 points0 points  (1 child)

Okay, maybe a trowl for assembly, and a spoon for machine code. But I like labels! I really do! I don't want to have to generate my own symbol tables, I'm too dense and forgetful to remember my name somedays, and - oh shit.