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

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  今天一个个性,明天一个个性,原来我没的个性。
  • 『姓名』:张杰                
  • 『性别』:男    『发送消息
  • 个人说明:
  • 详细信息『加为好友』
学习动态
最新留言
好友圈
文章收藏
友情链接

[2008-03-27 23:46] 实验十七(修改)

以下为安装程序
assume cs:code
code segment
start: mov ax,0
       mov es,ax
       mov ax,cs
       mov ds,ax
       mov di,200h
       mov si,offset int7ch       
       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
int7ch: push cx
        push dx
        cmp bx,2879
        ja return     ;//判断逻辑扇区是否大于2879
        cmp ah,1      ;//判断功能号是否大于1
        ja return
        je first
        call diskM_1
        mov ah,2
        int 13h
return: pop dx
        pop cx
        iret
 first: call diskM_1
        mov ah,3
        int 13h
        jmp short return
diskM_1: push bx         ;//此程序通过传逻辑扇区号求得磁道号、磁面号、扇区号并指定驱动器号.
         push ax
         mov ax,bx
         mov cl,18
         div cl
         mov dh,al         ;//计算逻辑扇区除以18,商为偶数磁面为0,奇数则为1
         and dh,1          ;//二进制最后位即可判断奇偶。
         mov cl,ah         
         inc cl           ;//余数自加1为扇区号
         mov ax,bx
         mov bl,36
         div bl
         mov ch,al        ;//逻辑扇区除以36的商即为磁道号.
         mov dl,0         ;//设驱动器号为0.
         pop ax
         pop bx
         ret
int7chend: nop
code ends
end start
评论次数(3)  |  浏览次数(688)  |  类型(汇编实验) |  收藏此文  | 

[  xiaochong   发表于  2008-03-28 12:52  ]

写的不错,注释也很详细。博主该做课设2了吧? 加油!

[  xiaochong   发表于  2008-03-28 13:05  ]

mov word ptr es:[7ch*4],200h  
       mov word ptr es:[7ch*4+2],0         ;//设置向量表 
-----------------
博主在设置向量表需要用cli ,sti 将其保护起来,否则有潜在的风险,具体的参考,P271页最下面的一段话

[  atel   发表于  2008-03-28 17:41  ]

多谢提醒.搞的太急了.

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