|
以下是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 |
|