home *** CD-ROM | disk | FTP | other *** search
- Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!howland.erols.net!pants.skycache.com.MISMATCH!triton.skycache.com!portc01.blue.aol.com!portc.blue.aol.com!feed.newsreader.com!news!not-for-mail
- 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: <89seus$stn$1@news.dgsys.com>
- Followup-To: alt.lang.asm,comp.lang.asm.x86
- Date: 21 Mar 2000 23:02:28 GMT
- Organization: MoonWare
- Lines: 823
- Approved: news-answers-request@MIT.EDU
- Distribution: world
- Expires: Thu, 20 Apr 2000 23:59:59 GMT
- Message-ID: <8b8v24$n7i$1@news.dgsys.com>
- Reply-To: raymoon@moonware.dgsys.com
- NNTP-Posting-Host: dgs.dgsys.com
- X-Trace: news.dgsys.com 953679748 23794 207.154.12.1 (21 Mar 2000 23:02:28 GMT)
- X-Complaints-To: usenet@news.dgsys.com
- NNTP-Posting-Date: 21 Mar 2000 23:02:28 GMT
- 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 Assembly Language ASM FAQ General
- X-Newsreader: TIN [UNIX 1.3 950824BETA PL0]
- Xref: senator-bedfellow.mit.edu alt.lang.asm:25270 comp.lang.asm.x86:83703 news.answers:179899 alt.answers:47940 comp.answers:40152
-
- Archive-Name: assembly-language/x86/general/part1
- Posting-Frequency: monthly (21st of every month)
- Last-modified: 2000/02/20
-
- ------------------------------
-
- Subject: 1. Introduction and Intent
-
- This is the x86 Assembly Language FAQ for the comp.lang.asm.x86 and
- alt.lang.asm newsgroups. This FAQ is posted monthly on or about the
- 21st of the month 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. When
- uploaded to SimTel or Garbo, the filenames are asmxxyyz.zip, where xx is
- the two digit year, yy is the number of the month and z is t for text or
- h for HTML format. 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 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:
- http://info.internet.isi.edu:80/in-notes/rfc/files/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 2000 - Raymond Moon
- ALL RIGHTS RESERVED
- Last Changed: 5 Feb 2000
-
- ------------------------------
-
- Subject: 2. 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. Protected Mode Programming
- 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
- 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. Links to x86 Processor Manufacturers
- 43. Linkers Available
- 44. ASM Mailing Lists
- 45. ASM Programming Journal
- 46. Acknowledgments
-
- ------------------------------
-
- 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 a 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
-
- ------------------------------
-
- Subject: 4. What Is Assembly Language
-
- 4.1 WHAT IS MACHINE LANGUAGE?
-
- Although programmers tend to use C or C++ or Pascal these days, the
- language closest to the PC hardware is machine language. Not one second
- during a PCS powered on lifetime passes where the computer is not
- executing machine language.
-
- 4.2 ASSEMBLY LANGUAGE OR MACHINE LANGUAGE
-
- To word this simply, you can say that say that assembly language is a
- human-readable text, and machine language is machine-readable binary
- code. When you program in assembly language, you are programming on the
- machine language level.
-
- To program directly in machine language is tedious, so you use assembly
- language instead, and use an assembler to produce the actual machine
- code.
-
- 4.3 WHEN TO USE ASSEMBLY LANGUAGE
-
- I personally think that except as a learning exercise it is 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
-
- ------------------------------
-
- 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/pentiumii/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: 17 Oct 99
-
- ------------------------------
-
- 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 are 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 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
-
- ------------------------------
-
- 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
-
- ------------------------------
-
- 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/stderrf1.zip
-
- Contributor: Raymond Moon, raymoon@moonware.dgsys.com
- Last changed: 3 Jun 95
-
- ------------------------------
-
- 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
- displays the 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:
-
- Part 1: http://www.x86.org/ddj/Sep96/Sep96.html
- Part 2: http://www.x86.org/ddj/Nov96/Nov96.html
-
- 9.4 Grzegorz Mazur's x86 CPU Identification
-
- Grzegorz has a series of hypertext articles that explain x86 CPU
- identification algorithms developed by him. Covered are not only the
- Intel chips but also V20, V30 (remember them), and Cyrix. His page is
- located:
-
- http://grafi.ii.pw.edu.pl/gbm/x86/
-
- Contributor: Raymond Moon, raymoon@moonware.dgsys.com
- Last changed: 18 Mar 97
-
- ------------------------------
-
- Subject: 10. IRQ Assignments
-
- 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
-
- ------------------------------
-
- Subject: 11. Ralf Brown's Interrupt List
-
- 11.1 FILE AVAILABILITY
-
- The latest version of Ralf Brown's Interrupt List is 60, dated 3 Jan 99.
- 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:
- inter60a.zip Comprehensive listing of interrupt calls, 1 of 4
- inter60b.zip Comprehensive listing of interrupt calls, 2 of 4
- inter60c.zip Comprehensive listing of interrupt calls, 3 of 4
- inter60d.zip Comprehensive listing of interrupt calls, 4 of 4
- inter60e.zip Utility programs/source code for interrupt list
- inter60f.zip WinHelp conversion programs for interrupt list
- inter60g.zip Hypertext conversion programs for interrupt list
-
- 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, I/O ports, I2C-bus
- devices, and System Management Mode save areas. This release contains
- more than 9500 entries and over 5300 tables.
-
- 11.3 WHAT IS NEW
-
- New in this release: 140k of updates, including Econet, VESA VBE/AF,
- Matrox VESA-OEM functions, more Soft-ICE backdoor commands, XBIOS,
- EZ-Drive, Adaptec AIC-7xxx and AHA-152x ports, GEM/ViewMAX, WinTel API,
- TrLit API, VHRBIOS.SYS, Philips SAA7110(A), Intel 82595FX, an updated
- OPCODES.LST. Also includes a new version of INT2WHLP which can handle
- the new five-character table numbers.
-
- 11.4 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: 21 Feb 99
-
- ------------------------------
-
- 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
- trickier. 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
-
- ------------------------------
-
- Subject: 13. Protected Mode Programming
-
- 13.1 PMODE Tutorials, FAQ, and other reference documentation
-
- Protected Mode Basics by Robert Collins
- http://x86.ddj.com/articles/pmbasics/tspec_a1_doc.htm
- Excellent starting tutorial with source code.
-
- PMODE FAQ
- ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/pmtut002.zip
-
- Protected Mode Book List
- http://www.interactive.net/~viren/Janz/Books/pmode_books.htm
- (Broken)
-
- Christopher GieseÆs PMODE Tutorial
- http://www.execpc.com/~geezer/os/pm.htm
- HTML format
-
- pmode-l FAQs
- http://www.lysator.liu.se/~redhog
- http://bphantom.tripod.com/pmode-l_FAQ.html
- http://pmode-l.webjump.com/ (in HTML)
-
- 13.2 Source code Archives
-
- Walnut Creek PMODE Archives
- ftp://ftp.cdrom.com/pub/demos/code/hardware/pmode/
-
- X2FTP.OULU.FI
- ftp://x2ftp.oulu.fi/pub/msdos/programming/pmode/00index.html
- Protected mode utilities and some source code
-
- 13.3 PMODE Websites
-
- 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.
- http://www.alaska.net/~zumwalt
- Archives, Source Code, Technical Documentation, OS Chat Room
- and much more
-
- PASS-32, Dieter's Assembler
- http://www.geocities.com/SiliconValley/Bay/3437/
- Debugger and DOS extender also available
-
- Dario Alpern's programs
- http://members.tripod.com/~alpertron/ENGLISH2.HTM
- PMODE examples
-
- Christopher GieseÆs Triple Fault Club
- http://www.execpc.com/~geezer/os/index.htm
- NASM and DJGPP Code, Protected Mode Code, OS Code
-
- 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
-
- 5.4 PMODE Mailing Lists
-
- Protected Mode Mailing list:
- To subscribe:
- Send: mailto:pmode-l-request@fys.ruu.nl
- subject: none
- body: subscribe pmode-l email@yourisp.name (Note that is pmode-l
- (ell) not pmode-1 (one)
-
- Use pmode-l@fys.ruu.nl to send email to others in the list.
-
- To unsubscribe:
- Send: mailto:pmode-l-request@fys.ruu.nl
- subject: none
- body: unsubscribe pmode-l email@yourisp.name
-
- Contributor: Raymond Moon, raymoon@moonware.dgsys.com
- Last changed: 20 Feb 2000
-
- ------------------------------
- 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.cs.ucr.edu/Page_asm/RHUCRLib.html
-
- Unlike the previous libraries, there are no registration 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 4.0
-
- ALIB is Jeff Ownens' shareware assembly language library. This library
- is available from SimTel.
-
- ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/alib40.zip
-
- Similar to the UCR library described above, registration fees are not
- requested. The library consists of over 400 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
-
- Also included are 15 sample programs.
-
- 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: 23 Nov 98
-