2 changed files with 84 additions and 0 deletions
@ -0,0 +1 @@ |
|||
.idea/ |
@ -0,0 +1,83 @@ |
|||
x86 中断函数列表 |
|||
|
|||
一开始从 stackoverflow 上找到这个网站: |
|||
[http://www.ctyme.com/intr/int.htm](http://www.ctyme.com/intr/int.htm) |
|||
|
|||
但是没找到下载地址,所以又搜了下找到了这个网站[Public Files on FTP.CS.CMU.EDU](https://www.cs.cmu.edu/~ralf/files.html) |
|||
|
|||
目录和文件(可按文本格式打开)按照字母序,比如 `inter61a/INTERRUP.A` 包含了 `INT 00` 到 `INT 10` |
|||
|
|||
文中会对指令作出较为详细的描述,以 最近一篇文章中的中 |
|||
[INT 13](https://github.com/sunym1993/flash-linux0.11-talk/blob/547ef4b440ff2ed1be2204e459316a39e9a734fc/%E4%B8%80%E4%BA%9B%E9%9D%9E%E5%BF%85%E8%A6%81%E7%9A%84%E8%B5%84%E6%96%99/linux-0.11/boot/bootsect.s#L71) |
|||
为例, 可以看到给 `AX` 赋值了 `#0x0200+SETUPLEN -> #0x0204` 即 `AH=02` |
|||
|
|||
```assembly |
|||
mov ax,#0x0200+SETUPLEN ; service 2, nr of sectors |
|||
int 0x13 |
|||
``` |
|||
|
|||
对应在 `inter61a/INTERRUP.B` 找到如下描述,可知 `CF` 用来做错误位设置,clear 时标志成功, |
|||
自然猜测接下来的 `jnc` 指令就是为了检查 READ SECTOR(S) INTO MEMORY 这一操作是否成功。 |
|||
|
|||
```shell |
|||
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 |
|||
|
|||
# ··· |
|||
|
|||
``` |
Loading…
Reference in new issue