OSDev http://osdev.su/ |
|
Текстовый вывод http://osdev.su/viewtopic.php?f=6&t=356 |
Страница 1 из 2 |
Автор: | tommi-boy [ 29 ноя 2010, 13:13 ] |
Заголовок сообщения: | Текстовый вывод |
Набрал код, запускаю его из чистой дос, но ничего не происходит, экран совершенно чистый. То ли лыжи не едут, то ли у меня с головой чего. Подскажите пожалуйста. Код: void write_string(int colour, const char *string)
{ char *video=(char*)0xB8000; while(*string!=0) { *video=*string; string++; video++; *video=colour; video++; } } int main() { write_string(7, "Hello world!!!"); getch(); return 0; } |
Автор: | qeos [ 29 ноя 2010, 14:04 ] |
Заголовок сообщения: | Re: Текстовый вывод |
мб не та страница видео памяти? попробуй дизасемблить.. или отладчиком его.. |
Автор: | tommi-boy [ 29 ноя 2010, 14:12 ] |
Заголовок сообщения: | Re: Текстовый вывод |
Пробовал менять страницы, ставил ему адреса 0xB9000 0xBА000, всё равно никакого эффекта, а дизассемлить и отладчиком ходить под досом не очень удобно. |
Автор: | qeos [ 29 ноя 2010, 15:02 ] |
Заголовок сообщения: | Re: Текстовый вывод |
Не знаю как твой компилятор преобразует адрес, но как я понимаю под досом не расширеный режим, а значит адресация должна быть сегмент:смещение.. Надо тебе дебагером посмотреть. По идее ссылаться должен на 0b80:0000 если я ничего не путаю.. |
Автор: | SII [ 29 ноя 2010, 16:14 ] |
Заголовок сообщения: | Re: Текстовый вывод |
Ссылаться должен на B800:0000. Что же касается причины, надо дизассемблировать выполняемый файл и в нём смотреть, что там происходит -- это самый надёжный и верный путь. |
Автор: | Himik [ 29 ноя 2010, 16:52 ] |
Заголовок сообщения: | Re: Текстовый вывод |
Как вуже сказали, в чистом ДОС 16-битная адресация, а число 0xB8000 умещается только в 32-битном виде. Соответственно, надо использовать 32-битный расширитель, например dos4gw. Просмотри ключи сборки проекта, там найдёшь какой-нибудь расширитель. |
Автор: | SII [ 29 ноя 2010, 17:09 ] |
Заголовок сообщения: | Re: Текстовый вывод |
Но это будет уже не чистый ДОС :) |
Автор: | tommi-boy [ 29 ноя 2010, 17:54 ] |
Заголовок сообщения: | Re: Текстовый вывод |
0xB8000 прекрасно умещается в 16тибитном режиме, поскольку на шине в 16тибитном режиме 20 разрядов, а значит максимальный адрес 0xfffff а это больше чем 0xb8000, да и если написать заменитель загрузочного сектора на ассемблере и писать по тому же адреса, значит дело либо в операционке которая перед тем грузиться, либо в том что компилер коряво компилит, вот я и хочу знать что именно. Потому что писать на ассемблере мне не в кайф. |
Автор: | qeos [ 29 ноя 2010, 18:01 ] |
Заголовок сообщения: | Re: Текстовый вывод |
читай мануал по 8086.. метод адресации |
Автор: | tommi-boy [ 29 ноя 2010, 18:30 ] |
Заголовок сообщения: | Re: Текстовый вывод |
я их прочитал поболее твоего, будут конкретные замечания или нет? |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |