#2
malpower2010-07-10 00:50
|
小弟目前正在为内核编写驱动,在对AT硬盘进行写操作时出现了一些问题。
在我发出0x30命令后,一直不会出现中断。
不知是什么问题。
代码如下:
KRNL_HD_WriteSector:
cli
push ebp
mov ebp,esp
push eax
push edx
push ds
mov ax,24
mov ds,ax
mov eax,dword[ebp+20] ;;要写入的数据的线性地址
mov dword[dRwAddress],eax ;;将地址存入变量
mov al,1
mov byte[dRwSwitch],al ;;我的方向变量1表示写操作
mov ax,0x1F2
mov dx,ax
mov al,1
out dx,al
inc dx
mov al,byte[ebp+8] ;;扇区号参数
out dx,al
inc dx
mov al,byte[ebp+12] ;;磁道号参数低8位
out dx,al
inc dx
mov al,byte[ebp+13] ;;磁道号参数高8位
out dx,al
mov al,0xA0
add al,byte[ebp+16] ;;磁头号参数
inc dx
out dx,al
mov dx,0x1F7
mov al,0x30
out dx,al ;;发出命令0x30(读带重试)
pop ds
pop edx
pop eax
pop ebp
sti
ret