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 1/3
Supersedes: <6809f5$ris$1@news.dgsys.com>
Followup-To: alt.lang.asm,comp.lang.asm.x86
Date: 25 Jan 1998 19:42:43 GMT
Organization: MoonWare
Lines: 816
Approved: news-answers-request@MIT.EDU
Distribution: world
Expires: Fri, 20 Feb 1998 23:59:59 GMT
Message-ID: <6ag4jj$qnh$1@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 one of three parts that contain x86 assembly language information common to all assemblers.
Keywords: x86 Assemby Language ASM FAQ General
-Name: assembly-language/x86/general/part1
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------------------------------
Part I 1. Introduction and Intent 2. Table of Contents 3. Charters For comp.lang.asm.x86 and alt.lang.asm Newsgroups 4. What is Assembly Language 5. List of x86 OpCodes 6. What is HELPPC and Where It Is Available 7. How To Truncate a File 8. How Can STDERR Be Redirected To a File 9. How To Determine the CPU Type 10. IRQ Assignments 11. Ralf Brown's Interrupt List 12. Using VGA Mode 13h for Fast Graphics 13. Real Mode/Protected Mode 14. Shareware ASM Libraries Part II 15. Accessing 4 Gegs of Memory in Real Mode 16. What Is Available at developer.intel.com 17. Interrupts and Exceptions 18. ASM Books Available 19. ASM Code Available on Internet REVISED 20. How To Commit a File 21. Using Extended Memory Manager 22. EXE2BIN Replacement 23. ASM Tutorials Available on the Internet 24. Shareware Assemblers 25. Undocumented OpCodes Part III 26. WWW Assembly HomePages 27. Common Reason Why Memory Allocation Fails 28. Volume Serial Numbers 29. .obj File Format 30. Rebooting from Software 31. Other FAQs 32. Pseudo Random Number Generator in Assembly Language 33. Command Line Arguments 34. Free 32-bit and DJGPP 35. TERSE Programming Language 36. Assembly Language IDEs 37. Disassemblers 38. How to Optimize for the Pentium 39. Assembly Language Programming Style Guidelines 40. Other Assembly-Related Newsgroups 41. ZD-86 Debugger 42. Acknowledgments REVISED [General][MASM][TASM][A86/D86]
------------------------------
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 teadious, 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------------------------------
Subject: 7. How To Truncate A File
There is not any single DOS Int 21h function that performs this operation.
A file can be truncated using two functions. The procedure is:
1. Use Int 21h function 42h, Move File Pointer, to move the file pointer
to the position where you want the file to be truncated.
2. Use Int 21h function 40h, Write File or Device, to write zero bytes to
the file.
Execution of the last DOS function will update the directory to the new
file length.
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
Last changed: 28 Dec 94
Return to the Table Of Contents------------------------------
Subject: 8. How Can STDERR Be Redirected To A File
I understand that 4DOS has this capability at its command line. If you are
looking in the assembly language FAQ for this information, an assembly
language answer probably is desired. Here it is.
You will need to write a short program that performs the STDERR redirection
before loading and executing the desired program. This loader program
relies upon the fact that a child program inherits all open files of the
parent program unless the parent program opens a file with the inheritance
flag set to no.
Because the full code for such a program is too large for this FAQ, I will
give the salient specifications for such a program.
1. The loader program accepts three command line arguments:
a. The full path and filename of the file into which STDERR is to be
written.
b. The full path and filename of the program to be executed.
c. The command line for the program to be executed (should be
delimited by double quotes to allow multiple arguments). This
argument is optional.
2. Release all memory above the program using Int 21 function 4ah so that
there will be room enough to load and execute the designated program.
3. Open the file from step 1.a above into which STDERR is to be written.
4. Duplicate STDERR filehandle, which is 2, using Int 21h function 45h.
5. Using Int 21h function 46h, force STDERR filehandle, again 2, to have
the filehandle of the opened file from step 2.
6. Use Int 21h function 4b00h to load and execute the program from step
1.a. Use the default environment and the command line from step 1.c
above.
7. Upon return from the function 4b00h, close the file opened in step 2.
8. To restore STDERR, use Int 21h function 46h to force STDERR, again 2,
to point to the filehandle saved from step 3 above.
This same technique can be applied to any of the standard devices.
I have written a full featured demonstration program. I believe that asm
programmers will find the source code useful even if they do not want to
redirect stderr to a file. The URL to the file is:
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/stderrf.zip
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
Last changed: 3 Jun 95
Return to the Table Of Contents------------------------------
Subject: 9. How To Determine The CPU Type
9.1 CPUID PROGRAM
The type of processor and math coprocessor can be determined using two
functions that have been provided by Intel. The source code to these
functions can be obtained from Intel by:
ftp://ftp.intel.com/pub/IAL/tools_utils_demos/cpuid3.zip
Three source files are included in this .zip file.
cpuid3a.asm - This source code file contains two assembly language
functions. One determines the type of cpu from 8088/8086 to
Pentium. The second detects and identifies, if present, the type
of math coprocessor.
cpuid3b.c - a c program that calls the above two functions and
displaysthe results.
cpuid3c.asm - this is an assembly program equivalent to cpuid3b.c.
9.2 AP-485 INTEL PROCESSOR IDENTIFICATION WITH THE CPUID INSTRUCTION
This Application Note explains how to use the CPUID instruction in software
applications, BIOS implementations, and various processor tools. By taking
advantage of the CPUID instruction, software developers can create software
applications and tools that can execute compatibly across the widest range
of Intel processor generations and models, past, present, and future.
http://developer.intel.com/design/pro/applnots/241618.HTM
9.3 Robert Collins' CPUID.ASM
Robert Collins has written two columns for Dr. Dobb's Journal on this
subject. These articles with source code is available on his web site:
http://www.x86.org/ddj/ddj.html
9.4 Grzegorz Mazur's x86 CPU Identification
Grzegorz has a series of hypertext articles that explain x86 CPU
identification algorithms developed by himself. Covered are not only the
Intel chips but also V20, V30 (remember them), and Cyrix and alikes. His
page is located:
http://grafi.ii.pw.edu.pl/gbm/x86/index.html
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
Last changed: 18 Mar 97
Return to the Table Of Contents------------------------------
A list of IRQ assignments are available in David Jurgens' HELPPC database. See Subject #6 for details on how to obtain this program. Contributor: Raymond Moon, raymoon@moonware.dgsys.com Last changed: 28 Dec 94 Return to the Table Of Contents
------------------------------
Subject: 11. Ralf Brown's Interrupt List
11.1 FILE AVAILABILITY
The latest version of Ralf Brown's Interrupt List is 5.6, dated 21 Dec 97.
The files are available directly from his home page, from SimTel, or Garbo:
http://www.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/WWW/files.html
ftp://ftp.simtel.net/pub/simtelnet/msdos/info
ftp://garbo.uwasa.fi/pc/programming
The files are:
inter56a.zip Comprehensive listing of interrupt calls, 1of4
inter56b.zip Comprehensive listing of interrupt calls, 2of4
inter56c.zip Comprehensive listing of interrupt calls, 3of4
inter56d.zip Comprehensive listing of interrupt calls, 4of4
inter56e.zip Utility progs/source code for interrupt list
inter56f.zip WinHelp conversion programs for interrupt list
inter56g.zip Hypertext conversion progs. for interrupt list
Above available from all sites. Below files are available from SimTel
inter56z.zip HC31/HCP phrases file for interrupt list
intwin56.zip WINHELP hypertext
11.2 DESCRIPTION
The interrupt list is a comprehensive listing of functions available
through interrupt calls and FAR calls, both documented and (officially)
undocumented, plus maps of CMOS and BIOS memory and I/O ports. This
release contains more than 8100 entries and nearly 3300 tables.
11.3 WHAT IS NEW
Version 5.6
160k of updates, including I2C-bus devices (video, SDRAMs, etc.), S3
memory-mapped I/O, VPX 3220A, VESA DDC EDID monitor codes, MS-DOS7 file
sharing behavior, more KEYB.COM internals, more REAL/32 calls.
Version 5.5
Changes: New in this release: many more PCI vendor and device IDs; lots of
additional chipset information; additional code pages; COUNTRY.SYS formats;
PentiumMMX updates; Am486 System Management Mode; and an updated version of
the PCI configuration display utility (now with source code)
Version 5.4
160K of updates, including: many more PCI vendor and device IDs; Adaptec
AHA-154x, TMC-16x0, and Xirlink XL-22x SCSI adapters; POST Memory Manager
Specification v1.0; S3VBE/Core, S3 SpeedUp; MPU-401 MIDI UART; Desktop
Management Interface extension to PnP BIOS; a conversion program to create
an OS/2 .IPF file; and a beta version of my PCI configuration display
program PCICFG.
11.4 INTWIN.HLP
INTWIN.HLP was compiled from Ralf Brown's Interrupt List with Christian
Mueller Planitz's and Bent Lynggaard's INT2WHLP program to a hypertext
format of the List. Most of the supplementary *.LST files in the Interrupt
List are included in INTWIN.HLP.
INTWIN displays table references in a secondary window to ease the
reference between the source and the referenced text. The package includes
an editor to edit the secondary window size as appropriate for the graphics
platform used.
INTWIN has extensive search facilities with almost 30,000 keywords (below
WinHelp 4.00's keyword limit) for search on interrupt numbers, register
contents, interrupt categories, and topic headings. The package includes
also a full text search facility.
11.5 INTWIN.PH
INTWIN.PH is a phrases (Windows help file compression information) file
compiled from Ralf Brown's Interrupt List with Christian Mueller Planitz's
and Bent Lynggaard's INT2WHLP program. Most of the supplementary *.LST
files in the Interrupt List were included in the compilation.
The phrases file is used by the HC31 and HCP help file compiles when
compiling in high compression mode. The compilation of this phrases file
requires more DOS memory and disk space than is easily available on many
computers (630-730 kb and 38-52 Mb).
11.6 OTHER INCLUDED GEMS
OVERVIEW.LST - A brief description of each of the 256 interrupts.
86BUGS.LST - A list of undocumented and buggy instructions with
descriptions of the x86 Intel processor and compatible processors. And
you thought that the Intel FDIV was the first bug in a processor!
CMOS.LST - a CMOS memory map.
OPCODE.LST - A list of undocumented instructions and documented
instructions of any last processor.
PORTS.LST - I/O port addressed for XT, AT and PS/2 computers.
GLOSSARY.LST - glossary of PC terms.
MEMORY.LST - The format for various memory locations, such as the BIOS Data
Segment, Interrupt Vector Table, and much, much more.
INTERRUP.PRI - iAPX 86 Interrupt Primer
Contributor: Raymond Moon, raymoon@moonware.dgsys.com
Last changed: 26 Dec 97
Return to the Table Of Contents------------------------------
Subject: 12. Using VGA Mode 13h for Fast Graphics
12.1 INTRODUCTION AND PREPARATION
Mode 13h is so widely used for graphics applications in DOS because it is
very easy to use. The screen is constantly being redrawn by the video
card. To affect what the card draws, it is necessary to write to the
screen buffer. The screen buffer in mode 13h is always at segment:offset =
A000:0000. Thus, to set up drawing directly to the video buffer, this is
what you'd most often first do:
;Change the video mode to 13h
xor ah, ah ;VIDEO Function 00h: Change screen
mov al, 13h ;Put the desired graphics mode into AL
int 10h ;Call VIDEO
;Prepare for writing to the video buffer
mov di, 0a000h ;Put the video segment into DI
mov es, di ; so it can easily be put into ES
xor di, di ;Start writing at coordinates (0,0)
12.2 WRITING PIXELS TO THE SCREEN
Why is Mode 13h so popular? To understand, you must know a few basic
facts. In Mode 13h, the screen is 320 by 200, or 320 pixels across and 200
pixels down. In each pixel, there's a possibility of 256 colors, which can
be fit into one byte. Thus, 320*200*1 = 64000 bytes, about the size of one
segment. Think of the screen as an array of colors. The first row takes
up addresses A000:0000 to A000:013F (decimal 319), the second row takes up
addresses A000:0140 to A000:027F (decimal 639), and so on. To plot a
pixel, assuming ES=A000:
;Plot a pixel in video mode 13h, where
;PixelAddress = (320 * Y) + X
mov ax, 320 ; Prepare for the multiplication
mul [Y] ; Assuming that Y is defined in the data segment
; earlier in the program
mov di, ax ; Put in into the pointer to the offset of ES
add di, [X] ; Assuming that X is defined in the data segment
; earlier in the program
mov al, [Color] ; Assuming that Color is defined in the data
; segment earlier in the program
stosb ; Write it to the screen!
See how easy that was? Something to remember is that it is zero-based.
The upper-left corner is (0,0), and the lower-right is (319,199). A
complete TASM Ideal mode procedure might look something like this (it
assumes that the video card is already set to mode 13h):
PROC WritePixel BASIC ; Or whatever language you might want to link
; it to
USES es, di ; It's always a good idea to preserve ES and DI
ARG X:word, Y:word, Color:BYTE
mov di, 0a000h ; Put the video segment into DI
mov es, di ; so it can easily be put into ES
mov ax, 320 ; Prepare for the multiplication
mul [Y] ; Offset pointer by the Y value passed in
mov di, ax ; Put in into pointer to the offset of ES
add di, [X] ; Offset the pointer by the X value passed in
mov al, [Color] ; Put color to be written to the screen in AL
stosb ; Write it to the screen!
ret
ENDP WritePixel
To write a horizontal line, just put the length in CX, and replace the
STOSB with a REP STOSB. Writing a vertical line is only a little more
tricky. Observe the following TASM Ideal mode procedure:
PROC VerticalLine BASIC ; Or whatever language you might want to link
; it to
USES es, di ; It's always a good idea to preserve ES and
; DI
ARG X:word, Y:word, Color:BYTE, Length:word
mov di, 0a000h ; Put the video segment into DI
mov es, di ; so it can easily be put into ES
mov ax, 320 ; Prepare for the multiplication
mul [Y] ; Offset the pointer by the Y value passed in
mov di, ax ; Put in into the pointer to the offset of ES
add di, [X] ; Offset the pointer by the X value passed in
mov al, [Color] ; Put the color to be written to the screen
; in AL
mov cx, [Length] ; Prepare for the loop
YLoop:
stosb ; Write it to the screen!
add di, 319 ; Move down one row (DI has already advanced
; once because of the STOSB, thus the 319)
loop YLoop
ret
ENDP VerticleLine
Observe how there is a tight loop that moves DI down one row each
iteration.
In short, the easiest way to write directly to the Mode 13h video buffer is
to think of the screen as just a 320 by 200 array of bytes, starting at
A000:0000.
Author: Michael Averbuch (mikeaver@prairienet.org)
Last Change: 29 Dec 94
Return to the Table Of Contents------------------------------
Subject: 13. Real Mode/Protected Mode
13.1 AVAILABILITY
[Note: because of a crash at zfja-gate, the below information of files on
zfja-gate may not be accurate.]
All the files below are available from:
ftp://zfja-gate.fuw.edu.pl/user/net/ka9q/guest/cpu/protect.mod
The authors e-mail addresses are given below.
These files can be received by e-mail. Send e-mail to:
listserv@zfja-gate.fuw.edu.pl
with GET CPU/PROTECT.MOD/PMFAQ/* in the text.
A .zip file with all the latest files described below has been uploaded to
SimTel but as of 19 Dec has not been made available for download. The URL
to this file when available should be:
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/pmtut002.zip
Watch this site or for the upload announcement in the newsgroups.
13.2 FAQ - PMFAQ.ZIP
This file contains a preliminary protected mode FAQ by Jerzy Tarasiuk.
13.3 TUTORIAL - PMTUT002.ZIP
Till Gerken has written a Protected Mode Tutorial. This tutorial contains
code and applicable function calls that comprise the Virtual Control
Program Interface (VCPI). Till Gerken's tutorial is available:
ftp://x2ftp.oulu.fi/pub/msdos/programming/pmode/pmtut002.zip
13.4 SAMPLE ASM CODE - SIMPL_PM.ASM
Jerzy Tarasiuk has posted an example program switching to Protected Mode
and back to again to Real Mode.
13.5 REAL MODE IDT SWITCHING - CHANGIDT.FAQ
Lastly Jerzy Tarasiuk has included some of his e-mail that covers real mode
IDT switching.
Contributors: Till Gerken, tig@ngo.ol.ni.schule.de, and
Jerzy Tarasiuk, JT@zfja-gate.fuw.edu.pl
Last changed: 19 Dec 95
Return to the Table Of Contents------------------------------
Subject: 14. Shareware ASM Libraries
14.1 ASMLIB PROGRAMMER'S TOOLKIT, VERSION 4.0
Douglas Herr's shareware assembly language library. This library is
available from SimTel.
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/asmlib40.zip
The zip file contains only the medium model of the library. There are 405
assembly subroutines in a .lib file and documentation. Source code is
available with registration and extra fee. The library covers the
following areas:
string/integer data manipulation screen mode subroutines
text-mode multi-window subroutines disk & file subroutines
text-mode video subroutines EMS and XMS subroutines
floating-point subroutines graphics
keyboard input subroutines mathematical solutions
subroutines which determine PC status
asmlib40 also comes with an editor, E16, written entirely with asmlib.
Improvements since version 3.7 is auto-sizing of the near heap in the
startup code. There have been some incremental improvements including
32k-color graphics and virtual graphics screens.
14.2 THE ASSEMBLY WIZARD'S LIBRARY, VERSION 2.1
This is Chris Walker's shareware assembly language library. This library
used to be Thomas Hanlin's.
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/asmwiz21.zip
This library comes with documentation and one .lib file that supports small
and tiny memory models. Source code is available with registration. The
library covers the following areas:
Base Conversions Mouse Services
Exception Handling Sound and Music
Delays and Countdowns String Services
File Handling Telecommunications
Filename Manipulation Time and Date
Keyboard Services Video Services
Long Integer Math Miscellaneous Services
Memory Services
14.3 UCR Standard Library for Assembly Language Programmers
This library is written by Randall Hyde and others. This library is
available from many sites but most of them are seriously out of date. You
can get the latest version at:
http://webster.ucr.edu/Page_asm/RHUCRLib.html
Unlike the previous libraries, there are no registrations fees and the
included source code is released to the public domain. The author does
request that if you use the library, you contribute at least one routine to
the library.
Standard Input Routines Character Set Routines
Standard Output Routines Memory Management Routines
Conversion Routines String Handling Routines
Utility Routines
14.4 ALIB Version 3.0
ALIB is Jeff Ownens' shareware assembly language library. This library is
available from SimTel.
ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/alib30.zip
Like the UCR library described above, registration fees are not requested.
The library consists of 179 assembly source files covering the following
areas:
compress - data compression and expansion
config - program configuration, colors, paths, etc.
compare - compare strings
convert - hex/decimal/ascii conversions
database - simple database functions
disk - disk information, path changes, file searches
display - fast display functions, write to display memory
error - error handlers
float - simple floating point math package
math - dword math, crc, roots
memory - memory manager, extended, xms, ems, conventional
menu - menuing system
message - messages in windows on screen
misc - misc routines
mouse/key - mouse and keyboard functions
parse - extraction of parameters from command line
random - random number generators
search - search for character or string
sort - sort buffer or file
sound - sounds
string - ascii string handling
stdout - characters, strings, spaces to stdout
system - system interrogation and setup
time - time and date conversions
14.5 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
Return to the Table Of Contents