June 2007


Jun 30, 2007: 6. Assemblers - A Personal Report



I have been spending a considerable time the last 2 months looking at assemblers and assembly.

This is mostly connected with my interest in the foundations of programming, and also related to my illness: I have ME, I am 57, and while my mind seems still fairly sharp, it also is often as tired as is my body. So I need something that works, is well-documented, and does not involve my spending time and preciously limited energy on stuff that's trivial or ought to be fixed, such as bugs, or install-problems, or bad documentation.

But I do like to understand as much as I can about computers and programming, and my health has recently improved somewhat thanks to medicines, and hence my active interest in assembler, that I last looked at and worked with more or less seriously in 1990, with Tasm for DOS.

So I searched the net in April, starting with "assembler" in Google, and found lots of things that are interesting and worthwile investigating or learning.

Some of this I briefly reported in BitsAndPieces 1.

Since then I found out more, as I sought for more - and two reasons to title this number of BitsAndPieces "Personal Report" are that I know I do not know much of assembly and that my academic degrees are not in Computer Sciences but in psychology and philosophy. (So incidentally: Yes, we do have certain knowledge - e.g. of our own ignorance and uncertainties about something.)

Here then is an interim personal report on assemblers.

Lately I have been most concerned with RosAsm and context - and see e.g. gatago-survey for what I mean by "context". (It also gives this psychologist some psychological thoughts, but that's another subject than programming, entirely.)

The context, then, is an email-struggle between Hyde (of HLA) and Hutcheson (of Masm32) on the one side, and Tournois (of Rosasm) at the other, that is far from friendly or polite.

It seems to come down to the following:

Around 1995 Assembler - to setle on a term for language plus compiler - seemed almost dead because of the arrival and success of Windows 95, and also the increased speed and memory of CPUs.

At that time, the two most important assemblers were Masm and Tasm, both commercial and supported by respectively Microsoft and Borland. There was a freeware or shareware assembler called A86, written by Eric Isaacson, but that seems to have been mostly a simplification of Masm, and to be for Dos only. Also, Isaacson developed A386 for Windows, to which the same seems to apply (and I saw neither and merely report what others wrote).

After the arrival of Windows 95 there soon was little interest in assemblers and within a few years both Microsoft and Borland terminated their assemblers as commercial products, although they kept including them in distributions of their commercial C-compilers, but without support.

Between 1995 and 2000 Nasm, Spasm, and then Fasm were developed, and a few years later GoAsm (and if my history is wrong, see the introduction of this piece: I'm sorry, and report to the best of my present partial knowledge).

The first was done by a group that wanted a free and open source Masm; the third by Thomas Grysztar, who wanted a better Nasm; and the second by René Tournois, who wanted a "specific assembler" (whence "SpAsm") for a new OS, calld ReactOS, that was meant to be (and is) a free Windows-like OS.

SpAsm started ca. 1998, which was also around the time HLA was launched by Randall Hyde (mostly as a concept, at that time, I believe).

Another assembler, developed somewhat later by Jeremy Gordon is GoAsm, while Steve Hutcheson succeeded in getting Masm free from Microsoft, apparently by legal ingenuities, and published it as masm32.

In 2003 Tournois ceased developing SpAsm and started developing RosAsm, and - as far as I know - then or earlier started the problems between Tournois a.k.a. Betov, and Hyde and Hutcheson a.k.a. Hutch. (The abovementioned context-mails are from March 2006.)

The background is in part political and is in part related to open source:

Tournois belongs, in his own words, to the "extreme left" in politics, and Hyde is, also in his own words "a christian", and is according to Tournois a neo-conservative, and Tournois is a proponent of GPL and Hyde is not, but Hyde puts his software wholly in the public domain.

The e-mail exchanges between the threesome are not exactly scientific or temperate or free from bias:

According to Hyde and Hutch, Tournois stole SpAsm from Isaacson's A386 shareware assembler, and both SpAsm and RosAsm are badly documented and crap; according to Tournois, who rather consistently refers to Hyde as "asshole" (Tournois is French and temperamental - does he mean 'espèce d'un con'?), Hutch is almost unable to program assembler, and Hyde is only after status and fame, which he achieved by writing "The Art of Assembly", but not by writing a decent recent compiler (for assembler, in assembler).

And so on ... (me, I'm a mere psychologist, who happens to be interested in programming and in logic and mathematics, so I was somewhat surprised, also noting that Hyde and Tournois must be around my own age, that is widely supposed to be wise, mellow, and temperate, and that both are very smart men, concerned with assembler, and in favor of open source development).

As far as I can see, Tournois seems to be right that Hutcheson is not so much a great expert in Assembler as someone who got Masm free from Microsoft by legal ingenuity.

And Tournois' most important complaints about Hyde and Hutch, in so far as they are not personal, seem to be that H and H make learning assembler more difficult than is necessary; that HLA is not a real assembler (but something like a preparser for Masm or Fasm); that HL + A (High Level + Assembler) is a strange and mistaken construction; and that his own - Tournois' - vision of an all-in-one assembler is better (than all the hassle with include and library files, as is common in other assemblers).

The complaints of Hutcheson against Tournois are mostly, in so far as they are not more personal, that Tournois has stolen A386, which reminds this psychologist of projection, since even Hyde called Hutcheson's appropriation of Masm of "doubtful legality", which very probably is true (but then to much of what Microsoft does applies the same, at least under European law). And anyway, this does not concern programming.

Besides, I suppose that Borland and Microsoft stopped developing assemblers because it is not profitable, and because of much of the popular received wisdom about programming since Windows 95 was that "everything can be done in C++", and because Windows is written in C and requires C-calls and C-structures to use its API. (And the only assembler I found for sale is in fact called Terse, that seems mostly a special syntax for assembler. All the rest were free.)

Tournois' point against Hutcheson that he - Hutch - is not much of an assembler programmer seems true, since there seems to be little software in assembler by Hutch, and also little documentation by him (whereas there is a lot by Hyde).

But then Hutch got Masm free from Microsoft, which most non-lovers of Microsoft and most lovers of assembly seem to consider A Good Thing, though Tournois believes that Masm makes the learning of assembler much more difficult than necessary (and Hyde agrees about this with Tournois, but his HLA takes a rather different approach than does Tournois with RosAsm).

And according to Hyde (and Hutch) RosAsm is crap, and also badly documented, and makes the learning of assembler more difficult, because it doesn't have (real and proper) HL-constructs.

At my present state of knowledge (ignorance, really, but I have just one life, and must try to make reasoned choices on the basis of partial information) I cannot properly judge this, but it is a fact that Tournois has a working integrated assembler including IDE, and that I could not get RadAsm going with HLA (though it works fine with Masm32, and is a very good IDE), whereas Hide for HLA is fine and useful, but not as powerful as RosAsm's source editor + environment, that also precisely has the feature I thought of for Hide, namely the Right Click to relevant documentation, that I could not try to implement in Hide because I can't compile Hide with HLA. (Most probably because the source of Hide is out of synchronization with the version of HLA, but that's an aside. And I thought of the feature myself, before knowing anything about RosAsm, because of Smalltalk's usage of its code-browsers that I am familiar with.)

Also, it is a fact that there is a lot of source to be found for HLA, but most of it does not go far. In fact, the common ground of most tutorials- with-source-and-explanations for assembler are the Iczelion-tutorials, that I have seen now for Masm, for HLA, and for RosAsm.

Apart from that RosAsm has considerably more than HLA in the way of tutorials, at least to my present knowledge (and I have seen most of Hyde's and Tournois's sites).

In brief, it seems as if RosAsm on the moment and since 2003 is the best developed assembler, in terms of a more or less finished product to learn assembler with, and that what it mostly lacks is a documentation as exists for HLA, for those who want (or need) to learn assembler without any prior knowledge of it.

It is quite possible that HLA 2.0 (and later), if this starts working, and for example in combination with RadAsm, but without install-problems, is better than RosAsm (for my interests and concerns), but I cannot properly judge this now, and besides HLA 2.0 is in the process of being started, and I don't see it properly working as planned and proposed by Randall Hyde in this year, at least.

And for me it is simply practically important that HLA-as-is does not have a really good development environment, and RosAsm does.

So, summing up.... in a way this context of Assembler and Assembly was all pretty amazing and unexpected, also because Hyde and Tournois must be around my age ± 10 years. (And by the way: Here is a link to Randall Hyde's comparison of assemblers: "Which Assembler is the Best?". This seems a more or less fair review, honestly biased towards HLA, and well worth reading. But RosAsms documentation and tutorials are better than Hyde allows for, in my experience, and I am not personally biased, and the sort of student of assembler a developer of an assembler is interested in finding.)

O, another point in this connection:

It is interesting most assemblers appear to be "one man's vision". This is certainly true of A68 and A386, Fasm, Gasm, RosAsm, and of HLA. It underlines my own view of human beings - whatever done of great value is done by an individual - and is interesting in itself, but it does make the judging of assemblers (how to appropriate one's own time and energy for one's own interests) more difficult.

In any case, I've decided to spend more time on RosAsm than on HLA, and the reason is that RosAsm at the moment is the furthest developed open source assembler, and my own time and life are finite, and ars levis, vita brevis. But I will keep following HLA, because its documentation is good and its concept is interesting. (It were better, though, if it were further developed.)

And there are quite a few interesting things about RosAsm, that I also like a lot:

  • completely integrated approach (assembler, ide, disassembler, resource editor, debugger, documentation)
  • way of handling macros
  • the Right-Click help-function
  • one-file approach (no jungle of include and lib files and paths)
  • including the source in the executable

Much of it seems well-thought out (and indeed else it wouldn't work, whatever its ultimate qualities on scales of assembler-perfections).

Especially the Right Click feature is excellent and very, very helpful.

And what recommends RosAsm further is that it is one man's vision that works and that provides a lot of interesting tutorals (such as YeoHS's).

For that is one of the other things about assembler I have found: I like it a lot for the understanding it provides of computers, and of what I may do with it if I learn it properly, but there are few examples of complicated applications developed with them, other than perhaps themselves.

And the best examples I have seen came with RosAsm.

Anyway, thanks to delving a little in and around assembly I do now have good instruments to learn to understand the computer better - that I also can recommend to anyone of serious interest and sufficient intelligence:

  • RosAsm (by René Tournois)
  • Ollydbg (by Oleh Yuschuk)
  • PEViewer (by Wayne Radburn)

And finally two other reasons to use RosAsm rather than HLA, for the moment and for me, are these:

RosAsm (I tend to think of it as rasm or rosa, given all the other xasms there are in assembly-land, without any OrgAsm, though) has in its help (called B_U_Asm) a file called "History" that lists and describes bugfixes starting with SpAsm in 1998 and, with a lot of SpAsm's bugs skipped, of bugfixes for RosAsm starting in 2003 up to V.2.049a which I use. It's a long and realistic list, and shows that a lot of development time and effort were invested in it. That's one reason for using it: HLA2.0 hasn't started properly yet, and a project like the developing an assembler + IDE needs a lot of debugging and time to be working properly.

Another strong reason in favour of RosAsm, for me, is this: There's nothing like it, that I know of.  


P.S. 7-7-07: I received a helpful mail that straightened out a bit of my history, that I have today corrected.

Maarten Maartensz


        home - index - top - mail