OSDev http://osdev.su/ |
|
линковка ядра http://osdev.su/viewtopic.php?f=6&t=753 |
Страница 1 из 1 |
Автор: | Stalker [ 12 июн 2013, 09:27 ] | ||
Заголовок сообщения: | линковка ядра | ||
Есть С-код который должен выводить строку на екран Код: void write_string( int colour, const char *string ) { volatile char *video = (volatile char*)0xB8000; while( *string != 0 ) { *video++ = *string++; *video++ = colour; } } c_main() { while(1) write_string( 0, "string" ); } и есть асм-код который должен передать управление с-коду Код: format ELF public _start extrn _c_main section ".text" executable _start: call _c_main ;cli ;hlt jmp 0xFFFF:0 собираю ядро таким макаром Код: fasm fkernel.asm fkernel.o gcc -c -m32 -ffreestanding -o main.o main.c local\i686-elf\bin\ld --oformat=binary -melf_i386 -T script.ld -o kernel.bin fkernel.o main.o @pause и вот кусок бутсектора который грузит ядро в память и прыгает на него Код: Kernel: mov ax,0000h mov es,ax mov bx,500h mov ch,0 ;номер цилиндра - 0 mov cl,02h ;начальный сектор - 2 mov dh,0 ;номер головки - 0 mov dl,80h ;жесткий диск - 80h mov al,04h ;кол-во читаемых секторов 4 mov ah,02h int 13h jmp 0000:0500h Не пойму в чём ошибка, но такое чувство что не туда загружает ядро
|
Автор: | Yoda [ 12 июн 2013, 14:08 ] |
Заголовок сообщения: | Re: линковка ядра |
GCC компилирует исходник в 32-битный код. А где же перевод процессора в защищённый режим? |
Автор: | Stalker [ 12 июн 2013, 16:08 ] |
Заголовок сообщения: | Re: линковка ядра |
а заставить его генерировать 16-битный код никак нельзя? не хочу ещё в PM уходить |
Автор: | pavia [ 12 июн 2013, 16:49 ] |
Заголовок сообщения: | Re: линковка ядра |
Насколько помню нет. 16 бит код могут компилировать OpenWatcom, Borland C++ 5.0, MSC++ до 4 версии. |
Автор: | Yoda [ 13 июн 2013, 02:51 ] |
Заголовок сообщения: | Re: линковка ядра |
Ещё TurboC. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |