+ mov %ax, %cx
+ # save the remainder in ax
+ mov %dx, %ax
+ # head in dh
+ mov %cl, %dh
+ and $1, %dh
+ # cylinder (track/2) in ch [0-7] and cl[6,7]<-[8,9]
+ rol $7, %cx
+ ror $2, %cl
+ and $0xc0, %cl
+ # sector num cl[0-5] is sidx % sectors_per_track (saved in ax)
+ inc %al
+ or %al, %cl
+ # ah = 2 (read), al = 1 sectors
+ mov $0x0201, %ax
+ movb drive_number, %dl
+ int $0x13
+
+ # increment es:bx accordingly (advance es if bx overflows)
+ add $512, %bx
+ jno 0f
+ mov %es, %ax
+ add $4096, %ax
+ mov %ax, %es