| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 476 人关注过本帖
标题:【求助】拜托了,求助,几行int 13_8的分析.
只看楼主 加入收藏
nosaybye
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-7-11
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:2 
【求助】拜托了,求助,几行int 13_8的分析.
这是ntfs的dbr,大家看看我分析对了没有。
这个小call是通过int13_ah8来计算一共有多少个扇区么?
俩次的inc是什么意思?

inc ax
inc cx

seg000:7C7B CountSector     proc near               ; CODE XREF: seg000:7C62p
seg000:7C7B
seg000:7C7B var_1           = byte ptr -1
seg000:7C7B g_SetcotNum     = dword ptr  20h
seg000:7C7B g_DirverNumer   = byte ptr  24h
seg000:7C7B
seg000:7C7B                 mov     dl, ds:g_DirverNumer
seg000:7C7F                 mov     ah, 8           ; int13 ah =8读驱动器 dl=80驱动器号码
seg000:7C81                 int     13h             ; DISK - DISK - GET CURRENT DRIVE PARAMETERS (XT,AT,XT286,CONV,PS)
seg000:7C81                                         ; DL = drive number
seg000:7C81                                         ; Return: CF set on error, AH = status code, BL = drive type
seg000:7C81                                         ; DL = number of consecutive drives
seg000:7C81                                         ; DH = maximum value for head number, ES:DI -> drive parameter
seg000:7C83                 jnb     short Sucess    ; cf = 0 jmp
seg000:7C85
seg000:7C85 Error:                                  ; cx 0ffff
seg000:7C85                 mov     cx, 0FFFFh
seg000:7C88                 mov     dh, cl          ; dh ff
seg000:7C8A
seg000:7C8A Sucess:                                 ; CODE XREF: CountSector+8j
seg000:7C8A                 movzx   eax, dh         ; 磁头数
seg000:7C8E                 inc     ax              ; 磁头数加1
seg000:7C8F                 movzx   edx, cl         ; 扇区,柱
seg000:7C93                 and     dl, 3Fh         ; 扇区数
seg000:7C96                 mul     dx              ; 磁头*扇区,dx高位,ax低位
seg000:7C98                 xchg    cl, ch          ; 交换后,ch有高2位,cl有低6位
seg000:7C9A                 shr     ch, 6           ; ch ,只有高2位 cx柱面数
seg000:7C9D                 inc     cx              ; 柱面数加1
seg000:7C9E                 movzx   ecx, cx
seg000:7CA2                 mul     ecx             ; 柱面*(磁头数*扇区)edx高位,eax低位
seg000:7CA5                 mov     ds:g_SetcotNum, eax ; 总扇区数
seg000:7CA9                 retn
seg000:7CA9 CountSector     endp
seg000:7CA9

搜索更多相关主题的帖子: 驱动器 
2012-07-11 14:54
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:20 
我不懂 瞎猜的

DH = maximum value for head number, ES:DI -> drive parameter

一般从0开始 算个数要加1
2012-07-11 15:03
nosaybye
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-7-11
收藏
得分:0 
哦,应该是这样的。
柱面数,和磁道数,都是从零开始的,感谢您。
它这俩次mul,好蒙啊,这段代码是计算总扇区数么?
2012-07-11 15:34
快速回复:【求助】拜托了,求助,几行int 13_8的分析.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047017 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved