assume cs:code
code segment
start:push cs
pop ds
mov si,offset int7ch
mov ax,0
mov es,ax
mov di,200H
mov cx,offset int7ch_e-offset int7ch
cld
rep movsb ;安装中断处理程序
cli
mov word ptr es:[7ch*4],200H
mov word ptr es:[7ch*4+2],0
sti ;设置中断向量
mov ax,4c00H
int 21H
;名称:int7ch
;功能:根据给出的逻辑扇区号对软盘进行读或者写
;参数:(ah)=0/1(0表示读,1表示写)
; (dx)=0-2879(0-2879表示要读写的逻辑扇区号)
; (es:bx)=指向读出数据或者写入数据的内存区
;返回:(ah)=0,(al)=1 操作成功
; (ah)=出错代码
int7ch:
push cx
push dx
push bx
push ax
mov ax,dx
mov bx,1440
div bx
mov bx,dx
mov dx,ax
mov cl,4
shl dx,cl ;磁头号
mov dl,0 ;驱动器号
mov ax,bx
mov dl,18
div dl
mov ch,al ;磁道号
inc ah
mov cl,ah ;扇区号
pop ax
add ah,2 ;功能号
mov al,1 ;读或写的扇区数
pop bx
int 13H
pop dx
pop cx
iret
int7ch_e:nop
code ends
end start |