You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
3 years ago | |
---|---|---|
.. | ||
dvint43 | 3 years ago | |
inter61a | 3 years ago | |
inter61b | 3 years ago | |
inter61c | 3 years ago | |
inter61d | 3 years ago | |
inter61e | 3 years ago | |
inter61f | 3 years ago | |
rbpci119 | 3 years ago | |
README.md | 3 years ago | |
faq.lst | 3 years ago |
README.md
x86 中断函数列表
一开始从 stackoverflow 上找到这个网站: http://www.ctyme.com/intr/int.htm
但是没找到下载地址,所以又搜了下找到了这个网站Public Files on FTP.CS.CMU.EDU
目录和文件(可按文本格式打开)按照字母序,比如 inter61a/INTERRUP.A
包含了 INT 00
到 INT 10
文中会对指令作出较为详细的描述,以 最近一篇文章中的
INT 13
为例, 可以看到给 AX
赋值了 #0x0200+SETUPLEN -> #0x0204
即 AH=02
mov ax,#0x0200+SETUPLEN ; service 2, nr of sectors
int 0x13
jnc ok_load_setup ; ok - continue
对应在 inter61a/INTERRUP.B
找到如下描述,可知 CF
用来做错误位设置,clear 时标志成功,
自然猜测接下来的 jnc
指令就是为了检查 READ SECTOR(S) INTO MEMORY 这一操作是否成功。
INT 13 - DISK - READ SECTOR(S) INTO MEMORY
AH = 02h
AL = number of sectors to read (must be nonzero)
CH = low eight bits of cylinder number
CL = sector number 1-63 (bits 0-5)
high two bits of cylinder (bits 6-7, hard disk only)
DH = head number
DL = drive number (bit 7 set for hard disk)
ES:BX -> data buffer
Return: CF set on error
if AH = 11h (corrected ECC error), AL = burst length
CF clear if successful
AH = status (see #00234)
AL = number of sectors transferred (only valid if CF set for some
BIOSes)
Notes: errors on a floppy may be due to the motor failing to spin up quickly
enough; the read should be retried at least three times, resetting
the disk with AH=00h between attempts
most BIOSes support "multitrack" reads, where the value in AL
exceeds the number of sectors remaining on the track, in which
case any additional sectors are read beginning at sector 1 on
the following head in the same cylinder; the MSDOS CONFIG.SYS command
MULTITRACK (or the Novell DOS DEBLOCK=) can be used to force DOS to
split disk accesses which would wrap across a track boundary into two
separate calls
the IBM AT BIOS and many other BIOSes use only the low four bits of
DH (head number) since the WD-1003 controller which is the standard
AT controller (and the controller that IDE emulates) only supports
16 heads
AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more
than 1024 cylinders by placing bits 10 and 11 of the cylinder number
into bits 6 and 7 of DH
under Windows95, a volume must be locked (see INT 21/AX=440Dh/CX=084Bh)
in order to perform direct accesses such as INT 13h reads and writes
all versions of MS-DOS (including MS-DOS 7 [Windows 95]) have a bug
which prevents booting on hard disks with 256 heads (FFh), so many
modern BIOSes provide mappings with at most 255 (FEh) heads
some cache drivers flush their buffers when detecting that DOS is
bypassed by directly issuing INT 13h from applications. A dummy
read can be used as one of several methods to force cache
flushing for unknown caches (e.g. before rebooting).
BUGS: When reading from floppies, some AMI BIOSes (around 1990-1991) trash
the byte following the data buffer, if it is not arranged to an even
memory boundary. A workaround is to either make the buffer word
aligned (which may also help to speed up things), or to add a dummy
byte after the buffer.
MS-DOS may leave interrupts disabled on return from this function.
Apparently some BIOSes or intercepting resident software have bugs
that may destroy DX on return or not properly set the Carry flag.
At least some Microsoft software frames calls to this function with
PUSH DX, STC, INT 13h, STI, POP DX.
on the original IBM AT BIOS (1984/01/10) this function does not disable
interrupts for harddisks (DL >= 80h). On these machines the MS-DOS/
PC DOS IO.SYS/IBMBIO.COM installs a special filter to bypass the
buggy code in the ROM (see CALL F000h:211Eh)
SeeAlso: AH=03h,AH=0Ah,AH=06h"V10DISK.SYS",AH=21h"PS/1",AH=42h"IBM"
SeeAlso: INT 21/AX=440Dh/CX=084Bh,INT 4D/AH=02h
# ···