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

我的博客

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

[2009-07-07 20:41] 实验17

由于读和写的代码很多相似之处,所以没必要用直接定址表



assume cs:code
stack segment
        db 32 dup (0)
stack ends 
code segment

start:        
        mov ax,stack
        mov ss,ax
        mov sp,16

        push cs
        pop ds
        mov si,offset int7c      ;ds:si中断例程
        mov ax,0
        mov es,ax
        mov di,200h
        mov cx,offset int7cend-offset int7c
        cld 
        rep movsb              ;中断例程复制到起始地址0:200的内存单元

        mov word ptr es:[7ch*4],200h
        mov word ptr es:[7ch*4+2],0   ;设置中断向量


        mov ax,4c00h
        int 21h

int7c:          
        push ax
        push cx
        push dx
        cmp ah,1
        ja sret           ;当功能号大于1,退出
        
        push ax    ;保存功能号
        push bx    ;保存存储区的偏移地址,以防下面程序破坏
        
        mov ax,dx
        xor dx,dx
        mov bx,1440
        div bx
        push ax    ;面号入栈
        mov ax,dx
        xor dx,dx
        mov bx,18
        div bx
        inc dx
        mov cl,dl
        mov ch,al
        pop ax     ;面号出栈
        mov dh,al  ;通过给定dx求面号,磁道号,扇区号
        
        mov dl,0   ;驱动器号

        pop bx     ;恢复存储区的偏移地址
        pop ax     ;恢复功能号
        add ah,2
        mov al,1   ;读取一个扇区
        int 13h
 
sret:
        pop dx
        pop cx
        pop ax
        iret

int7cend: 
        nop
code ends
end start


测试程序就不贴了,书中说的逻辑扇区号与物理扇区号的换算公式不是唯一的,我们真正操作的还是物理扇区号,用哪种换算公式无所谓,都是方便人理解的,但值得注意的是,公式要保持一致性。
评论次数(1)  |  浏览次数(554)  |  类型(汇编作业) |  收藏此文  | 

[  游客   发表于  2009-07-17 15:24  ]

是没必要用还是你根本就不明白呢?
你应该重头再学了

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