The sign on the door said newbies welcome. :-D
I'm not asking to be spoon fed, because that's not how you learn.

I was just wondering whether or not any of you would know some great books that can be used to learn the ASM language. :D.

It would really help me.

So far I have been recommended to Assembly Language for INTEL-Based Computers, is this a good resource I should invest time (and money) for?
Posted on 2003-03-29 23:50:25 by OloEopia
Should probably mention I'm a complete newb to ASM, I do have significant C++ knowledge, however, if that in anyway helps.
Posted on 2003-03-29 23:57:43 by OloEopia
I have yet to see any good books on asm. My asm knowledge was learnt from website I visited and the tutorial by Thomas and the string tutorial by alloces. Here are some nice links on the forums. Have a look.

http://www.asmcommunity.net/board/index.php?topic=8984
http://www.asmcommunity.net/board/index.php?topic=6670

Oh ya, Remember to read the iczelion's tutorial
http://www.asmcommunity.net/board/forumdisplay.php?s=&forumid=17

Have a nice day, plenty of reading for you :)
Posted on 2003-03-30 00:03:23 by roticv
OloEopia,

The best method of learning win32asm is to study Iczelion's tutorials.:alright:

Regards,

Vortex
Posted on 2003-03-30 10:07:56 by Vortex
Thanks all!

Still, ASM is hurting my brain, I guess it was a mistake learning C++ first.

I've drawn a quick MSPaint image to express my simple, yet drastic, feelings.
http://www.geocities.com/oloeopia/Images/drainbramaeg.jpg
Posted on 2003-03-30 12:24:11 by OloEopia
OloEopia,

Learning first C/C++ isn't a mistake;HLLs offers you
to learn the principles of coding.
You can combine asm and C++ in your programs.

Regards,

Vortex
Posted on 2003-03-30 12:47:03 by Vortex
Hrm true, there is inline ASM you can use in C++ coding.
_asm{
code
}
etc...

However, ASM just isn't working in my brain, I just can't seem to get the concepts of it, which is why I asked for a book.
Icezlions tutorials, while they seem thorough, don't give me a complete understanding of everything that's going on.

How do you assign values to variables?
Still no idea, of coarse in .data you can do


DataVariableHere dw ValueHere


Editting the value midcode has escaped me, it's not mentioned in the tutorials. I suppose it was something so obvious Icezelion felt he did not need to mention it. The absense of an operator to set values confuses me.

However, he does mention mov. I am extremely confused as to how many things can be stored into EAX, and somehow, always the needed data comes up when you call it as the source.

Maybe I just need someone to go over it, but Icezelion's tutorials leave me confused as hell.
Posted on 2003-03-30 12:57:53 by OloEopia
Sounds like you need to learn the computer architecture basics (such as registers) and opcodes. Randall Hyde's free online "The Art Of Assembly" is a good source. This is the HTML Windows version (there are PDF and HTML versions for Windows, Linux and DOS): http://webster.cs.ucr.edu/Page_AoAWin/HTML/AoATOC.html

AoA also covers using HLA (High Level Assembly) which is designed to make it easy to start programming in assembly. Someone with C++ knowledge should be able to pick it up quick.

PS: There are currently no good introductory books on the type of Win32 assembly that the Icezlion tutorials cover. Win32 API knowledge is pretty much assumed, as is 32-bit Intel assembly.
Posted on 2003-03-30 15:04:39 by Masmer
The problem with AoA is that it actually isn't Assembly. It converts the code into ASM, but it doesn't teach you the functionality of ASM itself, thus limited your actual power.

I'm going to look into "Introduction to 80X86 Assembly Language and Computer Architecture" and "Assembly Language for Intel-Based Computers (4th Edition)."
Posted on 2003-03-30 20:08:04 by OloEopia
Iczelion's tutorials aren't really good for learning assembly - they're meant to teach win32 programming using assembly, and assume that you know some assembly beforehand. It's my experience, though, that even from scratch, they're easy enough to follow that you can learn enough assembly to do win32 gui coding from level 0, but... they don't teach assembly. And win32 gui coding in assembly is sort of silly.

If you want to learn assembly, it's probably best to start with The Mad Wizard Thomas' "win32asm basic tutorials", available at www.madwizard.org. AoA, unless it's changed massively in "a couple of years" :-), was too focused on 16bit assembly for my liking, and HLA wasn't really something I liked (give it a try though, you might like it).

