Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2012, 14:33   #1
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию Nasm, реальная загрузка MyОС.

Здравствуйте.
Действовал по инструкции http://mikeos.berlios.de/write-your-own-os.html#firstos
Все нормально, в эмуляторе все работает, но при записи на диск ничего не происходит. Т.е. на стадии, когда должно выводиться сообщение, комп просто "виснет". Добавить больше нечего, тк действовал чисто в соответствии с инструкциями. И ничего не выводит, и не грузится дальше. В чем проблема? Как все-таки в реалке запустить? И есть ли возможность скомпилить данный пример без граба? Все попытки редактирования обломались)
P.S. Записывать образ пробовал через UltraISO Windows'а. Через линь даже заведомо рабочие загрузчики не записывались(либо записывались, но ничего не грузилось).
(Ubuntu, qemu, nasm)

Последний раз редактировалось Любопытный человек; 14.01.2012 в 14:37.
Любопытный человек вне форума Ответить с цитированием
Старый 14.01.2012, 15:03   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы обратили внимание что это загрузчик с флопика?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.01.2012, 15:36   #3
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию

Да, обратил. Но следующий код работает ведь с диском:
Код:
BITS 16

start:
	mov ax, 07C0h		; Set up 4K stack space after this bootloader
	add ax, 288		; (4096 + 512) / 16 bytes per paragraph
	mov ss, ax
	mov sp, 4096

	mov ax, 07C0h		; Set data segment to where we're loaded
	mov ds, ax


	mov si, text_string	; Put string position into SI
	call print_string	; Call our string-printing routine

	jmp $			; Jump here - infinite loop!


	text_string db 'This is my OS', 0


print_string:			; Routine: output string in SI to screen
	mov ah, 0Eh		; int 10h 'print char' function

.repeat:
	lodsb			; Get character from string
	cmp al, 0
	je .done		; If char is zero, end of string
	int 10h			; Otherwise, print it
	jmp .repeat

.done:
	ret


	times 510-($-$$) db 0	; Pad remainder of boot sector with 0s
	dw 0xAA55		; The standard PC boot signature
И я так же думал, что граб, реализованный в статье, работает и с диском, и с дискетой. Я знаю про MBR и его "прелести", но помечтал о загрузке ядра с диска Почему же загрузчик статьи не хочет грузиться с диска? И получается тут 2 варианта: либо грузись с флоппи, либо реализуй MBR?
Любопытный человек вне форума Ответить с цитированием
Старый 14.01.2012, 15:47   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

нет не работает, этот код работает с памятью и прерыванием биос для вывода на экран строки.
весь этот код автоматически грузиться биосом в память.(с дискеты)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.01.2012, 16:35   #5
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию

Как код работает, я понимаю) Но в чем специфичность кода? Что не дает ему загружаться с диска, как код из поста #3?

Даже не это главное, пробема в том, как скомпилить все так, чтобы img стал ровен 1.44 мб. Если юзать способ указанный там - создать файл определенного размера и пихать его в образ со всеми файлами, то это хрен попадешь размером да и мучений столько. Как сделать конечный образ нужного размера, чтобы можно было сразу его записывать на дискету 1.44?

Последний раз редактировалось Stilet; 24.01.2012 в 19:20.
Любопытный человек вне форума Ответить с цитированием
Старый 14.01.2012, 18:26   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

обратите внимание на конструкцию times.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.01.2012, 18:48   #7
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию

А не могли бы вы продемонстрировать или подсказать куда именно эту конструкцию записать, чтобы конечный образ стал ровно 1.44 м?
Любопытный человек вне форума Ответить с цитированием
Старый 14.01.2012, 22:35   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в конце:
Код:
times 1474560-($-$$) db 0
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.01.2012, 08:34   #9
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию

В конце чего?
Любопытный человек вне форума Ответить с цитированием
Старый 15.01.2012, 08:55   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

исходника естественно
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер(NASM). Как оформить цикл "while" в NASM-е? Зелёный Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 10.06.2011 16:04