. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->使用BIOS进行键盘输入和磁盘读写
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验17 实现代码(王爽老师的讲解是错误的)  [待解决] 回复[ 5次 ]   点击[ 840次 ]  
ruder
[帖 主]   [ 发表时间:2013-05-30 10:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-02 12:37
;--------------------------------------------------------
;  功能 - 读写软盘
;  参数 - (ah) = 功能号 0表示读 1表示写
;         (dx) = 要读写的扇区的逻辑扇区号
;         (es:bx) = 指向存储读出数据或写入数据的内存区
;  返回 - 操作成功 (ah) = 0 (al) = 1
;         操作失败 (ah) = 出错码
;--------------------------------------------------------

read_write_floppy:
    push    cx
    push    dx

    push    ax
    mov     ax, dx
    xor     dx, dx
    mov     cx, 18
    div     cx
    mov     cx, ax
    and     ax, 1
    mov     dh, al      ; dh = 磁头号
    pop     ax
    add     ah, 2       ; ah = 功能号
    mov     al, 1       ; al = 读取的扇区数
    shr     cx, 1
    mov     ch, cl      ; ch = 磁道号
    mov     cl, dl
    inc     cl          ; cl = 扇区号
    mov     dl, 0       ; dl = 驱动器号
    int     013h

    pop     dx
    pop     cx
    ret
ruder
[第1楼]   [ 回复时间:2013-05-30 10:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-02 12:37
我简单说一下错误所在

物理扇区号       逻辑扇区号
------------------------------
0面0道1扇区      0
0面0道2扇区      1
.
.
.
0面0道17扇区     16
0面0道18扇区     17
1面0道1扇区      18  <---- 注意这里,这个是正确的,王爽老师是错误的!
1面0道2扇区      19

实际原因就是换面比换道速度快,所以这么安排!
zjkl19
[第2楼]   [ 回复时间:2014-03-03 19:04 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:6
注册日期:2009-07-15 11:17
高手!这都知道!
hkcmd
[第3楼]   [ 回复时间:2014-12-05 16:45 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-11-19 10:35
我无语,第三版这里没有修改变化,到底谁才是正确的?
feifeiluan2
[第4楼]   [ 回复时间:2015-04-22 10:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-07-22 21:10
可以做个实验,通过往逻辑18扇区写数据,或读数据,再和winhex直接打开软盘看看到底哪个扇区被写了或读出来了,看一下就知道谁对了。。。软驱确实不知道。硬盘是和楼主说的一样,扇区变化最快,磁头/面变化中等。磁道/柱面变化最慢(物理切换,必须移动磁头定位,比较慢)
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved