Помогите разрулить след. функцию (самописанную) и её использование
Код:
//cl - start seg, al - segs, ch - cylinder, es:di - dest
read_cyl:
pusha
push %ax
push %es
push $TEMP_SECTOR
pop %es
xor %dx,%dx
xor %bx,%bx
mov $0x02,%ah
int $0x13
//:On diskette reads, this function stops a multi-sector read at
//:the last sector in a track.
//Example all read cl = 10, al = 9, sum of read
add %al,%cl
dec %cl
cmp $18,%cl
jne copy_block
imul $0x70,%ax,%es
mov $18,%cl
mov $1,%al
mov $0x02,%ah
int $0x13
lDebug: jmp lDebug
copy_block:
pop %es
mov $TEMP_SECTOR,%ax
mov %ax,%ds
xor %si,%si
pop %cx
xor %ch,%ch
imul $0x80,%cx
cld
rep movsd
popa
ret
И вот использование
Код:
///////////////////////////////////
//
//Read cylinders of boot device
//
///////////////////////////////////
//Copy block from 0x500 to 0x10000-0x92800
//(522Kbytes) 512(bytes)*18(sectors)*58(cylinders)-1(Boot Sector)
xor %ch,%ch
//Read first cylinder
mov $SYS_SEG,%ax
mov %ax,%es
xor %di,%di
mov $0x02,%cl
mov $17,%al
call read_cyl
mov $SYS_SEG,%ax
mov $0x01,%cl
mov $0x12,%al
xor %dx,%dx
read_cyls:
add $0x900,%ax
mov %ax,%es
call read_cyl
inc %dx
cmp $CYLINDERS,%dx
jne read_cyls
//Go to protected mode
Прошу не ругать строго. Я тока перешел на Линукс и тем более тока начал использовать gas.