Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузчик и ядро ОС, Проблема с выводом символа на экран 
V
    Опции темы
Merlin27
  Дата 1.10.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2006

Репутация: нет
Всего: нет



Здравствуйте.
Вобщем в универе изучаю создание ОС. Загрузчик нам дали.... причем он взят вот отсюда
http://www.codenet.ru/progr/os/step7.php

Я написал ядро. Чтото типа "Hello world!". Там просто выводилась строка.

Потом для следующих заданий мне понадобилось выводить строку посимвольно. Так вот применял следующие функции БИОСа:
int 10h  09h   
int 10h 0eh
int 10h 0ah

Когда запускаю ядро под виндой, то все нормально. Когда задаю код символа в al вручную - тоже все выводит. Но когда пытаюсь брать код следующего символа из памяти (где хранится строка), то при загрузке такого ядра как ОС - с дискеты при помощи загрузчика - выводится какаято белиберда (причем тот же код в винде работает нормально). В итоге на экране вместо "test" выводится вот это "K!! " вобщем левые какието символы smile.
Не могу понять в чем дело.

Под виндой работает. С дискеты - нет. Причем строки командами int 10h 1301h и т.п. нормально выводит.

На всякий случай приведу код своего "ядра" smile
Код

IDEAL
MODEL TINY
DATASEG

mes    db    "test",0

CODESEG
org 100h

Start:
    mov cx,4
    lea si,[mes]
    mov ah,0eh

m1:    lodsb
    int 10h
    loop m1
    
    int 20h
    
END Start



Бьюсь уже 2 дня. Понять не могу в чем дело. Подскажите плиз. 
PM MAIL   Вверх
dumb
Дата 1.10.2006, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 4
Всего: 158



Код

;...
Start:
 push cs
 pop ds
 cld
 ...

PM MAIL   Вверх
Merlin27
Дата 2.10.2006, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2006

Репутация: нет
Всего: нет



Да.. Я тоже потом додумался smile Оказалось функции вывода символов работают с сегментом DS а вывода строк ES. При запуске под виндой они совпадают, а  при загрузке загрузчиком нормально инициализируется только ES.  smile 

Эх.. че ж я раньше не додумался то  smile 
PM MAIL   Вверх
dumb
Дата 2.10.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 4
Всего: 158



Цитата(Merlin27 @  2.10.2006,  19:07 Найти цитируемый пост)
Оказалось функции вывода символов работают с сегментом DS а вывода строк ES

эм.. странная фраза какая-то...
вобщем дела обстоят так: загрузка строк(lods) - из ds:si, запись(stos) - в es:di.
PM MAIL   Вверх
Merlin27
Дата 26.10.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2006

Репутация: нет
Всего: нет



dumb
Да я это и хотел сказать smile
Просто int 10h 1301h для вывода строк использует es, а для lodsb нужен был ds smile 
PM MAIL   Вверх
Dude03
Дата 26.10.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.4.2006

Репутация: нет
Всего: 6



Цитата(Merlin27 @  26.10.2006,  10:19 Найти цитируемый пост)
Просто int 10h 1301h для вывода строк использует es

Без сомнения, но какое это для тебя имеет значение. Ты же используешь прерывание.
PM MAIL   Вверх
Merlin27
Дата 26.10.2006, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2006

Репутация: нет
Всего: нет



А очень просто smile Я сначала выводил строку этой функцией и все работало. Про DS я вообще забыл. А вот символ ну никак не мог вывести на экран, причем символ который находится именно в памяти а не задается в коде программы явно. Путало мне все это дело что при запуске в винде все было ок - DS был равен ES. Вобщем невнимательность причина всего smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0837 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.