1 1.挖掘有用信息
2 首先可以得到逻辑扇区号与物理扇区号的算术关系:
3
4 逻辑扇区号=(面号*80+磁道号)*18+扇区号-1
5
6 然后还可以得到与之相关的逆推关系:
7
8 面号=int(逻辑扇区号/1440)
9 磁道号=int(rem(逻辑扇区号/1440)/18)
10 扇区号=rem(rem(逻辑扇区号/1440)/18)+1
11
12 最后得到重要的参数说明:
13
14 (ah)=功能号(0表示读,1表示写)
15 (dx)=逻辑扇区号
16 es:bx指向向扇区读或写的内存区
17
18 2.分析子程序
19 ah、dx的传入必须在测试程序传入
20 es:bx的传入必须在中断例程当中
21 欲推出逆关系,必进行32位/16位的除法,dx储存高位或余,ax储存低位或商
22 所以得先把相关寄存器入栈,然后获取相应物理扇区号即可
23
24 3.安装程序如下
25 assume cs:code
26
27 code segment
28 start:mov ax,cs
29 mov ds,ax
30 mov si,offset s0
31 mov ax,0020h
32 mov es,ax
33 mov di,0
34
35 mov cx,offset s9-offset s0
36 cld
37 rep movsb
38
39 mov ax,0
40 mov es,ax
41 mov word ptr es:[7ch*4],0
42 mov word ptr es:[7ch*4+2],0020h
43
44 mov ax,4c00h
45 int 21h
46
47 s0:push ax
48 mov ax,0020h
49 mov es,ax
50 mov bx,offset s9-offset s0
51 pop ax
52
53 mov al,1 ;扇区数
54 push ax
55 push bx
56
57 mov ax,dx
58 mov dx,0
59 mov bx,1440
60 div bx
61 mov bl,18
62 push ax
63 mov ax,dx
64 pop dx
65 div bl
66 mov ch,al ;求磁道号
67 mov cl,ah ;求扇区号
68 inc cl
69 mov bx,dx
70 mov dh,bl ;求面号
71 mov dl,81h ;求驱动器号
72
73 pop bx
74 pop ax
75 int 13h
76 iret
77
78 s9:nop
79 code ends
80
81 end start
82
83 4.测试程序如下
84 assume cs:code
85
86 code segment
87 start:mov ah,1
88 mov dx,1439
89 add ah,2
90 int 7ch
91
92 mov ax,4c00h
93 int 21h
94 code ends
95
96 end start