Hello. Just a few days ago, I decided that I would make an effort to learn and (hopefully) master the art of assembly. I was just browsing this forum, and found some recommendations about books. After seraching some more, I found Randall Hyde's online texts, and was wondering which version of his two 'Art of Assembly' books I should read. The first deals with DOS/16-bit assembly (the older version) and the other version (the newer one) deals with Window/32-bit programming. Naturally, one would go for the newer version, but I was wondering if it is worth learning HLA. Having programmed in C++ for a few years, I was looking forwar to writing crytic code, but this HLA thing isnt all that crytic :) . Is it worth learning about HLA, or should I just read the older version, without support for HLA?

I know this is a really long-winded version of a simple questions, but any help would be appreciated. Thank you in advance!
Posted on 2001-08-15 18:44:52 by Hawkeye
I'm not the master on HLA. I've made quite some discussion with Randy in the past on various things. You must understand Randy's perspective, he wanted to make it easy for students to learn Assembly. Most are already familiar with C. He also had learned that students are more productive when most of the work is already done. For example, certain IO routines and binary>>Number conversions and so on. Imagine C without a stdio or what have you.

He learned from many years on the 16-bit verison. When he updated, he decided to build some environment that relieved the need for students to write their own string procedures and IO and other stuff. So, he created HLA. It was structured like C/C++ but was truly assembly.

Obviously he supports objects and stuff which Assembly really doesn't. So each assembly mnuemonic (instruction) is prototyped like a C function then by means of use, the students are finally able to program assembly without the help of the HLA.

Depending on how you look at it, HLA really isn't assembly any more than Visual Basic isn't BasicA. HLA is HLA with assembly-like instructions.

In the end, it gets converted by the HLA engine into MASM source files. So it's not really a compiler, either. However, in the end, Visual Basic is converted into assembly listings before it's compiled, also.

You'll find more support for MASM. Randy hangs out on the Computers.Languages.Assembly.x86 (CLAX) and hasn't been seen for a few months but should return sometime soon.

He's a professor of something and teaches Assembly for many years.

Depending on what your needs are, it's up to you. HLA has a different syntax and there isn't much support. He's converted some of the Icz tuts to HLA but for the most part, you're pretty much on your own apart from what support he gives you.

My advice, stick with MASM for now. He's making some serious updates to HLA that make it tempting to at least toy with, but that update hasn't been released yet.

Posted on 2001-08-15 20:12:09 by _Shawn
I don't mean this in a bad way, but HLA is kinda like assembly with training wheels. Randy's reason for making HLA was for his student's course work. He wanted his students to be able to write meaningful programs in the short time of the class. He has released it to the public, but it's intended purpose is for the classroom.

You've used C++ for a few years? Ever look at the dissaembly of one of your programs? You have enough programming with another language that you should be able to recognize the same concepts in asm with a little practice.

I may be misunderstanding your question, too. Unfortunatly Randy's Art of Assembly for 32-bit only uses his HLA style. Perhaps someone else here knows a good link for the introduction of 32-bit assem programing.
Posted on 2001-08-15 20:37:47 by ThoughtCriminal
Alright, HLA was exactly what I thought it was..thank you guys for the info. I guess I will go on learning assembly using MASM, bot the HLA route. What exactly are the pros and cons about coding with 16-bit asm as opposed to 32-bit, as introduced by Randy (if there is a difference)? Thanks again for your help.
Posted on 2001-08-15 23:52:25 by Hawkeye
The biggest differences are memory segmentation and the interrupts used in 16-bit/DOS programs. While you won't use these in Windows, I think it's good to at least have a working knowledge of them. You don't worry about segments with the flat memory model, and you call OS functions using the WinAPI, instead of interrupts.

Some say that DOS is dead, and it's not worth learning the environment, considering that "everyone" runs Windows. Myself, I think it's important to understand the history of the x86 CPU. And you never know, you may find yourself doing some "low level" programming outside of the Windows environment (just the kind of thing that assembly people get into!), where you'll need to know what that DS register does... :)
Posted on 2001-08-16 00:37:56 by S/390
Hmm, thanks for the input, S/390. I know there are many tutorials out there, including Icz's, but are there any in-depth tutorials/online books like Randy's 'Art of Assembly' on the subject of 32-bit asm?

As for Randy's books, if I can't find anything else, I guess I'll get comfortable with the 16-bit DOS environment, then work my way up to the 32-bit level. Thanks again, guys!
Posted on 2001-08-16 01:43:52 by Hawkeye

I guess I'll get comfortable with the 16-bit DOS environment

UGH! Getting comfortable with 16bit mode would be a pretty hard
thing to do. Remembering values for interrupt calls to get things done,
battling the segmented memory model, limitations limitations limitations :(.

I'd advice you to read iczelion's tutorials. Sure, they're meant for
people who know assembly and need to learn windows programming,
but the instructions he uses are pretty simple, so you're actually
able to learn the basics of asm just by looking at his code :).

Once you are fluent with 32bit assembly, you can always *consider*
moving down to 16bit.
Posted on 2001-08-16 05:50:42 by f0dder

The general drift of 32 bit assembler code is that it is a lot cleaner, faster and simpler. By all means have a wade through Randy Hyde's old 16 bit AOA as it will help you become familiar with the instructions but don't waste your learning time on DOS specific code, its effectively dead.

MASM is a good tool for working in assembler, it can write anything in 32 bit windows from direct low level instructions to C like high level constructions so you C++ background will be useful to you. This flexibility allows you to get down to the "nitty gritty" in a comfortable way without having to jump in directly at the deep end.

Regards & good luck with it.

Posted on 2001-08-16 06:35:01 by hutch--
Alright, thank you all for your input. I am very greatful for this 'newbie friendly' forum. Great job, and keep it up! If I have any more questions, well, I know who to come to. Thanks again!
Posted on 2001-08-16 13:54:50 by Hawkeye