- [游客] 飘过 06/11 13:31
- [fpamc] 貌似我正在步入你的路线……`(*∩_∩*)′Up!Up! 05/24 07:46
- [782936509] 敢问高手你是什么基础开始学的,我没有基础想学编程可以的吗?很想成为一个编程员,希望多多指教,呵呵 12/24 19:26
- [aten] 上面的程序我忘记设置要写入的扇区数了,……-_-~! 08/07 15:50
- [keyia] 啊,如梦初醒!万分感谢 05/28 01:32
- [aten] 好久没来汇编网了,拿你调试的结果来说吧! F:\dosimg\>debug c0s.exe - 05/26 22:52
- [keyia] keyia:变成游客了 05/22 19:42
- [游客] 向您请教: (8)从上我们可以看出tc.exe把c0s.obj和用户obj文件一同进行连接,生成e 05/22 19:40
- [aten] dw 定义的应该是10个字单元,我写成了8个了!所以答案就成了20H 04/26 22:01
- [aten] 恩,^_^ 04/24 18:36
- [游客] 这个,你的那个安装INT9中断程序的程序有一点错误,以下这个是我改正后的: assume cs:c 10/08 07:28
- [游客] 没想到我想走的路和正在走的路你已经走过一遍了,可以的话请加865650570——凌陶 愿我们在同一 10/07 23:30
- [keyia] 向您请教: (8)从上我们可以看出tc.exe把c0s.obj和用户obj文件一同进行连接,生成 05/22 19:44
[2009-04-13 19:21] 实验17 编写包含多个功能子程序的中断例程
参数说明:
(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
[ 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 ]
上面的程序我忘记设置要写入的扇区数了,……-_-~!