hello there.
please, i need a good tutorial/book to teach me assembly from 0! eventualy from -1... i lately bough an asm book but it seems VERY hard, i mean wtf... i learned programming in c/c++ & php&mysql and i never saw something harder than this. i understand that asm is not for dummies but however im not so a dummy when talkin about computers (the soft part) and other programming languages other than asm (at least i think so). the book i was talking about started telling me about "segment register", "logical memory", "physical memory", "registers x,y,z", "segmented memory",  and so on, things i never heard of them, or maybe i heard but it didnt make any sense to me so i didnt pay them attenion... though the salesman told me that book takes me from 0!!! i kinda desperate learning when i wanna learn something new and i dont find anything good... so PLEASE, if you have any good tutorial, or book that might help me, i'd be very tankful for it...
Posted on 2006-12-25 04:40:08 by then00b
The only assembly interpreter in the world.
http://www.btinternet.com/~btketman/

...took me 25 years before I could start learning the basics of assembly, you still have to read it about...ooh, 50 to 100 times before stuff sinks in properly but it does show you what happens and your errors when you write crappy "hello world" asm in the early stages.

Only runs in DOS  8)

I think the advantage it has for dummies is its ability to help you figure out your errors in the early stages of the learning curve, which can be steep.
(vertical in my case)
Once you get that "bigger picture" in your head you can move onto any asm language you choose, its still hard, but you're no longer a completely clueless muppet.
Posted on 2006-12-25 05:04:46 by eek
Won't a debugger work just as well?  ;)
Posted on 2006-12-25 07:15:48 by roticv
Assembly language isn't hard ... it's actually very simple .. so simple it SEEMS hard, particularly if you have filled your head with preconceptions in regards to what a programming language 'should look like'.
For that reason, absolute beginners find asm easier to digest than programmers who have a HLL prgramming background.. just keep trying to comprehend what's going on - eventually 'something will click' and you'll wonder why you had so much trouble.
I think the main problems that most HLL people seem to have when learning asm are related to their lack of experience with number systems other than base10 - ie base2 and base16... when it comes to 'lowlevel asm', understanding such concepts is invaluable, but can be mostly avoided by asm beginners.
Also - it's not really such a bad thing to have experience in higher languages, since MANY programming paradigms cross language borders - you end up 'thinking in highlevel' and 'working in lowlevel' simultaneously.. and the most ironic part of this learning process is that once you REALLY understand asm, you're likely to hide it within procedures and macros, so your source ends up looking like some kind of HLL, more representative of your mental blueprint than of the compiled binary code (lowlevel asm).



Posted on 2006-12-25 09:23:13 by Homer
Homer's right.  You can think of it like a much less extreme case than writing a Turing Machine to do something (if you've learned about TMs).  A Turing Machine is extremely simple, and so in order to do anything, you need to think of everything in a completely different way than normal, making it ironically difficult.  Plus, although assembly starts off seeming completely different from every other language, it eventually seems just like any other language.

Also note that there are different areas of assembly knowledge.  If you want to become an experienced assembly expert in every area, you'd better start now and devote your life to it, because there's a lot of stuff that you could learn about.  Just writing very basic stuff doesn't take a lot of knowledge at all, and I doubt that any of us on this forum have experience in every area.

I've found that the hard stuff to write in assembly tends to be the stuff that takes the longest for the computer to do (possibly excluding when you're doing the interlaced dependencies optimization), unlike in most high-level languages, where a lot of the time-consuming stuff tends to be hidden, so it's tough to identify bottlenecks in them.  On the other hand, debugging is often VERY different from other languages, so it takes a while to get used to identifying causes of symptoms.

I'll eventually get around to making an editor to make language-independent the miscellaneous stuff that's not really language-unique, but that has different syntax in every language, like function declarations, structures, enumerations, constants, and especially documentation.  That'd make just about any language easier to work with (and mixing languages too).  I've got some screenshots of it here, but I'm back to working on the OS for a while, unless people want an editor like this sometime soon.

I started learning assembly with Randall Hyde's Art of Assembly tutorial, the DOS version, but the DOS stuff might not be worth learning these days.  I haven't checked out the Windows version, but hopefully it's as good as the DOS version.

Best of luck to ya!
Posted on 2006-12-25 11:20:07 by hackulous
first off all i wanna thank you all for replying me.


I think the main problems that most HLL people seem to have when learning asm are related to their lack of experience with number systems other than base10 - ie base2 and base16...

well it would be great if that would be the main problem :) i have some more experience in numering systems :)



If you want to become an experienced assembly expert in every area, you'd better start now and devote your life to it....

thats what i want :)


i have just downloaded that book you was saying, hackulous... i have tones of books but they're all like the one i was telling you in my first post... i just need something that really takes you from 0 :(
Posted on 2006-12-25 11:51:43 by then00b
hmm... did you read intel system programming books?

for hll programmer, it won't be hard.
just use dos debug to make a simple "hello world".
from there you step up, to learn tricks/method used in asm.

for me, i can't put myself in a state just reading then understand.
i prefer read at a glance and practice it directly.
of course, hex number influency is a must.

good luck
Posted on 2006-12-25 22:58:24 by dion

hmm... did you read intel system programming books?


LOL!  I hope he knows that you're just joking.  We don't want the guy crying his way to sleep!

For then00b, just so you know, dion is referring to the Intel 64 and IA-32 Intel Architectures Software Developer's Manual, Volumes 3A and 3B: System Programming Guide.  Although it's mighty useful for writing the guts of an operating system, it's enough to make any beginner run for their life.  I suppose it's even big enough to knock someone out now too at just under 1,266 pages.  :lol:
Posted on 2006-12-25 23:35:10 by hackulous
ok, i've started to read that book "AoA by Randall Hyde" and i read that this HLA is an assembly made for beginers, and it seems similary with what i learned (thats why i think is called HIGH-LEVEL-ASSEMBLY). my question is: how will this help me later to understand the real assembly?
Posted on 2006-12-26 01:57:28 by then00b
HLA is effectively a preprocessor which converts HLA sourcecode into MASM sourcecode...which you COULD have written yourself.

HLA can hide some of the more tedious details of asm from the programmer.. but it's up to you whether or not you investigate the MASM sourcecode that HLA produces.


The same things actually apply to MASM itself.
MASM contains some 'high level directives' such as .if/.else/.endif which generate extra opcodes in the binary output.
You can use a disassembler to investigate the lowlevel output of MASM's highlevel directives, but we can still say that MASM is hiding some tedious details from the programmer, so HLA isn't evil.



I choose not to use HLA.. instead, I typically choose to use masm plus ObjAsm32 , which is "masm plus a bunch of macros".
My code LOOKS a lot like C++, HLA, and other highlevel languages, but underneath it all there's still masm.
Basically it means I retain control of the cpu, and I can mix lowlevel and highlevel in the same sourcecode,and we don't need any preprocessor (so buildtimes are faster).
Posted on 2006-12-26 03:25:06 by Homer

Won't a debugger work just as well?  ;)

I've been messing about with asm on and off for 6months or so and never looked at a debugger yet.
Maybe later...sometime next year if the mood takes me :D
Posted on 2006-12-26 05:47:43 by eek