General Information

From: raymoon@ms1.dgsys.com (Raymond Moon)
Newsgroups: alt.lang.asm,comp.lang.asm.x86,news.answers,alt.answers,comp.answers
Subject: x86 Assembly Language FAQ
Supersedes: <6rk75g$k83$1@news.dgsys.com>
Followup-To: alt.lang.asm,comp.lang.asm.x86
Date: 22 Sep 1998 21:44:32 GMT
Organization: MoonWare
Lines: 800
Approved: news-answers-request@MIT.EDU
Distribution: world
Expires: Tue, 20 Oct 1998 23:59:59 GMT
Message-ID: <6u95o0$ot7$1@news.dgsys.com>
Reply-To: raymoon@moonware.dgsys.com
Posting-Frequency: monthly (21st of every month)
Last-modified: 1998/8/20

------------------------------

Subject: 1. Introduction and Intent

This is the x86 Assembly Language FAQ for the comp.lang.asm.x86 and
alt.lang.asm newsgroups.  This FAQ is posted monthly on or about the 21st
of the month on both newsgroups and news.answers, alt.answers and
comp.answers.  It also is archived at the normal FAQ archival sites and the
SimTel mirror sites in the msdos/info directory.  Lastly, the current
version is available from my web page as:
    As text files:
        http://www2.dgsys.com/~raymoon/faq/asmfaq.zip
    As html documents:
        http://www2.dgsys.com/~raymoon/faq/asmfaqh.zip
Currently, this FAQ is broken into six sections.  The following are the
section filenames and the scope of each section of the FAQ.

assembly-language/x86/general/part1 - This is the basic portion of the FAQ
    that contains information of interest to all assembly language
    programmers.  In general, the information contained in this portion of
    the FAQ is not specific to any particular assembler.

assembly-language/x86/general/part2 - This is a continuation of the above
    FAQ.

assembly-language/x86/general/part3 - This is a continuation of the above
    FAQ.

assembly-language/x86/microsoft - This portion of the FAQ contains
    information specific for the Microsoft MASM.

assembly-language/x86/borland - This portion of the FAQ contains
    information specific for the Borland TASM.

assembly-language/x86/a86 - This portion of the FAQ contains information
    specific for the Shareware A86 Assembler and D86 Debugger.

The scope and content of this FAQ is to go beyond just answering the
frequently asked questions.  I am including pointers to assembly language
treasure troves that are hidden out on the Internet.  I believe that this
will enhance the FAQ's value not only to the novices but also to the old
hands.

For the ease of determining what has changed since the last FAQ, the Table
of Contents will have "REVISED" at the end of the subject line for all
revised subjects.  If more than one FAQ revision has been missed, the "Last
Changed:" entry at the end of each subject can be used to determine which
subjects have been revised during the intervening time frame.

The information in this FAQ is free for all to use as long as you
acknowledge the source.  This FAQ can be reproduced in part or in its
entirety as long as the copyright is included.  This FAQ can be made
available on public servers, like ftp, gopher or WWW servers.  Please do

not modify the file, such as converting it into some other format, without
prior permission of the author.

All references to files and locations are in Uniform Resource Locators
(URLs) format.  Some web browser will be able to use these URLs directly as
hot links.  If the format is not clear to you, get RFC 1738.  It is
available from:   ftp://ds.internic.net/rfc/rfc1738.txt 

Suggestions for changes and comments are always welcome.  They can be
posted to either newsgroup or e-mailed directly to the me.

Author: Raymond Moon, raymoon@moonware.dgsys.com
Copyright 1997 - Raymond Moon
ALL RIGHTS RESERVED
Last Changed: 6 Jan 97

Return to the Table Of Contents
[General][MASM][TASM][A86/D86]
------------------------------

Subject: 2. Table of Content

To the Table Of Contents
------------------------------

Subject: 3. Charters For comp.lang.asm.x86 and alt.lang.asm Newsgroups

To know whether or not these newsgroups will meet your needs, the purpose
for which they were created are given below.

3.1  COMP.LANG.ASM.X86

comp.lang.asm.x86 was created based upon voting on a Request for Discussion
(RFD).  The RFD for this newsgroup is:

The moderated newsgroup comp.lang.asm.x86 will be open to discussions on
all topics related to assembly language and low-level programming on any
machine using an x86 processor or its clones.  Appropriate topics would
include, but not be limited to,:

Assembly language code tips, tricks, and techniques.
MASM, TASM, and other commercial assemblers
NASM, and other non-commercial assemblers
Graphics, sound, and other hardware programming
Assembly language related utilities commercial/share/free-ware
Linking assembly language with other languages
Inline x86 programming utilizing assembly emulators in higher level
    languages
Propagation of non-commercial Internet x86 resources
Any question/discussion of the direct programming of the x86
Etc...

Topics that will be filtered are:

Flames about "{Language X} is {better/worse} than ASM"
Flames like "{Assembler 1} is {better/worse} than {Assembler 2}"
Flames, personal attacks, insults, etc.
HLL code, except when used for low-level hardware programming.
Product comparisons except when presented in an unbiased fashion.
Advertisements unrelated to assembly programming or utilities.
Posts in languages other than English will be examined for approval if any
    of the moderators can read the language in question.  There is no
    guarantee of approval for a post in any language other than English.