When you're done with the mad wizard's tutorial, you could progress to the intel manuals... they're a must-have imho, but they're not written to be used by "newbies", the information is rather hardcore technical, and you probably won't need 80% (or even more) of what's written in them if you stay with usermode win32 programming.

Apart from that, browse around the web. Study disassembly and compiler-generated mixed listings (orignial source intertwined with compiler assembly output) of your own C/C++ programs. Debug your own (and others', but that's outside the scope of this board ;)) programs, look at both source and disassembly views. Poke around.
Posted on 2003-03-31 00:47:36 by f0dder
OloEopia, those two books are about the only books I haven't bought in the last 3 months (because they are too expensive). :grin:

But I have done much research on the two and both are recommended. "Introduction to 80X86 Assembly Language and Computer Architecture" is unique as it only focuses on 32-bit assembly and the last chapter even covers Win32 console programming. I've also noticed that "Assembly Language for Intel-Based Computers" is a required text on the syllabus of many colleges' systems programming courses. Both books have showed up on eBay for less then what they go for on Amazon.

Like you, I too am currently staying away from learning AoA as I want to learn MS-compatible (Masm) code (as output from VC++ using the /Fa option) first. I mainly suggested the Windows (32-bit) version of the AoA manual as selected chapters cover computer architecture (required knowledge), computer opcodes and you don't have to spend $70+ for it.

PS: The book "The Microsoft Macro Assembler Bible, 2nd Edition" is THE ultimate guide on using Masm and learning 16-bit (and some 32-bit) x86 assembly. Of the 2 dozen+ books I've bought, it is the best and extreamly readable (I'll be getting rid of at least a dozen assembly books on eBay later). :rolleyes:

And speaking of emulators (post below), check out emu8086. "emu8086 combines an advanced source editor, assembler, disassembler, software emulator with easy to use visual debugger, and step by step tutorials." It's a great integrated learning tool for understanding and applying x86 assembly basics.
Posted on 2003-03-31 02:46:46 by Masmer
comming to win32 was a complete headache for me,.... did i say "was"

i actually found it a little easier as i had had some experience with assembly before, using a PDP8 emulator.
Advantages for learning an "assembler way of thinking"
*far less registers
*far less oppcodes
*lots of tutorials
*the emulator will show you the states of all registers, so it's basically a low level debugger too.

there are a few different (and good) PDP8 emulators available on the WWW most are for UNIX boxes though and you will find some that are ported to run under DOS. i myself use the one attached.

*to moderators. i can't remember where i got this emulator, if there is a problem with me attaching it then please take it away.

http://www.cs.uiowa.edu/~jones/pdp8/ some good refernce tools

hope this helps:alright:
Posted on 2003-03-31 02:53:01 by Crunchi
Here is some 16-bit asm tutorials from Adams.

http://www.asmcommunity.net/board/attachment.php?postid=67307
Posted on 2003-03-31 02:56:55 by Vortex
OloEopia,

The C++ background is useful to you as long as you got the swing of data sizes and used enough of the C capacity rather than just the high level templates.

To get the swing of the architecture, grab every 32 bit tutorial you can to get some familiarity with the coding techniques but make sure you get the 3 manual set from Intel and put some time into reading them, they are the best around.

If you work in C++, the idea of writing modules in assembler is a good one and it simplifies your entry into assembler. This is not inline assembler but seperate modules written in assembler and linked into your C++ programs.

It takes some time to get the idea of what it is about but once you get it, its cruising where you need the performance.

Good Luck

hutch@movsd.com
Posted on 2003-03-31 05:05:12 by hutch--
Thanks for your help all, when I get time I will look over these materials.

Oh, it's true what they say, the first language any computer programmer picks up is profanity. :-D
Posted on 2003-03-31 20:59:14 by OloEopia

The problem with AoA is that it actually isn't Assembly. It converts the code into ASM, but it doesn't teach you the functionality of ASM itself, thus limited your actual power.


You mean HLA, it converts the HLA code to the syntax of another assembler. Well if it isn't assembly just think of it as a tool you can use to learn assembly language. I have learnt more about assembly language from AOA32 than anywhere alse. A lot of the chapters in the beginning chapters of AOA is about HLA but the later chapters are mostly about assembly language. This text is like a gold mine with all the information it has.

Anyway if you still don't want to use AOA the next best tutorial I can think of is Dr. Paul Carter's asm tutorial that uses nasm and the C standard library at
http://www.drpaulcarter.com/pcasm/
Posted on 2003-04-01 05:04:11 by Odyssey