441 lines
17 KiB
Plaintext
441 lines
17 KiB
Plaintext
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 - Borland TASM
|
|
Supersedes: <70vrp3$1p4$5@news.dgsys.com>
|
|
Followup-To: alt.lang.asm,comp.lang.asm.x86
|
|
Date: 23 Nov 1998 18:09:44 GMT
|
|
Organization: MoonWare
|
|
Lines: 420
|
|
Approved: news-answers-request@MIT.EDU
|
|
Distribution: world
|
|
Expires: Sun, 20 Dec 1998 23:59:59 GMT
|
|
Message-ID: <73c8d8$nos$5@news.dgsys.com>
|
|
Reply-To: raymoon@moonware.dgsys.com
|
|
Summary: This is the FAQ for the x86 Assembly Language programmers for
|
|
the alt.lang.asm and comp.lang.asm.x86 newsgroups. This particular
|
|
section of the FAQ contains x86 assembly information specific to the
|
|
Inprise's Borland Turbo assembler.
|
|
Keywords: x86 Assemby Language ASM FAQ Inprise Borland TASM
|
|
|
|
|
|
Archive-Name: assembly-language/x86/borland
|
|
Posting-Frequency: monthly (21st of every month)
|
|
Last-modified: 1998/10/25
|
|
|
|
------------------------------
|
|
|
|
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 to both newsgroups and news.answers, alt.answers and
|
|
comp.answers. It also is archived at the normal FAQ archival site,
|
|
ftp://rtfm.mit.edu and to SimTel and its mirror sites in the msdos/info
|
|
directory and Garbo and its mirrors in the pc/doc-net 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 Inprise's Borland Turbo Assembler.
|
|
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 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
|
|
period.
|
|
|
|
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 me.
|
|
|
|
Author: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Copyright 1998 - Raymond Moon
|
|
ALL RIGHTS RESERVED
|
|
Last Changed: 25 Oct 98
|
|
|
|
------------------------------
|
|
|
|
|
|
Subject: 2. Table of Contents
|
|
|
|
1. Introduction And Intent
|
|
2. Table Of Contents
|
|
3. TASM Ideal Mode
|
|
4. Inprise TASM Information
|
|
5. Inprise Tools/Windows 95 Interworking Patches Available
|
|
6. FREELIB, Version 3.0
|
|
7. TASM Source Code Available on the Internet
|
|
8. TASM Version 5.0 Patch
|
|
9. Inprise's TASM Newsgroup
|
|
10. TASM MMX Macros
|
|
11. TASM IDE
|
|
|
|
------------------------------
|
|
|
|
Subject: 3. TASM Ideal Mode
|
|
|
|
3.1 SUMMARY
|
|
|
|
TASM, Inpise's Borland Turbo Assembler, supports an alternative to MASM
|
|
emulation. This is known as Ideal mode and provides several advantages
|
|
over MASM. The key (questionable) disadvantage, of course, is that MASM
|
|
style assemblers cannot assemble Ideal mode programs.
|
|
|
|
3.2 MEMORY CONTENTS
|
|
|
|
Square brackets are used consistently to refer to memory contents.
|
|
Notice that size qualifiers are not necessary when TASM has enough
|
|
information by context to figure out the data size involved. Here are
|
|
some examples without segment details:
|
|
|
|
ByteVal db ? ; "ByteVal" is name of byte variable
|
|
|
|
mov ax, bx ; OK: Move value of BX to AX
|
|
|
|
mov ax, [bx] ; OK: Move word at address BX to AX. Size of
|
|
; destination is used to generate proper object
|
|
; code
|
|
|
|
mov ax, [word bx] ; OK: Same as above with unnecessary size
|
|
; qualifier
|
|
|
|
mov ax, [word ptr bx]
|
|
; OK: Same as above with unnecessary size
|
|
; qualifier and redundant pointer prefix
|
|
|
|
mov al, [bx] ; OK: Move byte at address BX to AL. Size of
|
|
; destination is used to generate proper object
|
|
; code
|
|
|
|
mov [bx], al ; OK: Move AL to location BX
|
|
|
|
mov ByteVal, al ; Warning: "ByteVal" needs brackets
|
|
|
|
mov [ByteVal], al ; OK: Move AL to memory location named
|
|
; "ByteVal"
|
|
|
|
mov [ByteVal], ax ; Error: unmatched operands
|
|
|
|
mov al, [bx + 2] ; OK: Move byte from memory location BX + 2 to
|
|
; AL
|
|
|
|
mov al, bx[2] ; Error: indexes must occur with "+" as above
|
|
|
|
mov bx, Offset ByteVal
|
|
; OK: Offset statement does not use brackets
|
|
|
|
mov bx, Offset [ByteVal]
|
|
; Error: offset cannot be taken of the
|
|
; contents of memory
|
|
|
|
lea bx, [ByteVal] ; OK: Load effective address of "ByteVal"
|
|
|
|
lea bx, ByteVal ; Error: brackets required
|
|
|
|
mov ax, 01234h ; OK: Move constant word to AX
|
|
|
|
mov [bx], 012h ; Warning: size qualifier needed to determine
|
|
; whether to populate byte or word
|
|
|
|
mov [byte bx], 012h
|
|
; OK: constant 012h is moved to byte at
|
|
; address BX
|
|
|
|
mov [word bx], 012h
|
|
; OK: constant 012h is moved to word at
|
|
; address BX
|
|
|
|
STRUCTURE REFERENCES
|
|
|
|
Ideal mode handles structured records beautifully. When referring to
|
|
structure members the dot operator is used. The name to the left of the
|
|
dot is always the address of a structure and the name to right is always
|
|
a structure member. Ideal mode permits member names to be duplicated in
|
|
different structures. Here is a simple example, again without segment
|
|
details:
|
|
|
|
Struc PosType
|
|
Row dw ?
|
|
Col dw ?
|
|
Ends PosType
|
|
|
|
Union PosValType
|
|
Pos PosType ?
|
|
Val dd ?
|
|
Ends PosValType
|
|
|
|
Point PosValType ?
|
|
|
|
mov [Point.Pos.Row], bx ; OK: Move BX to Row component of Point
|
|
|
|
mov [Point.Pos.Row], bl ; Error: mismatched operands
|
|
|
|
INDIRECTION
|
|
|
|
Ideal mode enforces type-size checking even with indirect references.
|
|
Using the above structure, here is how indirection is handled. BX is
|
|
assumed to point to an instance of PosValType in memory. Indirection is
|
|
used frequently when pointers are passed to procedures.
|
|
|
|
mov [(PosValType bx).Pos.Row], ax
|
|
; OK: Move AX to Row component of PosValType
|
|
; instance pointed to by BX
|
|
|
|
mov [bx + PosValType.Pos.Row], ax
|
|
; OK: same as above
|
|
|
|
mov [bx + PosValType.Pos.Row], al
|
|
; Error: mismatched operands
|
|
|
|
SEGMENT GROUPS
|
|
|
|
The Offset operator always evaluates the offset of a data instance
|
|
relative to its group, not its segment. This allows Offset to be used
|
|
without qualifying each reference with the appropriate group name.
|
|
Labels in a segment could be used to determine segment offsets if
|
|
needed.
|
|
|
|
RESOURCES
|
|
|
|
Books and files which will be of interest to programmers wishing to know
|
|
more about the Ideal mode of Borland's TASM assembler include the
|
|
following:
|
|
|
|
Turbo Assembler User's Guide / Borland International.
|
|
------------------------------------------------------------------
|
|
Naturally, this is the definitive text on Ideal mode. Its focus is
|
|
strictly on using TASM; it does not cover assembly language or the
|
|
x86 instruction set. Exasperatingly, the examples in the book all
|
|
use MASM emulation mode, and only one of the four complete program
|
|
examples included with TASM (at least version 3.1) uses Ideal mode.
|
|
The example that does use Ideal mode is a very flexible WHEREIS
|
|
program. Studying this 13 file example should be sufficient for
|
|
anyone wishing to understand Ideal mode.
|
|
|
|
Mastering Turbo Assembler / Tom Swan.
|
|
Indianapolis, IN: Hayden Books, c 1989.
|
|
------------------------------------------------------------------
|
|
This book is not just another Microsoft Assembler book reprinted
|
|
with a Turbo Assembler cover. Swan uses and promotes Ideal mode
|
|
throughout. This is a great beginning text for programmers who are
|
|
still hassling with the ubiquitous non-reentrant interrupt handler
|
|
known as DOS. It includes an overview of the x86 instruction set.
|
|
|
|
SKEL32.ZIP / Bill Magaletta.
|
|
Obtainable by ftp at hobbes.nmsu.edu:/os2/32bit/program as well as
|
|
ftp-os2.cdrom.com and CompuServe
|
|
------------------------------------------------------------------
|
|
This is a standalone 32 bit OS/2 Ideal mode program, the simplicity
|
|
of which will make converts of DOS programmers dealing with
|
|
interrupts and segments. It includes an overview of the initial
|
|
register states of DOS and OS/2 programs. This example illustrates
|
|
the fact that TASM for DOS can be used to produce object files for
|
|
OS/2.
|
|
|
|
Contributor: Kurt Jung, kwjung@vela.acs.oakland.edu
|
|
Last changed: 17 Jan 95
|
|
|
|
------------------------------
|
|
|
|
Subject: 4. Inprise Borland TASM Information REVISED
|
|
|
|
4.1 Inprise FTP Site
|
|
|
|
Borland maintains a ftp site which has a directory dedicated to TASM.
|
|
Most entries are patches and HOW-TOs, but there is a shell for TSRs that
|
|
will load and unload either high or low.
|
|
|
|
ftp://ftp.inprise.com/pub/borlandcpp/devsupport/tasm/
|
|
|
|
4.2 Inprice Web Site REVISED
|
|
|
|
At Borland's Web Site, I only could find a factsheet on TASM. Most
|
|
information was found in the Borland C++ Quick Tour. Click on the TASM
|
|
icon in the lower right
|
|
|
|
Contributor: Ray Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 23 Nov 98
|
|
|
|
------------------------------
|
|
|
|
Subject: 5. Inprise Tools/Windows 95 Interworking Patches Available
|
|
|
|
5.1 TASM32/H2ASM/H2ASM32 FAIL UNDER WINDOWS95
|
|
|
|
Using the 32bit tools from Borland C++ 4.5 / TASM 4.0 under Windows 95
|
|
can fail when the DOS based tools are called from the Windows IDE.
|
|
|
|
The nature of the problem is that any attempt to specify a commands file
|
|
using the @ style argument will fail due to an incompatibility between
|
|
Windows 95 long filenames, and the TASM32.EXE file-open code.
|
|
|
|
Note that by default the Borland C++ 4.5 IDE uses the @ directive for
|
|
launching TASM32.EXE if 32bit instructions (which are not handled by the
|
|
inline C++ assembler) are encountered in a user's source.
|
|
|
|
Although the Borland tools reportedly use the PowerPack DPMI extensions
|
|
for their 32bit operation, user applications which use the Powerpack
|
|
libraries do not seem to be affected by this problem.
|
|
|
|
A patch is available to correct this issue from location:
|
|
ftp://ftp.inprise.com/pub/borlandcpp/devsupport/patches/tasm/ta4p01.zip
|
|
|
|
This should be applied using the patcher executable from location:
|
|
ftp://ftp.inprise.com/pub/borlandcpp/devsupport/patches/bc5/patch.zip
|
|
|
|
Some people experience problems using the normal version 3.20 PATCH
|
|
program on systems running NTFS. This version should be used only
|
|
under Windows NT, and only if there have been immediate crashes using
|
|
the regular version. The URL for this version is:
|
|
ftp://ftp.inprise.com/pub/borlandcpp/devsupport/patches/bc5/patch-nt.zip
|
|
|
|
Contributor: Iain Barker, ibarker@bnr.ca
|
|
Last changed: 19 Feb 96
|
|
|
|
------------------------------
|
|
|
|
Subject: 6. FREELIB, Version 3.0
|
|
|
|
Freelib v3.0 is a library of 200 routines that may be useful for
|
|
assembly language programming. Freelib includes routines that do many
|
|
of the tasks that make assembly language difficult - like buffered
|
|
file I/O, formatted string output, memory allocation, etc. Also
|
|
includes 16.16bit fixed point arithmetic, text screen output (EGA
|
|
80x25 or VGA 90x34), and VGA graphics in both 16 and 256 colors. All
|
|
routines are highly optimized for size and speed, and average only 60
|
|
bytes each. Full source code and documentation is included for all
|
|
routines. Freelib is public domain software, free for non-commercial
|
|
use. The library is available from SimTel:
|
|
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/freeli30.zip
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 20 Dec 96
|
|
|
|
------------------------------
|
|
|
|
Subject: 7. TASM Source Code Available on the Internet
|
|
|
|
7.1 TENIE REMMEL'S ASSEMBLY SNIPPETS CODE COLLECTION
|
|
|
|
The Assembly Snippets is a large collection of assembly language code
|
|
and other information. Many files from the original 80XXX snippets,
|
|
the ASM0-Z collection, and the Aquila site are included. All code is
|
|
99% guaranteed to compile under TASM. This new release contains the
|
|
following items, among others:
|
|
|
|
An object file disassembler A 4971 byte Tetris game
|
|
Several Conway LIFE programs Assembly & Disassembly tables
|
|
A demonstration of FakeMode Several powerful editors
|
|
A complete DOS extender A Pentium optimization list
|
|
A ModeX graphics library Info for writing antivirus
|
|
|
|
You can download these rather large files from SimTel:
|
|
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/asnip40a.zip 1.41 Megs
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/asnip40b.zip 1.35 Megs
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/asnip40c.zip 1.32 Megs
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 21 May 97
|
|
|
|
------------------------------
|
|
|
|
Subject: 8. TASM Version 5.0 Patch
|
|
|
|
8.1 TASM 5.0 PATCH 1 (152KB)
|
|
|
|
This patch will modify TD32.EXE and TASM32.EXE to support Borland
|
|
C++Builder applications. The URL is:
|
|
http://www.borland.com/devsupport/borlandcpp/patches/TASMPT.ZIP
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 26 Dec 97
|
|
|
|
------------------------------
|
|
|
|
Subject 9. Inprise's Borland TASM Newsgroup
|
|
|
|
Borland has create a whole family of newsgroups devoted to their
|
|
products. One of these new newsgroups is devoted to TASM. Its URL is
|
|
|
|
news:forums.inprise.com/borland.public.tasm
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last Changed: 26 Dec 97
|
|
|
|
------------------------------
|
|
|
|
Subject 10. TASM MMX Macros
|
|
|
|
Normand Leclerc has written some Turbo Assembler MMx macroes that are
|
|
based on Intel's IAMMX.INC definition file. Transparent to the
|
|
programmer, they have been written to be used in IDEAL mode. They
|
|
can be assembled with or without case sensitivity and support
|
|
simplified segmentation definitions. The are available from:
|
|
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/mmxtasm0.zip
|
|
|
|
Contributor: Normand Leclerc, lecn1306@ele.etsmtl.ca
|
|
Last Changed: 20 Mar 97
|
|
|
|
------------------------------
|
|
|
|
Subject 11. TASM IDE
|
|
|
|
Joost Vrielink has developed a Turbo Assembler IDE. It is free for
|
|
downloading from his web site:
|
|
http://www.angelfire.com/in/tasm
|
|
|
|
The IDE is an editor just like WordPad, but compile/link/run/debug
|
|
can be accomplished with just one click It also has a built-in
|
|
dec/hex/bin/oct converter, and syntax highlighting is almost
|
|
finished. It is perfectly suited to make simple 16-bit DOS programs
|
|
within the Windows 95/98 environment. Changes are being added quite
|
|
often, so remember to return and check every now and then.
|
|
|
|
Contributor:Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last Changed: 19 Sep 98
|
|
|