1006 lines
37 KiB
Plaintext
1006 lines
37 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 - General Part 3/3
|
|
Supersedes: <70vrnf$1p4$3@news.dgsys.com>
|
|
Followup-To: alt.lang.asm,comp.lang.asm.x86
|
|
Date: 23 Nov 1998 18:08:39 GMT
|
|
Organization: MoonWare
|
|
Lines: 985
|
|
Approved: news-answers-request@MIT.EDU
|
|
Distribution: world
|
|
Expires: Sun, 20 Dec 1998 23:59:59 GMT
|
|
Message-ID: <73c8b7$nos$3@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 is part three of three parts that contain x86
|
|
assembly language information common to all assemblers.
|
|
Keywords: x86 Assemby Language ASM FAQ General
|
|
|
|
|
|
Archive-Name: assembly-language/x86/general/part3
|
|
Posting-Frequency: monthly (21st of every month)
|
|
Last-modified: 1998/11/23
|
|
|
|
------------------------------
|
|
|
|
Subject: 26. WWW Assembly HomePages REVISED
|
|
|
|
26.1 CAUTION
|
|
|
|
All of the web sites listed here are maintained by individuals. I will
|
|
strive to maintain this list current but do not be surprised if the
|
|
addresses no longer are current.
|
|
|
|
26.2 ASSEMBLY LANGUAGE RELATED HOME PAGES
|
|
|
|
Randy Hyde's Assembly Language Page
|
|
http://cuda.ucr.edu/Page_asm
|
|
Excellent tutorial, Art of Assembly Language
|
|
ASM Style Guide
|
|
|
|
Christian Ludoff's 80x86 Sandpile Page
|
|
http://www.sandpile.org Basic Page
|
|
http://www.sandpile.org/80x86/overview.shtml
|
|
The second page is where you should kept you link. Much good
|
|
information is available at this site.
|
|
|
|
EG3 Electronic Communication's Electronic Engineer's Toolbox
|
|
http://www.eg3.com/softd/assembly.htm
|
|
Assembly Language Hot Lists and Major Resources.
|
|
|
|
Robert Collins' x86 Monthly Digest
|
|
http://www.x86.org/
|
|
Intel processor bugs
|
|
Intel data sheets and programming manuals
|
|
In-Depth articles
|
|
Productivity ehancements and programming tips
|
|
Rober Collins' Dr. Dobb's Journal Undocumented Corner.
|
|
Much more
|
|
|
|
Jannes Faber's Assembly home page
|
|
http://www.fys.ruu.nl/~faber/Amain.html
|
|
List of ASM Books with short reviews
|
|
A few hints and tricks
|
|
Complete source code to some of his programs
|
|
A listing of EMS Professional Shareware products
|
|
|
|
Ray Rose's HTML For Assembler home page
|
|
http://www.alaska.net/~rrose/assembly.htm
|
|
An extensive list of ASM books without descriptions
|
|
Links to alt.lang.asm, comp.lang.asm.x86, and
|
|
alt.msdos.programmer
|
|
newsgroups.
|
|
Link to the Yahoo/Computers and Internet/Languages/Assembly page
|
|
(see below)
|
|
|
|
NASM: The Netwide Assembler Project
|
|
http://www.cryogen.com/nasm
|
|
A group of programmers are writing a new assembler. This home page
|
|
describes the project and where to download the latest version.
|
|
|
|
Michael Babcock's Programming Home Page (many broken links on pages)
|
|
http://w3.tyenet.com/mbabcock/mtb.programming.html
|
|
This home page has links to:
|
|
Optimizing 803/4/586 ASM Programming
|
|
http://w3.tyenet.com/mbabcock/prg.optimize.html
|
|
ASM Tutorial
|
|
http://w3.tyenet.com/mbabcock/prg.asmtut1.html
|
|
Utilities
|
|
http://w3.tyenet.com/mbabcock/prg.utils.html
|
|
|
|
The Official Web Shareware Site
|
|
http://www.jumbo.com/pages/programming/dos/asmutl/
|
|
This site appears to have a few asm files not on SimTel.
|
|
|
|
Dr. ASM's Assembly Home Page
|
|
http://web.syr.edu/~dbgrandi/assembly.htm
|
|
Some answered questions and links to other assembly related sites.
|
|
|
|
James Vahn's 80xxx Snippets - 80x86 Assembly Language Enthusiasts
|
|
http://www.cet.com/~jvahn
|
|
Download snippets & Booklist
|
|
|
|
Kip Irvine's Assembly Language Sources
|
|
http://www.nuvisionmiami.cim/kip/asm.htm
|
|
|
|
Gavin Estey's Home
|
|
http://www.strangecreations.com/library/assembly/index.htm
|
|
His ASM tutorial, other ASM Links, FAQs and Optimizations
|
|
|
|
Grzegorz Mazur's x86 CPU Stuff
|
|
http://grafi.ii.pw.edu.pl/gbm/x86/index.html
|
|
x86 CPU identification algorithms
|
|
Cyrix/IBM5x86/6x86 (and 486) control program
|
|
Links to other information on x86 family CPUs
|
|
|
|
Heath Holcomb's x86 Assembly Page
|
|
http://www.wfu.edu/~holcojh5/x86asm/x86asm.html
|
|
Some pointers on what is assembly language, what is assembly
|
|
good for, and what do you need to get started.
|
|
Pointers to ASM Tutorial, this FAQ, other ASM web pages
|
|
|
|
Eric Isaacson's A86 Assembler and D86 Debugger Page
|
|
http://eji.com/a86/index.htm
|
|
Overviews of a86 and a386 assemblers, d86 and d386 debuggers,
|
|
download and purchase of a86 and d86.
|
|
|
|
Tore Nilsson's Assembly Tutorial Page
|
|
http://www.ice-digga.com/programming/
|
|
VLA's Assembly and DMA programming tutorials, Asphyxia's VGA
|
|
tutorials, and some graphics and sound programming
|
|
information.
|
|
|
|
Gerd Kortemeyer's 387/486DX/Pentium/Floating Point Processor Stuff
|
|
http://www.nscl.msu.edu/~kortemey/copro.html
|
|
A collection of assembler routines written for Turbo Pascal
|
|
and C++. Most of the comments are in German after an English
|
|
introduction.
|
|
|
|
Cameron's 386+ Programming Page NOT CURRENTLY WORKING
|
|
http://free.prohosting.com/~cameron/
|
|
32 bit DOS extender/Utilities/pmode extender
|
|
File formats and specifications/Game programming
|
|
Knowledge Base with ASM tutorials, Denthor's VGA Trainer and
|
|
Univ. of Guadalajara ASM tutorial
|
|
|
|
Peter's PMODE Home Page
|
|
http://www.geocities.com/SiliconValley/Peaks/1231/
|
|
Pmode tutorials and programming related files
|
|
|
|
Niko Komin's Assembler for PCS page
|
|
http://www.inx.de/~nkomin/html/assembe.htm
|
|
Shareware, pmode, x86 mnemonics, ASM related links.
|
|
|
|
Alexandre Zvenigorosky III's Programs for PC 386+
|
|
http://www.cpod.com/monoweb/zveni/prg.html
|
|
Zvenigorosky's assembler and debugger, currently
|
|
documentation only in French.
|
|
|
|
Rich Elber's ValArrow (286 Assembler) Page
|
|
http://www.geocities.com/SiliconValley/Heights/7052/valarr2.html
|
|
Links to Arrowsoft Assembler, ZD86 debugger, discussion of
|
|
Arrowsoft's Assemblers deviations from MASM.
|
|
|
|
Kurt I. Groenbech's Alab Homepage
|
|
http://www.nano.no/~espeng/alab/
|
|
Home page for the Assembler Laboratory that is an IDE for
|
|
assemblers
|
|
|
|
Christian Kurzke's Advanced x86 Assembly Programming
|
|
http://wwwcip.informatik.uni-erlangen.de/user/cnkurzke/hwkmcs/index.html
|
|
Excerpts from lessons given at Adalbert Stifter Gymnasium in
|
|
1989
|
|
|
|
Bob Richardson's PC Assembly Language Page
|
|
http://lexitech.com/bobrich/
|
|
Eighteen topics taken from his SELFIN PC Assembly Language
|
|
Group.
|
|
|
|
Jesper Pedersen's Processor Information Page
|
|
http://www.imada.ou.dk/~jews/PInfo/intel.html
|
|
List of instructions and opcodes used by Intel, AMD, Cyrix
|
|
and Nexgen.
|
|
|
|
Quantasm's x86 and Pentium Programming Tips and Info
|
|
http://www.quantasm.com/freeinfo.html
|
|
|
|
Steve Kemp's Assembly Language Programming Index (Not currently
|
|
working)
|
|
http://www.dcs.ed.ac.uk/home/skx/asm/index.html
|
|
Assembly Language Newbie information. A86 Source Code
|
|
|
|
Ferdi Smit's Assemble It! Page
|
|
http://www.xs4all.nl/~smit/
|
|
His own source code, 3D programming, his own ASM tutorial,
|
|
optimization and other information.
|
|
|
|
Paul Hsieh's x86 Assembly Language Page
|
|
http://www.geocities.com/SiliconValley/9498/asm.html
|
|
Feature articles, Optimization and General
|
|
Programming/References
|
|
|
|
Jaap Harm's 80x86 Assembly Page (Not currently working)
|
|
http://home.worldonline.nl/~jaapharm/
|
|
Tutorial, source code and links
|
|
|
|
Charles Winner s ASM Resources (Not currently working)
|
|
http://www.cse.utoledo.edu/%7Ecwinner/assembly.html
|
|
|
|
G. Adam Stanislav's Whiz Kid Technomagic
|
|
http://www.geocities.com/SiliconValley/Heights/7394/
|
|
Win95 Assembly Language source code examples
|
|
|
|
John Eckerdal's Assembly Page
|
|
http://www.geocities.com/SiliconValley/Park/6452/index.html
|
|
Nice collection of Assembly Gems.
|
|
|
|
Gaz's Little Web Programming Page
|
|
http://www.fortunecity.com/skyscraper/fatbit/427/programming.html
|
|
Protected Mode Tutorial and large library of NASM source code
|
|
written for the WDosX 32 bit DOS extender
|
|
|
|
Christopher Giese's Triple Fault Club
|
|
http://www.netwurx.net/~geezer/os/index.htm
|
|
NASM and DJGPP Code, Protected Mode Code, OS Code
|
|
|
|
The Bass Demon's Operating System Theory Page
|
|
http://home.c2i.net/tkjoerne/os/index.htm
|
|
Information on Hard Disks, Partitioning and Booting, FAT
|
|
specific filesystem information, Filesystem theory article,
|
|
Available assembler source codes and Memory Management
|
|
|
|
OS Development Page
|
|
http://milkyway.isa.net.au/os-dev/index2.html
|
|
Documentation, Links, Source files, Bulletin Board
|
|
|
|
The NASM Advocate
|
|
http://people.mw.mediaone.net/nasm/index.html
|
|
NASM source code, documentation (HTML format), NASM specific
|
|
IDE, NASM Links, NASM Mailing List and NASM Mailing List
|
|
Archives
|
|
|
|
Anthony's Programming Page:
|
|
http://www.geocities.com/SiliconValley/Network/4311/
|
|
Home of ALINK. ALINK is a linker that I am writing, to link
|
|
object files into executable programs. The ultimate purpose
|
|
is to write a free and portable linker to go with NASM, which
|
|
can link all the NASM output formats into any one of a number
|
|
of possible executable formats, so that the pair provide a
|
|
portable assembler and linker for Intel CPUs on any OS.
|
|
|
|
Craig Peacock's Interfacing the PC Page
|
|
http://www.senet.com.au/~cpeacock/
|
|
Much information about interfacing with the parallel and
|
|
serial ports, information about IRQs and AT keyboards, and
|
|
many links to more technical information.
|
|
|
|
Chris Dragan's Home Page
|
|
http://ams.ampr.org/cdragan/
|
|
His own programs and assembler source code, Win32 programs.
|
|
|
|
David Lindauer's Computer Page
|
|
http://www.geocities.com/Area51/Station/5196/treasure.html
|
|
Windows Assembly Demo for TASM
|
|
|
|
David Lindauer's LADSoft Computer Page NEW
|
|
http://members.tripod.com/~ladsoft/
|
|
|
|
Jan Wagemakers' Linux and Assembler Home Page
|
|
http://bewoner.dma.be/JanW/eng.html
|
|
|
|
Brennan's Guide to Inline Assembly
|
|
http://www.rt66.com/~brennan/djgpp/bgtia.html
|
|
Information on AT&T syntax
|
|
|
|
Dr. Carter's PC Assembly Programming Code Page
|
|
http://www.comsc.ucok.edu/~pcarter/pcasm/code/
|
|
Much NASM code
|
|
|
|
Gustavo Net's ASM page
|
|
http://www.gustavo.net/programming/asm.shtml
|
|
Links to tutorials, Programmer's Forum, source code, and
|
|
more.
|
|
|
|
Henry S. Takeuchi's Windows 95 Assembly Language Programming
|
|
http://www.eskimo.com/~htak/win95asm/win95asm.htm
|
|
Source code and tutorial
|
|
|
|
Glenn Strycker's The International Brotherhood of Assembly/Machine
|
|
Programmers (IBAMP) NEW
|
|
http://www.members.kconline.com/strycker/IBAMP/index.html
|
|
Assembly Chat and Forum, links, source code
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 23 Nov 98
|
|
|
|
------------------------------
|
|
|
|
Subject: 27. Common Reason Why Memory Allocation Fails
|
|
|
|
27.1 BACKGROUND
|
|
|
|
A common error received when first learning to use Int 21h Function
|
|
48h, allocate memory, is error code 8, insufficient memory available.
|
|
Usually, the programmer then writes a small program that only
|
|
allocates memory, and the program still fails. This situation is
|
|
quite puzzling because there should be hundreds of kilobytes of
|
|
memory available but this function reports that there is insufficient
|
|
memory for a few hundred bytes. The reason is that DOS generally
|
|
allocates all available memory above the loaded program to that
|
|
program. Therefore, there is no more memory to allocate, so the
|
|
request fails.
|
|
|
|
27.2 .COM FILES
|
|
|
|
Since a .COM file does not contain any header information, the DOS
|
|
loader has no way of determining how much memory is required for a
|
|
program beyond the physical size of the program. Even this number is
|
|
deceptive because it does not include a stack. Therefore, DOS always
|
|
allocates all available memory above the program to the program.
|
|
|
|
To use the allocate memory function, the programmer must release that
|
|
extra memory using Int 21h Function 4ah, Set Memory Block Size.
|
|
Given that generally there is more that 64 Kbytes of memory, the DOS
|
|
sets Stack Top to just under that value, it is generally safe to
|
|
release all memory above 64 Kbytes.
|
|
|
|
27.3 .EXE FILES
|
|
|
|
The amount of memory the DOS allocates to the loaded program depends
|
|
upon a value in the .EXE header. This value is called Maximum
|
|
Allocation and is a word starting at offset 12. This value specifies
|
|
the number of 16-byte paragraphs beyond the image size wanted by the
|
|
program to execute. This value must be equal or greater than the
|
|
Minimum Allocation, which is the number of 16-byte paragraphs beyond
|
|
the image size required by the program to execute. This space
|
|
generally contains uninitialized variables and the stack.
|
|
|
|
The value of Maximum Allocation is set by the /CPARM Option for the
|
|
Microsoft Linker. By default, the linker sets this value to 0ffffh
|
|
which will causes DOS to allocate the largest block of available
|
|
memory. This memory can be used as a heap, print buffer, etc.
|
|
|
|
27.4 DETERMINING HOW MUCH MEMORY IS AVAILABLE TO A PROGRAM
|
|
|
|
In the PSP, at offset 02h, DOS loads a word which is the segment
|
|
address of the next Memory Control Block or Arena. Subtracting the
|
|
PSP from that value at offset 02h will be the number of memory
|
|
paragraphs allocated to the program. The number of bytes can be
|
|
calculated by shifting that number to the left by 4 bits, multiplying
|
|
by 16, the size of a memory paragraph.
|
|
|
|
27.5 HOW TO DEALLOCATE MEMORY AT THE START OF A PROGRAM
|
|
|
|
If you want to load and execute another program, you must release
|
|
memory to make room for the program. Also, since the largest chunk
|
|
of memory is allocated already to the program, all requests to
|
|
allocate memory generally fail.
|
|
|
|
Again, to use the allocate memory function, the programmer must
|
|
release the extra memory above the program use as for a .COM file
|
|
above. The problem here is where is the end of the program. The
|
|
answer is not as simple as with the .COM file. There are two basic
|
|
solutions.
|
|
|
|
1. If you use the .dosseg option, the Microsoft Linker will define a
|
|
label, _end, at the end of the DGROUP. Since the .dosseg option also
|
|
places any FAR data segments between the code and DGROUP segments,
|
|
you can release all memory above that label.
|
|
|
|
2. If you do not want or are unable to use the first option, use an
|
|
include file which declares all segments used by your program.
|
|
Define a label in the last segment and use it as the _end label in
|
|
the first example.
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 26 Dec 95
|
|
|
|
------------------------------
|
|
|
|
Subject: 28. Volume Serial Numbers
|
|
|
|
28.1 VOLUME SERIAL NUMBER FORMAT
|
|
|
|
The volume serial number was introduced with DOS 4.0 as part of an
|
|
extended boot record and is created through you either FORMAT a disk
|
|
or use DISKCOPY to create another disk. The serial number is a
|
|
function of the time/date of the formatting or the diskcopying. Note
|
|
that DISCOPY generates a new volume serial number so a DISKCOPY is
|
|
not an exact image of the source diskette.
|
|
|
|
28.2 CALCULATING THE VOLUME SERIAL NUMBER
|
|
|
|
For example, say a disk was formatted on 26 Dec 95 at 9:55 PM and
|
|
41.94 seconds. DOS takes the date and time just before it writes it
|
|
to the disk.
|
|
|
|
Low order word is calculated: Volume Serial Number is:
|
|
Month & Day 12/26 0c1ah
|
|
Sec & Hundrenths 41:94 295eh 3578:1d02
|
|
-----
|
|
3578h
|
|
|
|
High order word is calculated:
|
|
Hours & Minutes 21:55 1537h
|
|
Year 1995 07cbh
|
|
-----
|
|
1d02h
|
|
|
|
Note that DOS interrupt 21h Functions 2ah, Get DOS Date, and 2ch, Get
|
|
DOS
|
|
Time, are particularly suited to getting the date and time for
|
|
calculating the Volume Serial Number.
|
|
|
|
28.3 READING AND SETTING THE VOLUME SERIAL NUMBER
|
|
|
|
To read the Volume Serial Number, use the IOCTL call, int 21h
|
|
function 440dh Minor Code 66h, Get Media ID. To write the Volume
|
|
Serial Number, use the IOCTL call, int 21h function 440dh Minor Code
|
|
46h, Set Media ID.
|
|
|
|
WARNING! These IOCTL calls use a structure that also contain the
|
|
volume label and file system type. So that you do not create errors
|
|
with these values, I recommend that you always Minor Code 66h to
|
|
initialize the structure before setting the Volume Serial Number to
|
|
a new value and writing it back to the disk.
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 17 Feb 96
|
|
|
|
------------------------------
|
|
|
|
Subject: 29. .obj File Format REVISED
|
|
|
|
29.1 INTEL
|
|
|
|
There are two sources for this information. The first is available
|
|
from Intel. The Tools Interface Standards Committee has prepared the
|
|
following documents:
|
|
|
|
ftp://ftp.intel.com/pub/tis/omf11g.zip
|
|
|
|
The readme file in each .zip file states that the document is the
|
|
Relocatable Object Module Format Specification, V1.1.
|
|
|
|
Unfortunately, both files unzip into documents formatted for
|
|
Postscript printers. Adobe's Acrobat can not display them, but
|
|
Ghostscript can. If you need GhostScript, you can get it from the
|
|
following site. Read the ftp://ftp.cs.wisc.edu/pub/ghost/aladdin
|
|
|
|
29.2 MICROSOFT
|
|
|
|
The second is from Microsoft. This file is located at:
|
|
|
|
ftp://ftp.microsoft.com/Softlib/MSLFILES/ss0288.exe
|
|
|
|
This file expands into ascii text files that are the Microsoft
|
|
Product Support Services Application Note: Relocatable Object Module
|
|
Format. These files date from 1992. Also included is the .lib file
|
|
format and the CodeView extensions.
|
|
|
|
29.3 COFF format
|
|
|
|
This information is specific for DJGPP COFF but is this the same as
|
|
used by Microsoft (I believe)
|
|
http://www.delorie.com/djgpp/doc/coff/
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 25 Oct 98
|
|
|
|
------------------------------
|
|
|
|
Subject: 30. Rebooting from Software
|
|
|
|
30.1 WARM AND COLD REBOOT
|
|
|
|
Within DOS, there are two types of rebooting. There is the warm
|
|
reboot that is evoked by pressing the "Ctrl-Alt-Del" key combination.
|
|
During this reboot, all Power On System Tests, POSTs, are performed
|
|
with the exception of the memory tests. In addition to the POSTs,
|
|
interrupt vectors are reinitialized and system timers reinitialized.
|
|
In other words, the BIOS code initializes the computer system to such
|
|
a state that the computer system is ready for loading the operating
|
|
system. The loading of the operating system is done by issuing an
|
|
interrupt 19h.
|
|
|
|
The second type of rebooting is a cold reboot that occurs when the
|
|
system is turned on. The only difference between a cold reboot and a
|
|
warm reboot is the performing of the memory tests.
|
|
|
|
30.2 PERFORMING A REBOOT FROM SOFTWARE
|
|
|
|
Whether a cold or warm reboot is performed depends upon the value if
|
|
the the reset flag in the ROM BIOS data area. If this flag is set to
|
|
1234h, a warm reset is performed. An any other value results in a
|
|
cold reboot. Usually a zero is loaded for the cold reboot. Code
|
|
snippets to do this are:
|
|
|
|
ROMBIOS_DATA segment at 0400h
|
|
org 72h
|
|
ResetFlag dw ?
|
|
ROMBIOS_DATA ends
|
|
|
|
ROMBIOS segment at 0f000h
|
|
org 0fff0h
|
|
Reset label far
|
|
ROMBIOS ends
|
|
|
|
In your code:
|
|
|
|
mov ax, seg ROMBIOS_DATA
|
|
mov ds, ax
|
|
ASSUME ds:ROMBIOS_DATA
|
|
mov ResetFlag, 1234h ; or 0 if cold reset is desired
|
|
jmp Reset
|
|
|
|
30.3 WARNINGS!
|
|
|
|
Neither the warm nor the cold boot flushes buffers, system, smartdrv,
|
|
and
|
|
EMM386, or notifies TSRs. This can lead to lost of data. The best
|
|
source code that takes most of this into account is:
|
|
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/bootutil/reboot33.zip
|
|
|
|
Full souce code is available.
|
|
|
|
30.4 JUST USING INT 19H
|
|
|
|
Using this interrupt alone will only reload the operating system onto
|
|
a computer system that may not be properly initialized for it. The
|
|
interrupt vectors are not reset but the TSRs that have hooks into the
|
|
interrupt table may be overwritten. Obviously, this can lead to the
|
|
system hanging if one of these hooked and overwritten interrupts is
|
|
called. Other problems can be timers not reset or add-on cards not
|
|
reinitialized properly. So, do NOT use int 19h to reboot the
|
|
computer.
|
|
|
|
30.5 USING F000:E05B INSTEAD OF F000:FFF0 AS THE JUMP ADDRESS
|
|
|
|
In the original IBM ROM BIOS, the instruction at f000:fff0 was a long
|
|
jump to f000:e05b. Some programs skipped the jump at f000:fff0 and
|
|
went directly to the second address which is the start of the reset
|
|
procedure in ROM BIOS. I checked my 386 with non IBM BIOS, and the
|
|
start of the reset procedure is at the same address. I believe that
|
|
using the second address is dangerous because there is not any
|
|
guarantee that it will stay the same. Also, if you are rebooting the
|
|
computer what is the reason in saving a few cycles! Stay with the
|
|
address f000:fff0 as the jump there always will take the execution
|
|
path to the correct code.
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 20 Dec 96
|
|
|
|
------------------------------
|
|
|
|
Subject: 31. Other FAQs
|
|
|
|
31.1 COMP.OS.MSDOS.PROGRAMMER
|
|
|
|
This excellent FAQ is posted every 20 days to
|
|
comp.os.msdos.programmer,
|
|
comp.answers and news.answers newsgroup.
|
|
|
|
It is available from
|
|
|
|
ftp://rtfm.mit.edu/pub/usenet-by-group/comp.os.msdos.programmer/
|
|
|
|
31.2 COMMUNICATIONS FAQS
|
|
|
|
The following websites contains many links to communication and
|
|
hardware related FAQs, e.g., serial port, game port, keyboard, modem,
|
|
and LANs. Most of these FAQs are not approved FAQs so are not found
|
|
at rtfm.mit.edu but that is not to say that these are not quality
|
|
FAQs. There is much good information.
|
|
|
|
http://www.webcom.com/~llarrow/comfaqs.html
|
|
http://www.repairfaq.com/filipg/LINK/F_LINKIN.html#LINKIN_003
|
|
http://www2.psyber.com/~tcj/faqnfile.html
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 25 Oct 98
|
|
|
|
------------------------------
|
|
|
|
Subject: 32. Pseudo Random Number Generator in Assembly Language
|
|
|
|
Mark Adler wrote a set or pseudo random number generators based upon
|
|
algorithms from Knuth's "Art of Computer Programming", vol 2, 2nd ed.
|
|
The file comes with full assembly source and .obj files for all major
|
|
memory models. While written to link with Turbo C, the .obj files
|
|
when linked with Microsoft C worked well, except for the procedure
|
|
that return a double random number. The reason was because the return
|
|
protocol is different between Borland C and Microsoft C. Once the
|
|
code was modified to work with Microsoft C, the code worked well.
|
|
|
|
To test the algorithms, I created an array of 100 random numbers and
|
|
then generated random numbers and tried to determine if the original
|
|
pattern was ever repeated. My program kept the length of the longest
|
|
matching series. For real or double, the longest matching series was
|
|
one after more that a billion random numbers. For ints, 0 and 1 as
|
|
the only selections produced the longest matching series of 31 matches
|
|
after more than a billion random numbers. Increasing the range of
|
|
acceptable numbers quickly reduced the longest matching series to 2 in
|
|
over 250 million random numbers. My short testing revealed that the
|
|
longest matching series seldom increased after this number.
|
|
|
|
Lastly, to test the distribution, I counted the number of hits for
|
|
each number between 0 and 100. I collected about 100,000 hits for
|
|
each number. The standard deviation was only 319 or less than 0.33%.
|
|
|
|
While my testing was not a rigorous mathematical testing of the
|
|
algorithm and its implementation, I believe for most uses, these
|
|
procedures are adequate.
|
|
|
|
The file is available:
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/turbo_c/tcrnd11.zip
|
|
|
|
Note that the description of this file is inaccurate.
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 4 May 96
|
|
|
|
------------------------------
|
|
|
|
Subject: 33. Command Line Arguments
|
|
|
|
33.1 WHERE IS THE COMMAND LINE
|
|
|
|
DOS loads the command line into the PSP. The length of the command
|
|
line is stored in a byte at offset 80h. The command line is stored in
|
|
the next 127 bytes starting at 81h. As, generally, there is a space
|
|
between the filename and the start of the command line argument, a
|
|
space usually is the first character in this string. The string is
|
|
terminated with a carriage return character, 0dh.
|
|
|
|
At startup for both .COM and .EXE format programs, DS and ES point to
|
|
the PSP.
|
|
|
|
33.2 HOW TO ACCESS THE COMMAND LINE ARGUMENTS
|
|
|
|
See Subject #8, How to Redirect Stderr to a File. I have written a
|
|
demonstration program that contains assembly language startup code
|
|
that parses the command line arguments onto the stack and provides
|
|
them as argc and *argv[] to the main procedure. Anyone interested in
|
|
accessing command line arguments should look at this code.
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 15 Jun 96
|
|
|
|
------------------------------
|
|
|
|
Subject: 34. Free 32 bit and DJGPP Assemblers
|
|
|
|
34.1 Brennan Underwood's Guide to Inline Assembly under DJGPP.
|
|
|
|
This is an introduction to inline assembly under DJGPP and is based
|
|
upon GCC. The AT&T/UNIX syntax is explained. The URL is:
|
|
|
|
http://www.rt66.com/~brennan/djgpp/bgtia.html
|
|
|
|
34.2 DJGPP QUICK ASM PROGRAMMING GUIDE
|
|
|
|
Andrew Ly has a web page covering:
|
|
URLs to FAQs
|
|
AT&T x86 ASM Syntax
|
|
Some inline ASM information
|
|
converting .obj/.lib files
|
|
|
|
The URL to this page is:
|
|
www.castle.net/~avly/djgpp.html
|
|
|
|
34.3 FREE 32-BIT X86 ASSEMBLER FAQ/LINUX X86 ASSEMBLY HOWTO
|
|
|
|
Francois-Rene Rideau has authored a FAQ on free 32-bit assemblers or
|
|
Linus x86 Assembly HowTo. It is available:
|
|
|
|
http://www.eleves.ens.fr:8080/home/rideau/Assembly-HOWTO
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 19 Jun 96
|
|
|
|
------------------------------
|
|
|
|
Subject: 35. TERSE Programming Language
|
|
|
|
Jim Neil has just announced his TERSE Programming Language. TERSE
|
|
gives all of the control available in assembly language with the
|
|
look-and-feel and ease-of-use found in high-level languages.
|
|
|
|
It is available:
|
|
http://www.terse.com
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last changed: 19 Aug 96
|
|
|
|
------------------------------
|
|
|
|
Subject: 36. Assembly Language IDEs
|
|
|
|
36.1 ASMEDIT
|
|
|
|
ASMEDIT is an Integrated Development Environment (IDE) for Assembly
|
|
Language programmers. This IDE has a build in editor that provides
|
|
syntax coloring, editing of files up to 256 Mbytes, dissammembly of
|
|
short code pieces, and shelling to run external assemblers, linkers,
|
|
debuggers and make programs.
|
|
|
|
The real benefit of ASMEDIT is its extensive help. This help covers:
|
|
80x86 ASM mnemonics up to 686 including FPU and MMX;
|
|
Complete Opcode Tables;
|
|
BIOS Interrupts;
|
|
DOS Interrupts and DOS Functions;
|
|
EMS and Mouse Functions;
|
|
BIOS and DOS Data Structures;
|
|
Diagnostic Codes; and
|
|
VGA programming information.
|
|
|
|
ASMEDIT is available from simtel or any of its mirrors:
|
|
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/aedt182.zip
|
|
|
|
36.2 ALAB
|
|
|
|
Assembler Laboratory is an assembler IDE, packed with nice features
|
|
such as:
|
|
|
|
syntax and error highlighting
|
|
proc, macro and data browsers
|
|
tasm, masm, a86 and dlink support
|
|
heuristic scan
|
|
opcode help, extended ascii chart, scan codes, calculator
|
|
much more!
|
|
|
|
The latest version is available from the author's homepage:
|
|
http://www.nano.no/~espeng/alab/
|
|
|
|
36.3 ASMIDE
|
|
|
|
The latest version of ASMIDE, 4.01, has the following features:
|
|
contains all the features of a conventional editor, such as
|
|
Finding, Replacing, Cutting, Copying, Pasting.
|
|
has the ability to open multiple files, allowing you to transfer
|
|
text between the files. Multiple windows can be Tiled or
|
|
Cascaded, and features Scroll bars.
|
|
has mouse support.
|
|
features a simple, 4 function, 3 mode calculator, and an Ascii
|
|
Chart.
|
|
has menu systems allowing you to assemble, link, run and debug
|
|
your program. Short cut keys are also provided.
|
|
allows you to specify your own assembler, linker and debugger in
|
|
the configuration file.
|
|
features setup dialogs that provide support for TASM, TLINK, MASM
|
|
and LINK.
|
|
|
|
ASMIDE is available:
|
|
http://www.inx.de/~nkomin/files/asmide.arj
|
|
|
|
36.4 NASMIDE
|
|
|
|
NASM-IDE is a front end for NASM which allows multiple files to be
|
|
worked on within the same editing environment. Written in Turbo
|
|
Pascal and Turbo Vision, the NASM-IDE interface is clear and
|
|
straightforward. Features include:
|
|
|
|
Turbo Vision point-and-click style interface
|
|
Automatic syntax highlighting of source code
|
|
An ASM Assistant to guide users through the creation of assembler
|
|
projects
|
|
On-line help system
|
|
Support for three main output file formats - flat file binary and
|
|
DOS 16 bit and Win32 object files
|
|
|
|
Learn more about NASIDE and download it from:
|
|
|
|
http://www.inglenook.co.uk/nasmide/index.html
|
|
|
|
36.5 MicroASM
|
|
|
|
MicroASM is written by Ole Saether. It is a Windows 95 & NT windows
|
|
editor with support for MS-DOS command line assemblers.
|
|
|
|
With MicroAsm you can:
|
|
|
|
Create and edit text files.
|
|
Run the files through your favorite command-line assembler.
|
|
Automatically highlight lines containing errors.
|
|
|
|
To learn more about it and download it, visit:
|
|
http://home.eunet.no/~oleset/microasm.htm
|
|
|
|
36.6 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
|
|
|
|
-----------------------------
|
|
|
|
Subject 37. Dissassemblers
|
|
|
|
38.1 Review of Disassemblers
|
|
|
|
Jerzy Tarasiuk has reviewed some commercial and shareware
|
|
disassemblers. The shareware assemblers are available in this
|
|
directory. The review is available:
|
|
|
|
ftp://ftp.simtel.net/pub/simtelnet/msdos/disasm/aabstrct.txt
|
|
|
|
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
|
|
Last Changed: 13 Oct 96
|
|
|
|
-----------------------------
|
|
|
|
Subject: 38. How to Optimize for the Pentium
|
|
|
|
39.1 PENTIUM OPTIMIZATION SITE
|
|
|
|
The below site is updated as new information becomes available and
|
|
contains information not found elsewhere.
|
|
http://announce.com/agner/assem
|
|
|
|
38.2 LITERATURE AVAILABLE FROM INTEL
|
|
|
|
Much useful literature can be downloaded for free from Intel's www
|
|
site:
|
|
http://www.intel.com
|
|
|
|
The documents are in various different file formats. If a particular
|
|
document is in a format not supported by your word processing software
|
|
then you may seek an appropriate file viewer somewhere on the
|
|
Internet. Many software companies are offering such file viewers for
|
|
free to support their file formats.
|
|
|
|
Tutorials for Optimizing the Pentium, and Pentium Pro/Pentium II can
|
|
be downloaded from:
|
|
http://developer.intel.com/design/perftool/cbts/pentopt/index.htm
|
|
http://developer.intel.com/design/perftool/cbts/pproopt/index.htm
|
|
|
|
Manuals for the Pentium and Pentium Pro processors can be downloaded
|
|
from:
|
|
http://developer.intel.com/design/pentium/manuals/
|
|
http://developer.intel.com/design/pro/manuals/
|
|
|
|
Detailed information on the MMX processors can be found in the
|
|
documents:
|
|
"MMX Technology Developers Guide", and "Programmers Reference Manual",
|
|
both of which are available from:
|
|
http://developer.intel.com/drg/mmx/manuals/
|
|
|
|
Many other sources other than Intel also have useful information. I
|
|
would particularly recommend:
|
|
http://www.x86.org.
|
|
|
|
Contributor: Ray Moon, raymoon@moonware.dgsys.com
|
|
Last Changed: 20 Dec 97
|
|
|
|
-----------------------------
|
|
|
|
Subject: 39. Assembly Language Programming Style Guidelines
|
|
|
|
Randy Hyde has done it again. He has written a style guide that will
|
|
help you write more readable and maintainable assembly language code.
|
|
The URL is:
|
|
|
|
http://cuda.ucr.edu/Page_softeng/sample.html
|
|
|
|
Contributor: Ray Moon, raymoon@moonware.dgsys.com
|
|
Last Changed: 21 May 97
|
|
|
|
-----------------------------
|
|
|
|
Subject: 40. Other Assembly-Related Newsgroups
|
|
|
|
Here are some other assembly language newsgroups that may be of
|
|
interest.
|
|
|
|
news:msnews.microsoft.com/microsoft.public.masm
|
|
news:forums.borland.com/borland.public.tasm
|
|
news:fido7.talks-asm
|
|
news:alt.os.assembly
|
|
news:alt.os.development
|
|
|
|
Contributor: Ray Moon, raymoon@moonware.dgsys.com
|
|
Last Changed: 26 Dec 97
|
|
|
|
-----------------------------
|
|
|
|
Subject: 41. ZD-86 Debugger
|
|
|
|
41.1 DESCRIPTION
|
|
|
|
ZD86 is a full featured Assembler Debugging Environment, that provides
|
|
Symbolic Debugging for most common Assemblers, including A86, MASM,
|
|
TASM, etc. The symbolic debugging capability displays and highlights
|
|
your statement labels and variable names where you have placed them in
|
|
your code. It is a powerful tool for the advanced assembly language
|
|
programmer yet friendly enough for someone just starting with assembly
|
|
language.
|
|
|
|
41.2 AVAILABILITY
|
|
|
|
The ZD86 Debugger is available from:
|
|
|
|
ftp://cet.cet.com/pub/80xxx/zd86-101.zip
|
|
|
|
Contributor: Ray Moon, raymoon@moonware.dgsys.com
|
|
Last Changed: 22 Jun 97
|
|
|
|
-----------------------------
|
|
|
|
Subject: 42. Links to x86 Processor Manufacturers
|
|
|
|
AMD
|
|
http://www.amd.com/K6/k6docs/index.html
|
|
|
|
Intel
|
|
http://developer.intel.com/design/PentiumII/manuals/
|
|
|
|
Cyrix
|
|
http://www.cyrix.com/developers/dv-home.htm
|
|
|
|
Contributor: Ray Moon, raymoon@moonware.dgsys.com
|
|
Last Changed: 25 Oct 98
|
|
|
|
-----------------------------
|
|
|
|
Subject: 43. Linkers
|
|
|
|
43.1 Microsoft's 16-bit linker
|
|
|
|
Microsoft has its 16-bit DOS linker available from its FTP site. The
|
|
linkers URL is:
|
|
ftp://ftp.microsoft.com/softlib/mslfiles/lnk563.exe
|
|
|
|
43.2 ALINK
|
|
|
|
ALINK is a linker that I am writing, to link object files into
|
|
executable programs. The ultimate purpose is to write a free and
|
|
portable linker to go with NASM, which can link all the NASM output
|
|
formats into any one of a number of possible executable formats, so
|
|
that the pair provide a portable assembler and linker for Intel CPUs
|
|
on any OS. Thus ALINK is written in ANSI C, in order to be fully
|
|
portable.
|
|
|
|
At the moment, ALINK can only link OBJ (Microsoft/Intel OMF) and LIB
|
|
format files (as generated by Borland's compilers, and NASM and DOS
|
|
versions of Microsoft compilers) into MS-DOS COM files, and MS-DOS EXE
|
|
files, and (PE)Win32 EXE and DLL files. 32-bit records are supported.
|
|
The aim is to support generation of Win16 program files (New
|
|
Executable), OS/2 Linear Executable files, a.out executables, ELF
|
|
executables, and raw binary files.
|
|
|
|
Also available is IMPLIB, a Win32 import library generator, as a
|
|
companion to ALINK.
|
|
|
|
These are available form Anthony's Programming Page:
|
|
http://www.geocities.com/SiliconValley/Network/4311/index.html
|
|
|
|
Contributor: Ray Moon, raymoon@moonware.dgsys.com
|
|
Last Changed: 25 Oct 98
|
|
|
|
-----------------------------
|
|
|
|
Subject: 44. ASM Mailing Lists NEW
|
|
|
|
44.1 NASM MAILING LIST
|
|
|
|
Michael Darling has started a NASM mailing list. You can subscribe to
|
|
the list on the following web page:
|
|
http://nasm.home.ml.org
|
|
|
|
44.2 X86 ASM MAILING LIST
|
|
|
|
Michael Ware has created an x86 ASM mailing list. You can subscribe
|
|
to the list on the following web page:
|
|
http::www.eGroups.com/list/assembly
|
|
|
|
Contributor: Ray Moon, raymoon@moonware.dgsys.com
|
|
Last Changed: 23 Nov 98
|
|
|
|
-----------------------------
|
|
|
|
Subject: 45. Acknowledgments
|
|
|
|
I would like to acknowledge all the people who have assisted me or any
|
|
of the contributors. For their time and effort, this FAQ is a better
|
|
product.
|
|
|
|
David Boedicker, Barry Brey, Paolo Ciccone, Giuseppe De Marco, Morten
|
|
Elling, Kris Heidenstrom, Alan Illeman, Don Krull, Chabad Lubavitch,
|
|
Thanh Ma, Jeff Owens, Ed Parry, Keith Petersen, Michael Roberts,
|
|
Russell Schulz, Rocky Seelbach, Janos Szamosfalvi and Cedric Ware
|
|
|
|
|