assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp ,128
push cs
pop ds
mov ax,0
mov es,ax
mov si,offset int7ch
mov di,200h
mov cx,offset int7chend-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 ;将7ch中断安装到0:200处;并将7ch的中断入口地址设置为0:200
int7ch: push es
push bx
push cx
push dx
push bp
push ax ;将用到的寄存器入栈
mov ax,dx
mov dx,0
mov bp,1440
div bp ;逻辑扇区号/1440
push ax ;(逻辑扇区号/1440)的商入栈
mov ax,dx
mov dx,0
mov bp,18
div bp ;rem(逻辑扇区号/1440)/18
mov ch,al ;rem(逻辑扇区号/1440)/18的商存入ch,为磁道号
mov cl,dl
inc cl ;rem(逻辑扇区号/1440)/18的余数存入cl,再加1,为扇区号
mov dl,0 ;设置驱动器号为0,即软驱A
pop ax
mov dh,al ;(逻辑扇区号/1440)的商出栈,结果存入dh,为面号
pop ax ;参数输入值出栈,ah传递功能号,al传递扇区数
add ah,2 ;ah功能号加2,对应13h号中断中规定的读写号码
int 13h ;调用13h中断
pop bp
pop dx
pop cx
pop bx
pop es
iret
int7chend: nop
code ends
end start