LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1243|回复: 2

一段代码,有些地方看不懂...

[复制链接]
发表于 2003-8-11 17:21:55 | 显示全部楼层 |阅读模式
以下是Linux2.4.18源代码中boot.S的一段代码,是检测每磁道扇区数的

movw $disksizes, %si # table of sizes to try
probe_loop:
lodsb
cbtw # extend to word
movw %ax, sectors
cmpw $disksizes+4, %si
jae got_sectors # If all else fails, try 9

xchgw %cx, %ax # %cx = track and sector
xorw %dx, %dx # drive 0, head 0,标志位cf=0
movw $0x0200, %bx # address = 512, in INITSEG (%es = %cs)
movw $0x0201, %ax #ah=0x02,al=0x01,为什么只读一个扇区,应该读sectors个扇区才对
int $0x13
jc probe_loop # 由于xor指令会令CF=0,该处总是不跳,怎么会这样?应该检测int 0x13是否正确返回决定跳转,可好像没有检测,怎样知道是否是正确的扇区数?

got_sectors:
。。。。
disksizes: .byte 36, 18, 15, 9
 楼主| 发表于 2003-8-12 15:39:31 | 显示全部楼层
一个问题解决,int 13调用会影响CF位。(我原来的资料不全,说int不会改PSW,而那本破书上的中断表上所有中断的返回值都不影响PSW)
但我还不理解为什么只读一个扇区,做做样子也要选18(1.44M)啊
 楼主| 发表于 2003-8-14 09:17:54 | 显示全部楼层
对不起,解决了
CL=sectors,这是起始读的扇区
问一下:AH=0x08,int 13能否直接取得扇区数啊

PS:幸亏没在这里止步不前,纠缠不休,有时会犯迷糊,记下,跳过,过一段时间回头再看,你会发现问题原来很简单,只是忽略了某些东西罢了,一个变量,路径错了等等,其实都无伤大雅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表