Assembly Example Using 08h Int
DOS INT 21h - DOS Function Codes
The follow abridged list of DOS interrupts has been extracted from a large list compiled by Ralf Brown. These are available on any Simtel mirror (e.g. sunsite.anu.edu.au) under the directory ms-dos/info/interNNp.zip
| AH | Description | AH | Description |
| 01 | Read character from STDIN | 02 | Write character to STDOUT |
| 05 | Write character to printer | 06 | Console Input/Output |
| 07 | Direct char read (STDIN), no echo | 08 | Char read from STDIN, no echo |
| 09 | Write string to STDOUT | 0A | Buffered input |
| 0B | Get STDIN status | 0C | Flush buffer for STDIN |
| 0D | Disk reset | 0E | Select default drive |
| 19 | Get current default drive | 25 | Set interrupt vector |
| 2A | Get system date | 2B | Set system date |
| 2C | Get system time | 2D | Set system time |
| 2E | Set verify flag | 30 | Get DOS version |
| 35 | Get Interrupt vector | ||
| 36 | Get free disk space | 39 | Create subdirectory |
| 3A | Remove subdirectory | 3B | Set working directory |
| 3C | Create file | 3D | Open file |
| 3E | Close file | 3F | Read file |
| 40 | Write file | 41 | Delete file |
| 42 | Seek file | 43 | Get/Set file attributes |
| 47 | Get current directory | 4C | Exit program |
| 4D | Get return code | 54 | Get verify flag |
| 56 | Rename file | 57 | Get/Set file date |
AH = 01h - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
Return: AL = character read
Notes:
- ^C/^Break are checked
- ^P toggles the DOS-internal echo-to-printer flag
- ^Z is not interpreted, thus not causing an EOF if input is redirected character is echoed to standard output
SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
AH = 02h -WRITE CHARACTER TO STANDARD OUTPUT
Entry: DL = character to write
Return: AL = last character output
Notes:
- ^C/^Break are checked
- the last character output will be the character in DL unless DL=09h on entry, in which case AL=20h as tabs are expanded to blanks
- if standard output is redirected to a file, no error checks (write- protected, full media, etc.) are performed
SeeAlso: AH=06h,AH=09h
AH = 05h - WRITE CHARACTER TO PRINTER
Entry: DL = character to print
Notes:
- keyboard checked for ^C/^Break
- STDPRN is usually the first parallel port, but may be redirected under DOS 2+
- if the printer is busy, this function will wait
SeeAlso: INT 17/AH=00h
AH = 06h - DIRECT CONSOLE OUTPUT
Entry: DL = character (except FFh)
Return: AL = character output
Notes: does not check ^C/^Break
SeeAlso: AH=02h,AH=09h
AH = 06h - DIRECT CONSOLE INPUT
Entry: AH = 06h DL = FFh
Return:
- ZF set if no character available and AL = 00h
- ZF clear if character available AL = character read
Notes:
- ^C/^Break are NOT checked
- if the returned character is 00h, the user pressed a key with an extended keycode, which will be returned by the next call of this function
- although the return of AL=00h when no characters are available is not documented, some programs rely on this behavior
SeeAlso: AH=0Bh
AH=07h - DIRECT CHARACTER INPUT, WITHOUT ECHO
Return: AL = character read from standard input
Notes: does not check ^C/^Break
SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
AH = 08h - CHARACTER INPUT WITHOUT ECHO
Return: AL = character read from standard input
Notes: ^C/^Break are checked
SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
AH = 09h - WRITE STRING TO STANDARD OUTPUT
Entry: DS:DX -> '$'-terminated string
Return: AL = 24h
Notes: ^C/^Break are checked
SeeAlso: AH=02h,AH=06h"OUTPUT"
AH = 0Ah - BUFFERED INPUT
Entry: DS:DX -> buffer (see below)
Return: buffer filled with user input
Notes:
- ^C/^Break are checked
- reads from standard input
SeeAlso: AH=0Ch
Format of DOS input buffer:
| Offset | Size | Description |
| 00 | 1 | maximum characters buffer can hold |
| 01 | 1 | number of chars from last input which may be recalled OR number of characters actually read, excluding CR |
| 02 | n | actual characters read, including the final carriage return |
AH=0Bh - GET STDIN STATUS
Return:
- AL = 00h if no character available
- AL = FFh if character is available
Notes: ^C/^Break are checked
SeeAlso: AH=06h"INPUT"
AH = 0Ch - FLUSH BUFFER AND READ STANDARD INPUT
Entry:
- AL = STDIN input function to execute after flushing buffer
- other registers as appropriate for the input function
Return: as appropriate for the specified input function
Note: if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but no input is attempted
SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
AH = 0Dh - DISK RESET
Notes: This function writes all modified disk buffers to disk, but does not update the directory information
SeeAlso: AX=5D01h
AH = 0Eh - SELECT DEFAULT DRIVE
Entry: DL = new default drive (0=A:, 1=B:, etc)
Return: AL = number of potentially valid drive letters
Notes: the return value is the highest drive present
SeeAlso: AH=19h,AH=3Bh,AH=DBh
AH = 19h - GET CURRENT DEFAULT DRIVE
Return: AL = drive (0=A:, 1=B:, etc)
SeeAlso: AH=0Eh,AH=47h,AH=BBh
AH = 25h - SET INTERRUPT VECTOR
Entry:
- AL = interrupt number
- DS:DX -> new interrupt handler
Notes: this function is preferred over direct modification of the interrupt vector table
SeeAlso: AX=2501h,AH=35h
AH = 2Ah - GET SYSTEM DATE
Return: CX = year (1980-2099) DH = month DL = day AL = day of week (00h=Sunday)
SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h
AH = 2Bh - SET SYSTEM DATE
Entry: CX = year (1980-2099) DH = month DL = day
Return:
- AL = 00 successful
- FFh invalid date, system date unchanged
Note: DOS 3.3+ also sets CMOS clock
SeeAlso: AH=2Ah,AH=2Dh
AH = 2Ch - GET SYSTEM TIME
Return: CH = hour CL = minute DH = second DL = 1/100 seconds
Note: on most systems, the resolution of the system clock is about 5/100sec, so returned times generally do not increment by 1 on some systems, DL may always return 00h
SeeAlso: AH=2Ah,AH=2Dh,AH=E7h
AH = 2Dh - SET SYSTEM TIME
Entry: CH = hour CL = minute DH = second DL = 1/100 seconds
Return:
- AL = 00h successful
- FFh if invalid time, system time unchanged
Note: DOS 3.3+ also sets CMOS clock
SeeAlso: AH=2Bh"DOS",AH=2Ch
AH = 2Eh - SET VERIFY FLAG
Entry: AL = new state of verify flag (00 off, 01h o)
Notes:
- default state at system boot is OFF
- when ON, all disk writes are verified provided the device driver supports read-after-write verification
SeeAlso: AH=54h
AH=30h - GET DOS VERSION
Entry: AL = what to return in BH (00h OEM number, 01h version flag)
Return:
- AL = major version number (00h if DOS 1.x)
- AH = minor version number
- BL:CX = 24-bit user serial number (most versions do not use this) if DOS <5 or AL=00h
- BH = MS-DOS OEM number if DOS 5+ and AL=01h
- BH = version flag bit 3: DOS is in ROM other: reserved (0)
Notes:
- DOS 4.01 and 4.02 identify themselves as version 4.00
- MS-DOS 6.21 reports its version as 6.20; version 6.22 returns the correct value
- Windows95 returns version 7.00 (the underlying MS-DOS)
SeeAlso: AX=3000h/BX=3000h,AX=3306h,AX=4452h
AH=35h - GET INTERRUPT VECTOR
Entry: AL = interrupt number
Return: ES:BX -> current interrupt handler
SeeAlso: AH=25h,AX=2503h
AH = 36h - GET FREE DISK SPACE
Entry: DL = drive number (0=default, 1=A:, etc)
Return:
- AX = FFFFh if invalid drive
- AX = sectors per cluster BX = number of free clusters CX = bytes per sector DX = total clusters on drive
Notes:
- free space on drive in bytes is AX * BX * CX
- total space on drive in bytes is AX * CX * DX
- "lost clusters" are considered to be in use
- this function does not return proper results on CD-ROMs; use AX=4402h"CD-ROM" instead
SeeAlso: AH=1Bh,AH=1Ch,AX=4402h"CD-ROM"
AH = 39h - "MKDIR" - CREATE SUBDIRECTORY
Entry: DS:DX -> ASCIZ pathname
Return:
- CF clear if successful AX destroyed
- CF set on error AX = error code (03h,05h)
Notes:
- all directories in the given path except the last must exist
- fails if the parent directory is the root and is full
- DOS 2.x-3.3 allow the creation of a directory sufficiently deep that it is not possible to make that directory the current directory because the path would exceed 64 characters
SeeAlso: AH=3Ah,AH=3Bh,AH=6Dh
AH = 3Ah - "RMDIR" - REMOVE SUBDIRECTORY
Entry: DS:DX -> ASCIZ pathname of directory to be removed
Return:
- CF clear if successful, AX destroyed
- CF set on error AX = error code (03h,05h,06h,10h)
Notes: directory must be empty (contain only '.' and '..' entries)
SeeAlso: AH=39h,AH=3Bh
AH = 3Bh - "CHDIR" - SET CURRENT DIRECTORY
Entry: DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
Return:
- CF clear if successful, AX destroyed
- CF set on error AX = error code (03h)
Notes: if new directory name includes a drive letter, the default drive is not changed, only the current directory on that drive
SeeAlso: AH=47h,AH=71h,INT 2F/AX=1105h
AH = 3Ch - "CREAT" - CREATE OR TRUNCATE FILE
Entry:
- CX = file attributes
- DS:DX -> ASCIZ filename
Return:
- CF clear if successful, AX = file handle
- CF set on error AX = error code (03h,04h,05h)
Notes: if a file with the given name exists, it is truncated to zero length
SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh
AH = 3Dh - "OPEN" - OPEN EXISTING FILE
Entry:
- AL = access and sharing modes
- DS:DX -> ASCIZ filename
Return:
- CF clear if successful, AX = file handle
- CF set on error AX = error code (01h,02h,03h,04h,05h,0Ch,56h)
Notes:
- file pointer is set to start of file
- file handles which are inherited from a parent also inherit sharing and access restrictions
- files may be opened even if given the hidden or system attributes
SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h
AH = 3Eh - "CLOSE" - CLOSE FILE
Entry: BX = file handle
Return:
- CF clear if successful, AX destroyed
- CF set on error, AX = error code (06h)
Note: if the file was written to, any pending disk writes are performed, the time and date stamps are set to the current time, and the directory entry is updated
SeeAlso: AH=10h,AH=3Ch,AH=3Dh
AH = 3Fh - "READ" - READ FROM FILE OR DEVICE
Entry:
- BX = file handle
- CX = number of bytes to read
- DS:DX -> buffer for data
Return:
- CF clear if successful - AX = number of bytes actually read (0 if at EOF before call)
- CF set on error AX = error code (05h,06h)
Notes:
- data is read beginning at current file position, and the file position is updated after a successful read
- the returned AX may be smaller than the request in CX if a partial read occurred
- if reading from CON, read stops at first CR
SeeAlso: AH=27h,AH=40h,AH=93h
AH=40h - "WRITE" - WRITE TO FILE OR DEVICE
Entry:
- BX = file handle
- CX = number of bytes to write
- DS:DX -> data to write
Return:
- CF clear if successful -AX = number of bytes actually written
- CF set on error - AX = error code (05h,06h)
Notes:
- if CX is zero, no data is written, and the file is truncated or extended to the current position
- data is written beginning at the current file position, and the file position is updated after a successful write
- the usual cause for AX < CX on return is a full disk
SeeAlso: AH=28h,AH=3Fh
AH = 41H - "UNLINK" - DELETE FILE
Entry:
- DS:DX -> ASCIZ filename (no wildcards, but see notes)
- CL = attribute mask for deletion (server call only, see notes)
Return:
- CF clear if successful, AX destroyed (DOS 3.3) AL seems to be drive of deleted file
- CF set on error AX = error code (02h,03h,05h)
Notes:
- (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case the filespec must be canonical (as returned by AH=60h), and only files matching the attribute mask in CL are deleted
- DOS does not erase the file's data; it merely becomes inaccessible because the FAT chain for the file is cleared
- deleting a file which is currently open may lead to filesystem corruption.
SeeAlso: AH=13h,AX=4301h,AX=4380h,AX=5D00h,AH=60h,AH=71h
AH=42h - "LSEEK" - SET CURRENT FILE POSITION
Entry:
- AL = origin of move 00h start of file 01h current file position 02h end of file
- BX = file handle
- CX:DX = offset from origin of new file position
Return:
- CF clear if successful, DX:AX = new file position in bytes from start of file
- CF set on error, AX = error code (01h,06h)
Notes:
- for origins 01h and 02h, the pointer may be positioned before the start of the file; no error is returned in that case, but subsequent attempts at I/O will produce errors
- if the new position is beyond the current end of file, the file will be extended by the next write (see AH=40h)
SeeAlso: AH=24h
AH=43 - GET FILE ATTRIBUTES
Entry:
- AL = 00h
- DS:DX -> ASCIZ filename
Return:
- CF clear if successful CX = file attributes
- CF set on error, AX = error code (01h,02h,03h,05h)
BUG: Windows for Workgroups returns error code 05h (access denied) instead of error code 02h (file not found) when attempting to get the attributes of a nonexistent file.
SeeAlso: AX=4301h,AX=4310h,AX=7143h,AH=B6h
AH=43 - "CHMOD" - SET FILE ATTRIBUTES
Entry:
- AL = 01h
- CX = new file attributes
- DS:DX -> ASCIZ filename
Return:
- CF clear if successful, AX destroyed
- CF set on error, AX = error code (01h,02h,03h,05h)
Notes:
- will not change volume label or directory attribute bits, but will change the other attribute bits of a directory
- MS-DOS 4.01 reportedly closes the file if it is currently open
SeeAlso: AX=4300h,AX=4311h,AX=7143h,INT 2F/AX=110Eh
Bitfields for file attributes:
| Bits | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Description | shareable | - | archive | directory | vol. label | system | hidden | read-only |
AH = 47h - "CWD" - GET CURRENT DIRECTORY
Entry:
- DL = drive number (00h = default, 01h = A:, etc)
- DS:SI -> 64-byte buffer for ASCIZ pathname
Return:
- CF clear if successful
- CF set on error, AX = error code (0Fh)
Notes:
- the returned path does not include a drive or the initial backslash
- many Microsoft products for Windows rely on AX being 0100h on success
SeeAlso: AH=19h,AH=3Bh,AH=71h
AH = 4Ch - "EXIT" - TERMINATE WITH RETURN CODE
Entry: AL = return code
Return: never returns
Notes: unless the process is its own parent, all open files are closed and all memory belonging to the process is freed
SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh
AH = 4Dh - GET RETURN CODE (ERRORLEVEL)
Return:
- AH = termination type (00=normal, 01h control-C abort, 02h=critical error abort, 03h terminate and stay resident)
- AL = return code
Notes:
- the word in which DOS stores the return code is cleared after being read by this function, so the return code can only be retrieved once
- COMMAND.COM stores the return code of the last external command it executed as ERRORLEVEL
SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
AH = 54h - GET VERIFY FLAG
Return: AL = verify flag (00h=off, 01h=on, i.e. all disk writes verified after writing)
SeeAlso: AH=2Eh
AH = 56h - "RENAME" - RENAME FILE
Entry:
- DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
- ES:DI -> ASCIZ new filename (no wildcards)
- CL = attribute mask (server call only, see below)
Return:
- CF clear if successful
- CF set on error, AX= error code (02h,03h,05h,11h)
Notes:
- allows move between directories on same logical volume
- this function does not set the archive attribute
- open files should not be renamed
- (DOS 3.0+) allows renaming of directories
AH = 57h - GET FILE'S LAST-WRITTEN DATE AND TIME
Entry:
- AL = 00h (Get attribute)
- BX = file handle
Return:
- CF clear if successful, CX = file's time DX = file's date
- CF set on error, AX = error code (01h,06h)
SeeAlso: AX=5701h
Bitfields for file time:
| Bits | 15-11 | 10-5 | 4-0 |
| Description | hours | minutes | seconds |
Bitfields for file date:
| Bits | 15-9 | 8-5 | 4-0 |
| Description | year (1980-) | month | day |
AH = 57h - SET FILE'S LAST-WRITTEN DATE AND TIME
Entry:
- AL =01h (Set attributes)
- BX = file handle
- CX = new time
- DX = new date
Return:
- CF clear if successful
- CF set on error AX = error code (01h,06h)
SeeAlso: AX=5700h
This page is maintained by Barry Wilks.
Assembly Example Using 08h Int
Source: http://spike.scu.edu.au/~barry/interrupts.html
0 Response to "Assembly Example Using 08h Int"
Post a Comment