I want to learn asm but i dont know where to start from dos or win32.
Posted on 2002-02-01 00:35:24 by k0d
You question is answered HERE.
Posted on 2002-02-01 01:23:28 by bitRAKE

it depends a lot on how much you already know, if you are familiar with compilers in win32, then starting on 32 bit assembler should be within your range but if you don't have that background, you would be better advised to learn a proper compiler first and then come back to 32 bit assembler later.

From scratch in assembler you are better to start with Randy Hyde's AOA if you are completely unfamiliar with assembler concepts as it is a very well written set of tutorials.


Posted on 2002-02-01 04:11:33 by hutch--
Hutch, pay attention that, routing beginners to AoA, they will most of the time confuse with the last version and go to HLA, which is a Pascal Front end to MASM designed for TEACHING Assembly. At my opinion, teaching and learning do not live in the same world...

Beginners: Choose AoA 16 Bits, or see at


There is there a "32 Bits Assembly Tutorials Collection" including a MASM version (Hutch: why have *I* to say this???....), including also several wide parts of Randy Hyde AoA 16 adapted to 32 Bits.

Posted on 2002-02-01 06:39:12 by Betov
I am total beginner in Asm but i have some knowledge of c++ win32 so what do you prefer. hutch or anyone
Posted on 2002-02-01 13:16:29 by k0d

Well, this is a "Win32asmcommunity" -- I think you can figure it out
:) :) :)
Sorry but I like pointing ou the painfully obvious stuff

Let me make it easier for you...
1) Choose 32 bit assembly
2) Download the masm / spasm / fasm /nasm
3) Check there documentation and example base and see which sytax you feel more comfortable...
4) Goto the various (over 30) tutorials on the web and examine the source code on the web... (ie. goto google and use: "asm source program" or "asm tutorial source") -- Sometimes the various members have web pages with assembly content (ie. tutorials, source)
5) Start writing something or converting c++ to assembly (if you knowthat best)

Personal Opinion: 16 bit assembly is over... it may be an ok way to learn some sytax, however, if you have a background in c++ it would due you some good to start from win 32 (if you think you're smart enough)


ps. that smart enough thing is just to get you motivated...
Posted on 2002-02-01 13:52:57 by Sliver
thx everyone for your suggestions.
Posted on 2002-02-01 14:01:53 by k0d
Hutch writes:
if you are familiar with compilers in win32, then starting on 32 bit assembler should be within your range but if you don't have that background, you would be better advised to learn a proper compiler first and then come back to 32 bit assembler later.

But 32 bit assembler, or any assembler is a compiler, a kind of compiler. Wouldn't that be a correct statement?

So why not just learn 32 bit assembler first, as your first proper compiler that you learn? It would seem to me that learning assembler would be the best way to start acquiring knowledge of how computers operate, and skill in using language to control their operation -- as it would seem fairly obvious that what you learn in assembler will always apply to any other language you might learn -- but what you learn in any particular higher level language may or may not apply to another language, or to assembler.
Posted on 2002-02-01 19:47:49 by verb
"in win32", I believe what Hutch is refering to, is that Windows programing and thinking is different from the traditional procedural type programming---and if your not familar with Windows programming then it may be confusing trying to learn a new language and Windows at the same time-----
Posted on 2002-02-01 20:04:00 by BradB

You will find that there are guys here who have over 30 years experience with both compilers and assemblers so your view needs to be tempered with a bit more knowhow.

You have been given the same advice as many others, if you do not know enough to start learning assembler, start on a higher level language first so that you understand what addressing, pointers, structures and basic algorithm design means, then you will know enough to start on assembler.

Pontificating on the basis of what you have yet to learn does not acheive much, most people here have come into assembler from other languages and they have the skill to apply the architecture of what they already know when they write assembler.


If you are happy with what you know about win32 and have some C++ under your belt, have a look at the early chapters of Randy Hyde's AOA to get the swing of how the instructions work and then start on MASM32 as it has a lot of pseudo high level support in it to make starting out in assembler easier.

Just to make betov a little happier, DO have a look at his tutorial at,


It has different contributors and has the Betov seal of approval which is very hard to get out of the man who wrote Spasm.


Posted on 2002-02-01 20:06:34 by hutch--
Well hutch, I may not have said that an assembler "assembles" a script into a binary executable and instead said that it "compiles" it -- though I still suspect that it is considered proper to consider "assembling" to be a kind of "compiling" -- but I think I know what "addressing, pointers, structures and basic algorithm design" mean -- and I'm still having trouble learning assembly language from either of Ranall Hydes 2 tutorials.

Nevertheless, I've managed to figure out, over the last 2 days, by myself, how to use an assembler program and a linker program (from a DOS command line) to create a binary executable (*.exe) file from an *.asm script file, and I'm beginning to work out how a few basic intructions can be used to fiddle-faddle with data stored in "registers" or move data between registers and registers or memory locations, in order do very fundamental simple things, like add a couple of numbers together, write text to the screen, or send a control code to my printer. Now I need a break. I'm exhausted.

I won't want to take a very long break -- because there is a lot more I want to learn -- I've just scratched the surface.

Since I remembered hexadecimal and binary arithmetic from 7th grade, I didn't have to read about it again.
Posted on 2002-02-01 23:07:02 by verb
Thx for all of the responses. I think i am on the right road of learning masm32.
thx again
Posted on 2002-02-01 23:29:37 by k0d
Here are some overly pedantic definitions:

Machine code: statements a computer can actually execute.

Source code: a text file containing program lines in human readfable form.

Assebler: takes a text file source code listing and translates it to assembly language statements. It may produce an exeacutable, or just create an object file and may pass the exeacutable creation task onto a link program.

Assembly statements have a one to one corrpspondance to machine instructions.

Compiler: will translate the source code first to assembly statements, then assemble the translation. There is no direct correlation between these source statements and machine code.

While it is incorrect to say an assembler 'compiles' source code, it is as overly technical to correct "the class finally executed it's destructor" by adding "you mean the object." Yes, we all (should) know the difference, but no harm comes from saying one for the other.

Earlier versions of MASM would optomise the LEA instruction for you (changing it to a MOV if possible), and by MY overly pedantic mind says that makes MASM a compiler (since it does some translation).
Posted on 2002-02-02 09:57:15 by Ernie
What Ernie said, plus other things that later versions of MASM do, make it look more and more like a compiler. It can generate various overhead code, depending on calling conventions for example. Built in macros like .IF generate more than one instruction. But at it's core, it's still a machine language translator, call it what you will... :)
Posted on 2002-02-02 13:09:13 by S/390
Thanks for the very interesting clarifications, Ernie and S/390.

