I'm new to Assembly, and I've learned by the only book of Assembly that you can find in Brazil and by some tutorials over the internet, but I want to know. How you learned Assembly?

Best Regards,
Nathan Paulino Campos
Posted on 2010-01-24 08:38:36 by nathanpc
In the 80s (I don't really remember what year) I purchased my first computer - A Tandy!. I only have little memories about it except that I thought it was mostly garbage at the time. I moved over to Atari and started typing those listing from magazines into it. I'd say that 80% of the time I skipped lines or made mistakes and those damn listings never worked.

A decade later I purchased a 486DX33 and ran WingCommander as my first game. Farted around in Basic for awhile and then in 98 found +Sandmans little corner of the web. Became a lurker for the longest time while following his tutorials mostly guessing my way through assembly listings.

Then the turn around happened: I found Neural Noise's Notepad functionality adding tutorial and was suckered in for good. Extending some apps like Notepad became fun up to the point when you realized that you could (hold your breath) write a similar program yourself with the functionality you wanted without digging through stupid disassembly listings and Hiew calculating your jumps wrong.

Looking around for assemblers I found Iczelion's message board and asked most of my stupid questions in #win32asm where I was always helped quickly and sent on my way. (Also in that time frame I followed Adams 16bit tutorials)

As I paid for my internet connection by the minute I was angry that when I downloaded my email on my 56Kbits connection and spent x amount of my hard earned allowance on spam so I wrote my first app (The Infamous SpamKiller) - A year or two ago I tried having a look at that code but >< ouch! quickly closed the editor before I felt compelled to change my nickname because of the stigmata of badly written public code :) WTF documentation, secret flags doing "who knows what" inside random procedures, etc...

Nowadays I code little tools which help me do my work at work. Like for my last job I had to do some extremely annoying data entry once a month. I coded an app where I set a few flags and it would enter most data & options in the 'data entry'-program for me so that I could have more time for important things (like Youtube and such).

I believe it was Ernie who once said that most of his assembly was mov's and invoke's anyway and I kind of agree with him there. I never bothered to look beyond the normal opcodes, I dabbled in floating point to write myself a "Paid Time Off Calculating" program but unless I need it I'll never look into paddmvqdblbuttset or similar opcodes :)
Posted on 2010-01-24 15:30:28 by JimmyClif
I also bought my first computer in 1986, also a Tandy (TRS-80), second-hand in a "garage sale" for $500. It came with an expansion interface bringing the total memory to 64k,  a TTX printer with a stand, 4 single-sided floppy drives, and a small book on BASIC.

After writing a few small apps in basic, I noticed half a chapter in the book mentioning "machine language". It got my curiosity and I spent another $4 on another book explaining assembly for the TRS-80. I then rewrote a few of my small apps with that new knowledge and observed a 100+ times increase in execution speed. I was hooked!!!

With only some 800 different opcodes available, I then wrote myself a disassembler, primarily to study the BIOS and try to learn how some of the basic operations were being performed. All that was being done by hand coding and entering the opcodes from the keyboard. I got tired of that and eventually wrote an assembler to go along with the crude word processor which I had written previously.

When I eventually purchased a PC-XT a few years later, I had accumulated enough experience to switch over without too much trouble to 8086 assembly with MASM.

Today, help is a lot more accessible than in the old days. However, your progress will primarily depend on how much effort you put in to learn the basics. And I do mean the BASICS. If you start by using all those available macros or library functions to perform some of the meanial tasks, you will not be learning the basics. Those should be used only after you understand how they work. (The latter does not necessarily apply to the Windows API functions.)

One thing I would strongly recommend is to obtain a good debugger (such as Ollydbg) and learn how to use it. You can then step through your program instructions and observe what each instruction accomplishes compared with its description elsewhere.
Posted on 2010-01-24 21:24:45 by Raymond
So it's all the old dudes answering...

First computer I programmed on was a 'microbee' (Australian schools) - Z80, 64KB, CP/M 2.2, late 80's.
Used the 'monitor' (built-in hex viewer) to look at the code, wrote my own via EDASM, then got access to an 8088 XT...heaven (even with MASM v1.25).
I used to know all of the Z80 mnemonics by hexcodes...sad isn't it.

I really learned by disassembling a shite-load of other programmers' code and basically re-writing it.
If you want to know the basics, don't use macros, don't use invoke etc. Write your program and look at it in debug.

Don't listen to the 'forget 16-bit' brigade, if you want to know the low-level stuff then go for it.
Posted on 2010-01-25 02:11:48 by sinsi
Got my first PC in 2001, started programming in VB6. In 2002, VB wasn't fast enough to calculate sound for some synth I was coding, so I moved to C for a week. LCC didn't optimize well enough to meet the performance requirements, so I searched with yahoo and programmers-heaven on ASM tutes. The best tute was: a step debugger. You type the asm code, and see what each line changes in the registers and memory. Thanks to asm I finally understood C pointers :D .
Several years before 2001, maybe in 1996, I had the chance several times to copy/paste retype several short Basic apps and see them draw pixels, on a "pravec 8D", an Apple ][ clone.
Posted on 2010-01-25 06:16:27 by Ultrano
I got my first taste of assembly when I got an Expert cartridge for my C64, and it came with a small tutorial on how to use its machine language monitor to cheat in games.
Later I toyed around with graphics and demos and such... and when I started uni, I met another guy who was also deeply into computer graphics and assembly optimization (ewald). That's when I started programming assembly on x86, first with DOS, later with Win32/DDraw, and using things like MMX, 3DNow! and SSE.
Posted on 2010-01-25 08:18:51 by Scali
Nice history's. Thanks for sharing.
Posted on 2010-01-31 08:22:26 by nathanpc