OSDev
http://osdev.su/

GNU Assebmler и бут сектор
http://osdev.su/viewtopic.php?f=6&t=109
Страница 1 из 1

Автор:  enrix [ 18 авг 2007, 18:09 ]
Заголовок сообщения:  GNU Assebmler и бут сектор

Помогите разрулить след. функцию (самописанную) и её использование

Код:
//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.

Автор:  enrix [ 18 авг 2007, 18:19 ]
Заголовок сообщения:  Re: GNU Assebmler и бут сектор

Пока с бубном попрыгаю. может поможет

Автор:  sadko [ 18 авг 2007, 18:27 ]
Заголовок сообщения:  Re: GNU Assebmler и бут сектор

Ну, мультисекторное чтение при помощи дискового сервиса, скорее всего для флоппа.
Вот тут усё повисает:
Код:
lDebug: jmp lDebug

Потом после повисания вроде бы идёт код копирования прочитанного по адресу TMP_SECTOR. Но зачем?

Автор:  enrix [ 18 авг 2007, 18:36 ]
Заголовок сообщения:  Re: GNU Assebmler и бут сектор

Ну читать можно в первые 64Кб вроде// и поэтому надо скопить в темп/ затем оттуда копировать в реальный буфер
А на этот вис не обращайте внимания// это я для отладки тормозил тут чтобы регистры посмотреть

Автор:  sadko [ 20 авг 2007, 18:06 ]
Заголовок сообщения:  Re: GNU Assebmler и бут сектор

Проблема оказалась гораздо проще, чем казалась :). Просто не хватало нормальной доки по дисковому сервису BIOS ;).

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/