Posting to comp.lang.asm.x86, a moderated newsgroup, is not any different
for you as posting to an unmoderated newsgroup.  When you are finished
composing your post just send it as you normally do.  Your ISP's news
server will send the post to the moderator's e-mail address.  Once
approved, the moderator will post it.  Therefore, you will not see your
postings immediately in the newsgroup.  It should take no longer than a day
or so to see it.

3.2  ALT.LANG.ASM

Alt newsgroups are initiated with a Proposal posting to the alt.config
newsgroup.  The proposal for alt.lang.asm is:

alt.lang.asm will address the problems of machine language programmers out
there in Internet land.  It will be a forum for discussion of coding
techniques and efficiency problems related to machine language.  The scope
will be broad.  We will not discriminate by machine architecture, race or
sex.

Contributors: Raymond Moon, raymoon@moonware.dgsys.com
Last changed: 9 Dec 97 

Return to the Table Of Contents
------------------------------

Subject: 4. What Is Assembly Language

4.1  WHAT IS MACHINE LANGUAGE?

Although programmers tend to use C or C++ or Pascal these days, the
language closest to the PC hardware is machine language.  Not one second
during a PCS powered on lifetime passes where the computer is not
executing machine language.

4.2  ASSEMBLY LANGUAGE OR MACHINE LANGUAGE

To word this simply, you can say that say that assembly language is a
human-readable text, and machine language is machine-readable binary code.
When you program in assembly language, you are programming on the machine
language level.

To program directly in machine language is tedious, so you use assembly
language instead, and use an assembler to produce the actual machine code.

4.3  WHEN TO USE ASSEMBLY LANGUAGE

I personally think that except as a learning exercise it's a waste of time
writing something in asm that can be written acceptably fast in a
high-level language.

Assembly language fits for the following:

 *  Low level control.  When you need to change the flags, or the control
    registers of the processor, as when entering protected mode.

 *  Speed.  Programs written in machine language execute fast!  It can
    execute 10-100 times the speed of BASIC, and about twice as fast as a
    program written in C or Pascal.

 *  Time Critical Code.  Critical sections of programs written in higher
    level languages, can be written in assembly to speed up sections.

 *  Small program size.  When you write a TSR for example this is very
    useful. Writing interrupt handlers is where assembly language shines.

Assembly language is very flexible and powerful, anything that the hardware
of the computer is capable of doing can be done in assembly.

Contributor: Patrik Ohman, patrik@astrakan.hgs.se
Last changed: 10 Jan 95

Return to the Table Of Contents
------------------------------

Subject: 5. List Of x86 OpCodes

5.1 x86 OPCODES

The best source of OpCodes up to and including the Pentium Pro processor is
in the Intel Architecture Software Developer's Manual, Volume 2:
Instruction Set Reference Manual.  It is available in .pdf format from
Intel's Web Site:

    http://developer.intel.com/design/pro/MANUALS/243191.htm

5.2 MMX OPCODES

Intel has a chapter covering these new OpCodes in the MMX Technology
Programmer's Reference Manual.  This chapter is Chapter Five - Intel
Architecture MMX Instruction Set.

    http://developer.intel.com/drg/mmx/Manuals/prm/PRM_CHP5.HTM

5.3 OTHER SOURCES OF THESE DOCUMENTS

These manuals are available on the Intel Developer's CD-ROM, see Subject
#16.  You also can find these manuals on Robert Collins' Web Site:

    http://www.x86.org/intel.doc/IntelDocs.html

Contributor: Raymond Moon, raymoon@moonware.dgsys.com
Last changed: 8 Mar 97

Return to the Table Of Contents
------------------------------

Subject: 6. What Is HELPPC and Where Is It Available

HELPPC is a Quick Reference Utility for the intermediate to advanced
programmer.  It is a shareware program written by David Jurgens.  The
latest version is 2.10

The topics distributed in an easy database format are:
    BIOS interrupts;
    DOS interrupts and DOS functions;
    EMS and Mouse functions;
    BIOS and DOS data structures;
    diagnostic codes;
    DOS commands;
    80x86 assembler instructions;
    standard and vendor specific C functions; and
    various hardware specifications.

HELPPC is customizable by users.  The documentation describes how users can
incorporate their own information into the help file format.  These user
help files then can be incorporated into the database and accessed via
HELPPC application.

HELPPC comes in two versions.  The first is a DOS command line program. 
The second is a TSR.  The TSR supports context sensitive help within many
editors.  Only 32K is taken by the TSR version.

HELPPC requires:
    DOS 2.0 or greater;
    64K of RAM for DOS Command Line or 32K for TSR; and
    hard disk recommended.

HELPPC is available specifically from:

   ftp://ftp.simtel.net/pub/simtelnet/msdos/info/helppc21.zip

HELPPC also is available from any site that mirrors the SimTel directory.

Contributor:  Raymond Moon, raymoon@moonware.dgsys.com
Last changed: 28 Dec 94

Return to the Table Of Contents