PDA

View Full Version : Book Review: The Art of Assembly Language, 2nd Edition


Hex Blog
April 29th, 2010, 16:06
Have you ever tried to teach x86 assembly language programming to someone coming from high level language programming background and discovered that it was hard?
Before being able to write a simple "Hello World" program one needs to know a fair deal about the x86 architecture, the assembler language and the operating system. Obviously this is not the case with high level languages such as C for example.


I was reading The Art of Asssembly Language, 2nd edition ("http://nostarch.com/assembly2.htm") book by Randall Hyde the other day and really enjoyed his approach to teaching the assembly language programming.
http://nostarch.com/images/assembly2_cov.png

In his book, Randall introduces the reader to the HLA ("http://webster.cs.ucr.edu/AsmTools/HLA/dnld.html") (High Level Assembler) compiler which will be used as a tool to learn the x86 assembly language.

The syntax of HLA can be thought of as a hybrid of Pascal and assembly language. Here's a sample "Hello world" HLA program:
Code:
program helloWorld;
#include( "stdlib.hhf" );
begin helloWorld;
stdout.put( "Hello, World of Assembly Language", nl );
end helloWorld;
You may argue that this was not an assembly language program, but what about this:
Code:
program h;
#include("stdlib.hhf";

static
s: string := "Hello World!";

procedure chksum_str; @returns( "eax" );
begin chksum_str;
mov(s, edi);
xor(ebx, ebx);
xor(eax, eax);
while( mov( [edi], al ) #0 ) do
inc(edi); // advance str ptr
add(eax, ebx);
endwhile;
mov(ebx, eax);
end chksum_str;

begin h;
stdout.put("The checksum of '", s, " is: 0x";
chksum_str();
stdout.put(eax);
if ( eax == 1234 ) then
stdout.put("Special chksum!", nl);
endif;
end h;
Although this is also not pure assembler syntax, the newcomer will enjoy learning about the x86 architecture and instruction set with the help of the features provided by HLA:

Ability to create user types
Exception handling
Control and repetition structures (and other constructs found in high level languages)
Classes and objects
Various libaries: stl, file i/o, os, array manipulation, math, etc...etc...
Throughout the book, before a programming concept is introduced, Randall talks about the necessary background information (architecture and instruction set) and then explains how to put the concept into practive using HLA.
For example, in Chapter 5 (Procedures and Units), he explains in detail how the stack is set up during a procedure call, how local variables are allocated and how to access the arguments, followed by explanation on how to use HLA to write procedures. Similarly in Chapter 6, when talking about FPU arithmetics, the author carefully explains about the FPU data and controls registers, related instruction set and finally how to use HLA to do FPU arithmetics.

If your aim is to learn assembly language in order to start reverse engineering, this book is probably not for you, however I highly recommend this book for programmers:

That always wanted to learn the x86 assembly language but found it difficult to start with. This book is well organized and easy to read
That want to teach the basics of the x86 architecture and assembly languageThat want to put together an x86 assembly program quickly. HLA compiler and the built-in libraries give you the convenience of a high-level programming language and the power of a low level language. If you use the standard libraries provided by HLA then your program is portable


http://hexblog.com/2010/04/book_review_the_art_of_assembl_1.html

Aimless
April 29th, 2010, 23:13
I wonder if Ilfak programs in HLA (pfffft!)

Much likely TASM or C/C variants.

HLA is good. But its NOT assembler. And its confusing students who STUDY Mr. Hyde's courses then go out to face the "real-world" assembler applications....

One wonders if industrial machines and NASA uses HLA.

My two cents review: stay away from this junk.

Hmmm... Peace.

Have Phun

Kayaker
April 30th, 2010, 01:20
Yah, I remember it confusing the hell out of me when I was learning ASM. But hey, it was always a good flame war starter topic in the old win32asm forums

NeOXOeN
May 6th, 2010, 09:03
lol i like comment :P


My two cents review: stay away from this junk.

hahahah so funny to see when someone is promoting the book ....

book in my opinion isnt good but not for learning ASM

_genuine
May 8th, 2010, 20:01
I didn't particularly find this book that useful, my opinion on a well written programming book is one you can use as a reference as well and teach you some of the mechanics of the language itself, not some round-about method to accommodate for the 'slower' learners ( not assuming anyone who reads this is slow of course ) In the long run it will be a cripple imo if you're doing some no-shit assembly programming. As a beginners guide to understanding, sure it does the job for the high level language programmers who have a hard time grasping the asm concepts.