mirror of
https://github.com/sunym1993/flash-linux0.11-talk.git
synced 2026-02-02 18:21:15 +08:00
add README.md for x86-interrupt-list
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.idea/
|
||||
83
一些非必要的资料/x86-interrupt-list/README.md
Normal file
83
一些非必要的资料/x86-interrupt-list/README.md
Normal file
@@ -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
|
||||
|
||||
# ···
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user