A great portion of my goals in life are simply to satisfy my curiosities -- including my curiosity as to how my (Intel Pentium, of various kinds) cpu's work -- assembly language seems like the most natural choice of things to learn (after machine language), to help me do this.

But I don't see how I could learn enough assembly language in my lifetime, to do anything really practical with it, in regard to creating Windows programs, or in regard to creating any kind of program, actually. There seems to be too much to learn, and I am just too slow a learner. Nevertheless, since I am working with Windows 9x programs every day, it makes sense for me to learn at least little about aspects of the cpu that relate to Windows 9x, rather than just learn about the 16-bit operations of the 32 bit cpu.

But indeed, i am starting out with 16-bit assembly -- not because 16-bit assembly is any easier to use, or learn, but simply because the tutorials I have found for 16-bit assembler are easier for me to understand. This may be a quality of the tutorials, rather than of the assembler. I wouldn't be able to say for sure which is easier, from my own understanding of which is easier -- the best I can do is just repeat the hearsay I've heard, that 32 bit is actually easier.

Next -- and tell me if you think I would be walking down a dangerous path -- for most practical development of programs, for my own use, or to help out others, I would want to be leaning C or C++ or something -- started in a few weeks from now -- started before I finish my "assembly-learning" project.
Posted on 2002-02-02 14:16:05 by verb
----Edited by Sliver ----

Although I don't agree with your interpretation of my response (or his post) I will nonetheless take it down :) Sorry Nan.

However, I don't believe that I was at fault at all... and was just stating a thing of fact...

Posted on 2002-02-02 18:06:22 by Sliver
Sliver, I dont know what got you so hostile, but with regard to the rules your last post (im my humble opinion) clearly violates our first rule:

Members will treat each other with mutual respect and will not fight in the open about personal affairs. While sometimes a difference of opinion can heat up a discussion: stay mature and treat each other with respect, this rule goes for public posts as well as private messages.

Consider this a warning to treat others with respect! Verb's statement of his abilities in no way directly applied to anything your accusing him of. I find this completely rude, and in your own respect "arrogant".

As i read it, it sounded like he was happy there was at least something he can relate to, since he has clearly made it obvious he doenst know assembly and is trying to learn on his own!

... bottom line, treat members with respect!!

Posted on 2002-02-02 19:42:57 by NaN

There are a couple of things here, I agree with NaN that keeping the peace is a good thing and that members should not get wound up over other people's posts.

Thanks Sliver for editing your post as it displays goodwill to all of our other members.


Just a little wisdom from an old timer, this forum is made up of its members who do a lot to assist other members including newer members who want to learn assembler but arguing from the base of your own capacity to learn information is tedious and it is not really what this forum is about, it is still basically a technical forum of assembler language programmers.

If you are interested in learning assembler, the members here will help you if they can but spare us all from the blow by blow descriptions of your information digestion capacity as it will generate more comments that are less than friendly and we do not need that here.


Posted on 2002-02-03 03:32:47 by hutch--