I am very interested in learning ASM but I don't know what books are good or where to start, I am a complete newbie. I have been recommended "Art of Assembly Language (16-bit Edition)" to learn Assembly Language first, but I wanted to know what you guys think of it. I do plan on learning Win32ASM but I want to learn 16-bit ASM first, just to understand everything.
Also, I have tried other languages but I really don't like them because I don't like not knowing what the computer is doing, it bothers me. :)
Posted on 2003-04-24 14:02:07 by i7e6y
yes thats the route i took (16-bit first then win32asm)....a really good book i used was peter abel's IBM PC Assembly Language and Programming

it doesn't cover floating point stuff in asm, tho...for that u mite find Art of Assembly useful (also for other things since it has good info on cpu architecture, altho i think its a bit outdated, thats what randall hyde himself told me a while back)...newer books on operating systems and CPU architecture will also help
Posted on 2003-04-24 14:09:17 by AnotherWay83
"Art of Assembly Language" and 16 bit assembly is not the best way to learn assembly language. Just download Iczelion's tutorials and some good instruction reference. Install masm32 (or FASM, IMHO fasm is beter for beginer) and write, write, write. :)
Try to compile some example programs. Change something and try again. Good luck!

Posted on 2003-04-24 14:14:42 by JohnFound
i7e6y, I too am a relative beginner to assembly. Since I don't know the Win32 API, my plan is to study 16-bit assembly (concentrating on x86 opcode use and MASM directives, keeping in mind that Win32asm is non-segmented), then Win32 API using C, then applying my knowledge to tackling Win32asm. Meanwhile, I find 16-bit assembly very interesting.

Since December, I've bought over 20 used 16-bit assembly books off of eBay and Amazon. Of these books, the best one in my opinion is "The Waite Group's Microsoft Macro Assembler Bible". The book covers every x86 opcode and Masm directive in detail with very good illustrations to help understand how things work. The first edition covers up to MASM 5.1 and the 2nd edition is larger covering up to MASM 6.1. Not only does it serve as a tutorial for learning 16-bit assembly, with it's extensive opcode and directive coverage it makes a great reference for the assembly-side of Win32asm.
Posted on 2003-04-24 14:56:48 by Masmer
I would also recommend bypassing 16 bit assembly and going straight to 32 bits.
I have enlarged the Win32 tutorials on my site which beginners say they find very helpful.
Posted on 2003-04-24 15:35:29 by jorgon
In addition, I would also suggest getting a debugger compatible with your system. After writing small pieces of code, you could then visualize what is happening within the guts of the CPU and memory. Great to reinforce what you are learning through reading.

Posted on 2003-04-24 15:36:40 by Raymond
if you can afford it get a hll, i suggest one like visual basic to learn the win32api, just because VB makes the rest easy to learn. VB6 comes with an "api viewer" search for the name, and copy the declaration. just drop it in!:grin:

VB isn't as bad as people might make it out to be. It is nice to design simple programs/templates in. that is how i can visualize what will happen when i code my asm project.for example, i am making a fully customizable RPG Table along with dice routines ect. for some of my friends. i design it first in vb, then code everything in asm, including the form itself. that way i can destribute the whole program, and it is much smaller/faster than vb
Posted on 2003-04-24 17:22:41 by jakor
Well I guess I will try VB, but alot of people say its not worth the time to mess with it.
Posted on 2003-04-24 20:28:10 by i7e6y
I thought you wanted to learn asm, why would you want to learn VB?! Raymond has the best suggestion.

Same with 16-bit vs. 32 bit. They are essentially the same though you can't use DOS. But if you use ollydbg you can write a little code and eventually create windows.
Posted on 2003-04-24 21:16:14 by drhowarddrfine
Hi i7e6y,

ASM can be as simple or as complex as you want it to be. Using Hutch's MASM32 package it can be very close to what you will find in HLLs that in a sense just use the API anyway. If you get the win32.hlp file (search the board for a link) you have basically the same reference that VB or C++ will give you. Later you can consider getting the MSDN disks for more up to date info but they don't provide alot more than Win32.hlp. If you want to reduce the amount of time it takes to learn go to the IDE section and choose an IDE, they will take away most of the grunt work and leave you to learn what's important instead of struggling with ML and LINK command lines.

Alot of what you will see on this board will deal with optimizing code and various coding algorithms and tricks. Ignore them to start with and just try to get your code working, you can learn that stuff later. Remember also that MS has thought out the API interface, any problem you are likely to run into probably already has an easy solution through the API, just search the forums because at one time or another we all had the same problem and asked the question. Many of the API calls are poorly optimized such as rtlZeroMemory and people will tell you not to use it, for the time being ignore that too, use the API to do what you need to do, when you advance to the next level you can begin writing your own replacements.

Most of all, tweak and try to change the example code. This will show you how the commands work and what will crash your program and what will yeild interesting results.

Remember also that we are all here to help, it's us paying back the help we got and are still getting when we first started. Any question, even if you think it's dumb, was probably asked by everyone here so we know the answer. ALL of the authors of the IDEs are either moderators here or visit daily to answer your questions. Even the authors of the assemblers themselves (with the exception of MASM though Hutch with MASM32 supports it) are all members of this board.

PS: Take a look at KetilO's RadASM, it has inline code completion and F1 lookups for API calls. It also auto-generates your ML and LINK command lines and all of your RC files. But don't think this is the only one, there are many IDE's available and you should try a few and decide what you like best.
Posted on 2003-04-24 21:37:24 by donkey

It depends on how much you have already learnt as to how and when you start learning assembler language. The hard part starting from scratch is learning both Windows API coding and assembler programming at the same time and while I have seen it done, it is a difficult way to go that beats most people.

If you have a background in higher level languages and the concepts of API coding are understood, the shift to assembler programming means only learning one task instead of two.

What I would suggest if you are interested in learning assembler language and you already know your way around API coding is to have a good look at Randy Hyde's Art Of Assembler to get a feel for assembler coding but don't take too much notice of the DOS specific stuff in it.

Randy has also written later work called HLA which is a fast introduction into assembler coding. Iczelion's tutorials are very good and have helped a lot of people get up to pace with assembler coding and the MASM32 package has a mountain of example code as reference for the more common tasks.

There are alternatives like FASM and Jeremy Gordon's new assembler so you do have a decent range to start with. For the architecture I would recommend downloading the Intel PIII or PIV manuals direct from Intel as they are the best available even though they are a bit complex at first.

Good luck with starting.

Posted on 2003-04-24 21:57:17 by hutch--

Also, I have tried other languages but I really don't like them because I don't like not knowing what the computer is doing, it bothers me.

Sounds like you are going to become a low level coder. :) I think 32bit asm is *definitely* easier than 16bit, so I would *suggest* that you would learn 32bit instead of 16 bit. Just to add, I seriously do not think anyone needs to know about HLL before asm, just abit of knowledge on binary and hex. From what I do know, there is not much books on 32bit asm, and that the best resources are from the net. There are several good tutorials on asm, including Thomas' and Icezlion's. Right now I am trying to write a tutorial for the sake of writing :)

Have a look at this link http://www.asmcommunity.net/board/index.php?topic=8984
Posted on 2003-04-25 02:18:45 by roticv

32-bit asm is much more comfortable and easy compared to 16-bit.
Still,if you want to learn 16-bit asm,click here to get the tutorials of Adams.
Posted on 2003-04-25 02:59:15 by Vortex