По созданию ОС
Не совсем понятно, что такое консоль. Предположу, что это приложение с консольным интерфейсом.
Это невозможно, загрузчик может только передавать управление далее, для загрузки ОС, которая управляет ресурсами. В том числе и консолью.
Что такое "В DOS"?
А в сабже вообще говорится о создании ОС, так что неясно, GCSoft, что тебе конкретно нужно. Если я угадал и нужно в какой-то ОС запустить консольну программу формата COM, хоть с флешки, хоть с СиДи, то можно попробовать запуститься с KolibriOS. Она вся на FASM написана.
Почти четырёхстопный хорей. Также стоит отметить использование автором таких стилистических и риторических фигур речи, как амплификация и параллелизм. И, безусловно, чувства автора ярко передаюся риторическим восклицанием.
USE16
org 0x7C00
start:
xor eax, eax
xor esi, esi
xor edi, edi
mov ds, ax
mov es, ax
mov bp, 0x7c00
mov ax, 0x0003
int 0x10
mov si, msg_Load
call print_string_16
Begin3:
mov si,filename ;‘¬?e??? ?¬?? a ©«
mov cx,12 ;„«? aaa®??
repe cmpsb ;‘a ??? ?¬ aaa®??
test cx,cx
je endbegin ;…a«? a ?e
add di,cx ;?a®??ai?¬ a«?¤aie?©
add di,32-12 ;i«?¬?a
cmp di,14*512 ;?a®??a? ?®?? ?®ai
jmp filenotfound ;…a«? ?®«ie? - a ©« ? ©¤?
jmp Begin3 ;…a«? ?a ?e
endbegin:
mov dx,[di+14] ;‚ dx ®¬Ґа Є«пбвҐа д ©«
xor di,di ;‘¬ҐйҐЁҐ
push KernelSeg
pop es ;‘ҐЈ¬Ґв
filenotfound:
int 0x10
mov si, err
call print_string_16
print_string_16:
pusha
mov ah, 0x0E
.repeat:
lodsb
cmp al, 0
je .done
int 0x10
jmp short .repeat
.done:
popa
ret
msg_Load db "Hello World!", 0
filename db 'shell.com'
err db 'Error',13,10,'$'
KernelSeg = 0340h ;‘ҐЈ¬Ґвл© ¤аҐб п¤а
mov ah,0
int 16h
times 510-$+$$ db 0
sign dw 0xAA55
times 512-$+$$ db 0
При запуске выдает ошибку. Образ ISO, ВМ VirtualBOX. Что здесь не так?
Почти четырёхстопный хорей. Также стоит отметить использование автором таких стилистических и риторических фигур речи, как амплификация и параллелизм. И, безусловно, чувства автора ярко передаюся риторическим восклицанием.
Да блин это вместо как помочь просто издеваться! А вопрос то не простой!
В дополнение к данным вам ссылкам:
О загрузчике - http://www.codenet.ru/progr/asm/boot-loader.php
О прерываниях DOS и BIOS - http://www.codenet.ru/progr/dos/
Логично, что функции DOS в самом загрузчике и в запущенной им программе работать не будут.
Так что все действия по чтению программы с диска загрузчик будет проводить через прерывания BIOS.
Попробуйте для начала написать загрузчик, который просто выводит один символ на экран - чтобы убедиться, что он работает.
А на kot_ не обижайся - он всегда такой. Он просто не любит плохо сформулированные вопросы.
А черт его знает, почему он не работает. Может вы его неправильно в загрузочный сектор записываете, может быть вы ядро не туда записываете, может быть это уже ядро запускается и не работает - причин может быть много. Из того, что вы написали, невозможно ничего узнать.
И с такими вопросами вам никто не будет помогать. На форуме не любят людей, которые перекладывают свою проблему на чужие плечи.
Надо задавать вопрос так:
Я делал вот это по материалам взятым оттуда-то и ожидал получить вот это.
Но произошло вот так.
Тогда я вставил отладочный вывод и выяснил, что вот в этой строчке не происходит записи значения вон туда.
В описании команды говорится, что она делает так, но получается по другому. Посоветуйте, что можно прочитать на эту тему?
И тогда все вам радостно помогут.
use16
org 0x7C00
start:
xor eax, eax
xor esi, esi
xor edi, edi
mov ds, ax
mov es, ax
mov bp, 0x7c00
mov ax, 0x0003
.repeat:
lodsb
cmp al, 0
je .done
int 0x10
jmp short .repeat
.done:
popa
ret
msg db 'Boot Sector Starting.........................[OK]',13,10,'$'
h db 10,13,10,'$'
mov ah,0
int 16h
times 510-$+$$ db 0
sign dw 0xAA55
times 512-$+$$ db 0
Но стоит добавить комманду print
include 'dos.inc'
use16
org 0x7C00
start:
xor eax, eax
xor esi, esi
xor edi, edi
mov ds, ax
mov es, ax
mov bp, 0x7c00
mov ax, 0x0003
int 21
cls
print msg
.repeat:
lodsb
cmp al, 0
je .done
int 0x10
jmp short .repeat
.done:
popa
ret
msg db 'Boot Sector Starting.........................[OK]',13,10,'$'
h db 10,13,10,'$'
mov ah,0
int 16h
times 510-$+$$ db 0
sign dw 0xAA55
times 512-$+$$ db 0
все тупо зависает! Я не могу понять в чем проблема? Макрос Print:
macro print str
{
mov dx,str
mov ah,9
int 21h
}
Я даже вам об этом уже сказал, но вы не обратили внимания, что, кстати говоря, вас плохо характеризует и уменьшает желание помогать.
Вы используете прерывание 21h.
Если заглянуть по ссылке http://www.codenet.ru/progr/dos/ , которую я вам давал, то можно увидеть, что прерывание 21h - это "Сервис DOS".
Совершенно логично, что он никак не может работать, если программа запущена не из DOS.
P.S Для выкладывания исходного кода есть замечательный тег [сode][/сode]
Вы сначала попробуйте, а потом спрашивайте. С указанием, что именно не получилось, и вашими размышлениями на эту тему.
Увы, ничем не могу помочь.
{
mov ah,0ah
mov al,str
int 10h
}
Неужели так сложно прочитать документацию всё по той же ссылке про прерывания DOS и BIOS?
Для функции 0ah
0aH писать символ в текущей позиции курсора
вход: BH = номер видео страницы
AL = записываемый символ
CX = счетчик (сколько экземпляров символа записать)
Эта функция записывает один символ.
В AL записывай сам символ (не указатель на переменную, а код символа)
В BH надо записать 0, в CX 1.
А на kot_ не обижайся - он всегда такой. Он просто не любит плохо сформулированные вопросы.
как видишь, я редко ошибаюсь - дебилы имеют весьма характерный набор сигнатур и поведенческих характеристик. Поэтому ТС лучше еще раз дать туже ссылку и оставить покоится с миром. И да - на меня можно обижаться, на меня можно не обижаться - мне вобщем то все равно.
как видишь, я редко ошибаюсь - дебилы имеют весьма характерный набор сигнатур и поведенческих характеристик. Поэтому ТС лучше еще раз дать туже ссылку и оставить покоится с миром. И да - на меня можно обижаться, на меня можно не обижаться - мне вобщем то все равно.
Есть две категории людей с неправильно заданными вопросами.
Есть студенты, которые хотят, чтобы все сделали за них,
а есть школьники, которым интересно что-то сделать, но они не умеют ни пользоваться гуглом, ни читать документацию, ни даже ясно выражать свои мысли.
И если с первой категорией все понятно ("ссылка" укажет что им делать), то у второй еще есть шанс научиться. Я сам когда-то давно относился ко второй категории.
Вот теперь у меня тоже заканчивается терпение.
С тобой kot_ уже ссылкой поделился. Для такого запроса - самая подходящая ссылка.
А по существу вопроса - надо искать не про запуск, а про описание формата COM. Но там может мозга не хватить.
2. Загрузить его в память
3. Передать управление на его начало
4. ???
5. Выпить чашечку кофе, принять ванну.
2. Загрузить его в память
3. Передать управление на его начало
4. ???
5. Выпить чашечку кофе, принять ванну.
Извините конечно, но я не знаю как это осуществить)
Извините конечно, но я не знаю как это осуществить)
Извини конечно, но это твои проблемы.
Ну вы то помочь можете? Ну кто-нибудь здесь помочь может?
Как легендарный гудвин.