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

我的博客

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

[2009-04-13 19:21] 实验17 编写包含多个功能子程序的中断例程

安装一个新的中断例程int 7ch中断例程,实现通过逻辑扇区号对软盘进行读写。
  参数说明:
(1)用ah寄存器传递功能号:0表示读,1表示写;
(2)用dx寄存器传递要读写的扇区的逻辑扇区号;
(3)用es:bx指向存储读出数据或写入数据的内存区。

对于这个实验,真是苦于没软区,对硬盘的读写又不行!就先闪到这吧!

程序如下:
  assume cs:code
code segment
 beg:  jmp strt

       ac db 16 dup (0)        ;用于保存数据供int 13h用,  依次为 读/写,面号,磁道号,扇区号

 strt: add ah,2
       psuh ax        ;保存ax 8月……改
       mov ac,ah      ;读/写操作保存到ac段中
        mov ax,dx
       mov dx,0
       mov di,1440
       div di
       mov ac[1],al   ;面号保存
       mov ax,dx
       mov dx,0
       mov di,18
       div di

       mov ac[2],al  ;磁道号保存
       add dl,1
       mov ac[3],dl  ;扇区号保存 
       pop ax           ;8月改……
       mov ah,ac     ;读/写
       mov dh,ac[1]  ;面号取出
       mov ch,ac[2]  ;磁道号取出
       mov cl,ac[3]  ;扇区号取出
       mov dl,0      ;对软件A进行读写!
       
       int 13h
       iret
dmend:nop
start: push cs                        ;安装int 7ch中断
       pop ds
       mov si,offset beg
       mov ax,0
       mov es,ax
       mov di,200h
       mov cx,offset dmend-offset beg
       cld
       rep movsb

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

       mov ax,4c00h
       int 21h
code ends
end start
评论次数(4)  |  浏览次数(1782)  |  类型(汇编作业) |  收藏此文  | 

[  aten   发表于  2009-04-14 13:04  ]

花了一个晚上把实验环境搭好,嘿嘿!
上面的程序在   mov cl,ac[3]  ;扇区号取出
后加一条:     mov al,1      ;设置读取的扇区数,不然会一直读写!
下面是我读取1号扇区的数据:
-d 1414:0
1414:0000  EB 3C 90 4D 53 44 4F 53-35 2E 30 00 02 01 01 00   .<.MSDOS5.0.....
1414:0010  02 E0 00 40 0B F0 09 00-12 00 02 00 00 00 00 00   ...@............
1414:0020  00 00 00 00 00 00 29 9D-11 85 70 4E 4F 20 4E 41   ......)...pNO NA
1414:0030  4D 45 20 20 20 20 46 41-54 31 32 20 20 20 33 C9   ME    FAT12   3.
1414:0040  8E D1 BC F0 7B 8E D9 B8-00 20 8E C0 FC BD 00 7C   ....{.... .....|
1414:0050  38 4E 24 7D 24 8B C1 99-E8 3C 01 72 1C 83 EB 3A   8N$}$....<.r...:
1414:0060  66 A1 1C 7C 26 66 3B 07-26 8A 57 FC 75 06 80 CA   f..|&f;.&.W.u...
1414:0070  02 88 56 02 80 C3 10 73-EB 33 C9 8A 46 10 98 F7   ..V....s.3..F...
-d
1414:0080  66 16 03 46 1C 13 56 1E-03 46 0E 13 D1 8B 76 11   f..F..V..F....v.
1414:0090  60 89 46 FC 89 56 FE B8-20 00 F7 E6 8B 5E 0B 03   `.F..V.. ....^..
1414:00A0  C3 48 F7 F3 01 46 FC 11-4E FE 61 BF 00 00 E8 E6   .H...F..N.a.....
1414:00B0  00 72 39 26 38 2D 74 17-60 B1 0B BE A1 7D F3 A6   .r9&8-t.`....}..
1414:00C0  61 74 32 4E 74 09 83 C7-20 3B FB 72 E6 EB DC A0   at2Nt... ;.r....
1414:00D0  FB 7D B4 7D 8B F0 AC 98-40 74 0C 48 74 13 B4 0E   .}.}....@t.Ht...
1414:00E0  BB 07 00 CD 10 EB EF A0-FD 7D EB E6 A0 FC 7D EB   .........}....}.
1414:00F0  E1 CD 16 CD 19 26 8B 55-1A 52 B0 01 BB 00 00 E8   .....&.U.R......
-d
1414:0100  3B 00 72 E8 5B 8A 56 24-BE 0B 7C 8B FC C7 46 F0   ;.r.[.V$..|...F.
1414:0110  3D 7D C7 46 F4 29 7D 8C-D9 89 4E F2 89 4E F6 C6   =}.F.)}...N..N..
1414:0120  06 96 7D CB EA 03 00 00-20 0F B6 C8 66 8B 46 F8   ..}..... ...f.F.
1414:0130  66 03 46 1C 66 8B D0 66-C1 EA 10 EB 5E 0F B6 C8   f.F.f..f....^...
1414:0140  4A 4A 8A 46 0D 32 E4 F7-E2 03 46 FC 13 56 FE EB   JJ.F.2....F..V..
1414:0150  4A 52 50 06 53 6A 01 6A-10 91 8B 46 18 96 92 33   JRP.Sj.j...F...3
1414:0160  D2 F7 F6 91 F7 F6 42 87-CA F7 76 1A 8A F2 8A E8   ......B...v.....
1414:0170  C0 CC 02 0A CC B8 01 02-80 7E 02 0E 75 04 B4 42   .........~..u..B

[  aten   发表于  2009-04-14 13:16  ]

先在软盘20号逻辑扇区写入全1:
assume cs:code
data segment
   db 512 dup ('1')
data ends
code segment
start:mov ah,1
      mov dx,20
      mov di,data
      mov es,di
      mov bx,0
      int 7ch
      mov ax,4c00h
      int 21h
code ends
end start
然后再反过来将20号扇区的数据读出到data段,结果成功:
assume cs:code
data segment
   db 512 dup ('0')
data ends
code segment
start:mov ah,0
      mov dx,20
      mov di,data
      mov es,di
      mov bx,0
      int 7ch
      mov ax,4c00h
      int 21h
code ends
end start

[  游客   发表于  2009-04-15 09:31  ]

博主马上就要进入综合研究啦。

使用虚拟软盘也可以做的,我直接在电脑上用vfflopy虚拟出软驱和软盘。

[  aten   发表于  2009-08-07 15:50  ]

上面的程序我忘记设置要写入的扇区数了,……-_-~!

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