汇编网首页登录博客注册
lloveasm的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
文章收藏

[2008-09-17 15:31] 试验 17

图片载入中
assume cs:code
data segment
    db 512 dup(0)
data ends
code segment
start:  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;安装int 7ch号中断例程
        mov ax, cs
        mov ds, ax
        mov si, offset rwfloppy

        mov ax, 0
        mov es, ax
        mov di, 200h
        mov cx, offset rwfloppyend - offset rwfloppy
        cld
        rep movsb

        mov word ptr es:[7ch*4], 200h
        mov word ptr es:[7ch*4+2], 0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;测试
        mov ax, data
        mov es, ax
        mov si, 0h
        
        mov di, 0
        mov cx, 2880    ;2880个扇区
s:
        mov ah, 0       ;读
        mov al, 1       ;读入扇区数
        mov dl, 0       ;软驱A
        mov bx, di      ;逻辑扇区号
        int 7ch

        mov ah, 1       ;写
        mov al, 1       ;写入扇区数
        mov dl, 1       ;软驱B
        mov bx, di      ;逻辑扇区号
        int 7ch
        inc di
        loop s
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        mov ax, 4c00h
        int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;功能:使用逻辑扇区号读写软盘
;参数:(ah) = 0 表示读,1 表示写
;      (al) = 要读写的扇区数
;      (dl) = 驱动器号,0:软盘A,1:软盘B
;      (bx) = 要读写的逻辑扇区号
;      es:si 指向存储读出数据或写入数据的内存区
rwfloppy:   cmp ah, 1
            ja ok               ;大于1跳出
            push bx             ;保护bx
            push cx             ;保护cx
            push dx             ;保护dx
            add ah, 2           ;读或写:0+2 or 1+2
            push ax             ;保存写入的扇区数和功能号(al)和(ah)
            push dx             ;保存驱动器号(dl)
            mov ax, bx
            mov dx, 0       
            mov bx, 1440        
            div bx 
            mov bx, dx          ;(bx) = (bx)%1440
            pop dx              ;恢复驱动器号(dl)
            mov dh, al          ;面: (dh) = (bx)/1440 
            mov ax, bx
            mov bl, 18
            div bl
            mov ch, al          ;磁道号:(ch) = ((bx)%1440)/18
            mov cl, ah
            inc cl              ;扇区号:(cl) = ((bx)%1440)%18+1
            mov bx, si
            pop ax              
            int 13h             ;调用bios中断
            sub ah, 2           ;恢复ax
            pop dx              ;恢复dx
            pop cx              ;恢复cx
            pop bx              ;恢复bx
ok:         iret
        
rwfloppyend:    nop
code ends
end start
评论次数(1)  |  浏览次数(1146)  |  类型(汇编作业) |  收藏此文  | 

[  游客   发表于  2008-09-19 14:55  ]

不错,原来可以这样实验!

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码