OSDev

для всех
Текущее время: 02 май 2024, 18:52

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: GNU Assebmler и бут сектор
СообщениеДобавлено: 18 авг 2007, 18:09 

Зарегистрирован: 12 авг 2007, 20:18
Сообщения: 3
Помогите разрулить след. функцию (самописанную) и её использование

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: GNU Assebmler и бут сектор
СообщениеДобавлено: 18 авг 2007, 18:19 

Зарегистрирован: 12 авг 2007, 20:18
Сообщения: 3
Пока с бубном попрыгаю. может поможет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: GNU Assebmler и бут сектор
СообщениеДобавлено: 18 авг 2007, 18:27 

Зарегистрирован: 02 май 2007, 14:25
Сообщения: 126
Ну, мультисекторное чтение при помощи дискового сервиса, скорее всего для флоппа.
Вот тут усё повисает:
Код:
lDebug: jmp lDebug

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: GNU Assebmler и бут сектор
СообщениеДобавлено: 18 авг 2007, 18:36 

Зарегистрирован: 12 авг 2007, 20:18
Сообщения: 3
Ну читать можно в первые 64Кб вроде// и поэтому надо скопить в темп/ затем оттуда копировать в реальный буфер
А на этот вис не обращайте внимания// это я для отладки тормозил тут чтобы регистры посмотреть


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: GNU Assebmler и бут сектор
СообщениеДобавлено: 20 авг 2007, 18:06 

Зарегистрирован: 02 май 2007, 14:25
Сообщения: 126
Проблема оказалась гораздо проще, чем казалась :). Просто не хватало нормальной доки по дисковому сервису BIOS ;).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB