366 lines
14 KiB
Plaintext
366 lines
14 KiB
Plaintext
From: raymoon@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: <5h6e3k$b4q@reader1.news.act.net>
|
|
Followup-To: alt.lang.asm,comp.lang.asm.x86
|
|
Date: 21 Apr 1997 21:25:30 GMT
|
|
Organization: MoonWare
|
|
Lines: 345
|
|
Approved: news-answers-request@MIT.EDU
|
|
Distribution: world
|
|
Expires: Tue, 20 May 1997 23:59:59 GMT
|
|
Message-ID: <5jgm0a$ijs@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 Borland TASM
|
|
assembler.
|
|
Keywords: x86 Assemby Language ASM FAQ Borland TASM
|
|
|
|
|
|
Archive-Name: assembly-language/x86/borland
|
|
Posting-Frequency: monthly (21st of every month)
|
|
Last-modified: 1997/03/18
|
|
|
|
------------------------------
|
|
|
|
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
|
|
|
|
------------------------------
|
|
|
|
|
|
Subject: 2. Table of Contents
|
|
|
|
1. Introduction And Intent
|
|
2. Table Of Contents
|
|
3. TASM Ideal Mode
|
|
4. Borland TASM Information
|
|
5. Borland tools/Windows 95 Interworking Patches Available
|
|
6. FREELIB, Version 3.0
|
|
7. TASM Source Code Available on the Internet
|
|
|
|
------------------------------
|
|
|
|
Subject: 3. TASM Ideal Mode
|
|
|
|
3.1 SUMMARY
|
|
|
|
TASM, Borland's 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 indirected 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. Borland TASM Information
|
|
|
|
4.1 Borland 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.borland.com/pub/techinfo/techdocs/language/tools/turboasm
|
|
|
|
4.2 Borland Web Site
|
|
|
|
At Borland's Web Site, I only could find product and ordering information
|
|
on TASM. The only reference to technical information was a pointer to
|
|
Borland's ftp site.
|
|
|
|
Contributor: Ray Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 11 Nov 95
|
|
|
|
------------------------------
|
|
|
|
Subject: 5. Borland 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 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 incompatability 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.borland.com/pub/techinfo/techdocs/language/tools/turboasm/ta4p01.zip
|
|
|
|
This should be applied using the patcher executable from location:
|
|
ftp://ftp.borland.com/pub/techinfo/techdocs/language/cpp/bcpp/patch/patch.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
|
|
|
|
8.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 5687 byte Tetris game
|
|
Several Conway LIFE programs Assembly & Disassembly tables
|
|
A demonstration of FakeMode Several powerful editors
|
|
A complete DOS extender A ModeX graphics library
|
|
|
|
You can download these rather large files from SimTel:
|
|
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/asnip30a.zip 1.31 Megs
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/asnip30b.zip 1.27 Megs
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/asnip30c.zip 0.75 Megs
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 18 Mar 97
|
|
|