Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

boot файл написал, ЧТО ДАЛЬШЕ??

47K
07 января 2011 года
BOTOKILLER
38 / / 16.11.2010
народ помогите, я написал на ассемблере самый примитивный "хело ворлд"
ассемблировал в БИН файл - а что делать дальше !!?? как его запихнуть в бут сектор образа???? кучу прог перепробовал - ничего не выходит!
напишите что и как делать чтобы получить загрузочный образ ISO в котором мой файл будет в бут секторе, желательно поподробнее

на всекий случай вот мой код(ФАСМ)


use16
org 7C00h

BEGIN:
mov ah, 09h
mov dx, msg
int 21h
xor ax, ax
jmp INPUT

INPUT:
INT 16h
sub al, 30h
mov ah, 0h
PUSH AX
cmp sp, 0FFFAh
jz FINISH
jnz BEGIN

FINISH:
pop ax
pop bx
mov ah, bl
add al, ah
add al, 30h
mov ah, 0Eh
int 10h
int 20h


msg db "Enter number:$"

times 459 nop ; это чтобы программа была ровно 512 байт


за ответы заранее спасибо
360
07 января 2011 года
P*t*
474 / / 15.02.2007
1) Последние 2 байта должны быть 55h и 0aah (чтобы комп понял, что это загрузчик). Так что замени
times 459 nop ;
на
times 457 nop ;
db 55h, 0aah

2) http://www.codenet.ru/progr/asm/boot-loader.php

3) Бут-сектор - это тупо первые 512 байт образа. Если больше на диск ничего записывать не надо, то твой bin файл - это и есть образ. Записать его на диск можно разными способами, но пожалуй удобнее всего вместо этого запустить в эмуляторе: VirtualBox, Qemu и т.д.

4) *.iso - это скорее не образ диска, а файл, в котором хранится файловая система в формате ISO, используемая для дисков. В твоем случае назвать получившийся образ iso-образом нельзя т.к там не будет этой файловой системы.
47K
07 января 2011 года
BOTOKILLER
38 / / 16.11.2010
Цитата: P*t*

3) Бут-сектор - это тупо первые 512 байт образа. Если больше на диск ничего записывать не надо, то твой bin файл - это и есть образ. Записать его на диск можно разными способами, но пожалуй удобнее всего вместо этого запустить в эмуляторе: VirtualBox, Qemu и т.д.

4) *.iso - это скорее не образ диска, а файл, в котором хранится файловая система в формате ISO, используемая для дисков. В твоем случае назвать получившийся образ iso-образом нельзя т.к там не будет этой файловой системы.



последние 2байта исправил спасибо

а вот просто так дать на выполнение VirtualBox неполучается - выбрал файл оно его нпропускает ссылаясь на ошибку открытия а QEMU просто останавливается и ничего не делает


что первые 512 байт на диске - то понятно а вот как туда впихнуть мою программу......

360
07 января 2011 года
P*t*
474 / / 15.02.2007
Делать загрузчик на cd диске я не пробовал, возможно я ошибаюсь и он не в начале находится.

Можешь попробовать запустить с дискеты.
В qemu это выглядит так: "qemu -fda boot.bin"
47K
07 января 2011 года
BOTOKILLER
38 / / 16.11.2010
не идет все равно
360
07 января 2011 года
P*t*
474 / / 15.02.2007
Гм. Посмотрел собственно твой код.
Ты используешь прерывание 0х21 - это прерывание DOS и в загрузчике работать не будет.

http://www.codenet.ru/progr/dos/

На экран нужно выводить через 0x10 (http://www.codenet.ru/progr/dos/int_0009.php), либо через прямую запись в видеопамять (начинается с 0xb8000, если не ошибаюсь).

Помимо этого часто бывает, что неправильно настроен сегмент данных и указатель на строку ("Enter number:$") ссылается мимо.
Соответственно советую:
1) В начале программы использовать какой-нибудь вызов, не принимающий в параметры казателей, чтобы увидеть что программа запускается. Например очистку экрана.
2) Проинициализировать ds:
mov ax, 0
mov ds, ax
47K
07 января 2011 года
BOTOKILLER
38 / / 16.11.2010
вот так норм??


use16
org 7C00h

BEGIN:
mov ah, 0Eh
mov al, 'E'
int 10h
mov al, 'n'
int 10h
mov al, 't'
int 10h
mov al, 'e'
int 10h
mov al, 'r'
int 10h
mov al, ' '
int 10h
mov al, 'n'
int 10h
mov al, 'u'
int 10h
mov al, 'm'
int 10h
mov al, 'b'
int 10h
mov al, 'e'
int 10h
mov al, 'r'
int 10h
mov al, ':'
int 10h
xor ax, ax
jmp INPUT

INPUT:
INT 16h
sub al, 30h
mov ah, 0h
PUSH AX
cmp sp, 0FFFAh
jz FINISH
jnz BEGIN

FINISH:
pop ax
pop bx
mov ah, bl
add al, ah
add al, 30h
mov ah, 0Eh
int 10h
int 20h



times 424 nop
db 55h, 0AAh


в QEMU не идет все равно.........
360
07 января 2011 года
P*t*
474 / / 15.02.2007
Должно работать.
Во всяком случае у меня вот такой код на nasm работает:
 
Код:
mov ah, 0xe
        mov al, 'E'
        mov bl, 1
        int 0x10
loop:        jmp loop        ;  чтобы прога зациклилась и не выполнялся последующий мусор в памяти

Выводит букву E.

1) При компиляции нужно указывать бинарный формат
2) Qemu считывает файлы по 512 байт, так что если размер файла меньше 512, работать ничего не будет.
Похоже у тебя здесь неправильный размер: "times 424 nop". Проверь, что файл ровно 512 байт занимает.
В приведенном выше примере я просто к получившемуся файлу (11 байт) добавлял еще 501 произвольный байт.
0x55, 0xaa у меня нет, поэтому для qemu нужно указывать параметр -no-fd-bootchk:
qemu -no-fd-bootchk -fda prog
47K
07 января 2011 года
BOTOKILLER
38 / / 16.11.2010
при компиляции написало что 512 байт
360
07 января 2011 года
P*t*
474 / / 15.02.2007
Какая последняя строчка, которую показывает qemu при попытке запуска?
Программа вообще ничего не выводит?
Не знаю, что еще можно посоветовать.
Разве что убрать int 20h в конце - это тоже прерывание DOS. Вместо него лучше просто зациклить программу (loop: jmp loop).
47K
07 января 2011 года
BOTOKILLER
38 / / 16.11.2010
use16
org 7C00h

BEGIN:
mov ah, 0Eh
mov al, 'E'
int 10h
mov al, 'n'
int 10h
mov al, 't'
int 10h
mov al, 'e'
int 10h
mov al, 'r'
int 10h
mov al, ' '
int 10h
mov al, 'n'
int 10h
mov al, 'u'
int 10h
mov al, 'm'
int 10h
mov al, 'b'
int 10h
mov al, 'e'
int 10h
mov al, 'r'
int 10h
mov al, ':'
int 10h
xor ax, ax
jmp INPUT

INPUT:
INT 16h
sub al, 30h
mov ah, 0h
PUSH AX
cmp sp, 0FFFAh
jz FINISH
jnz BEGIN

FINISH:
pop ax
pop bx
mov ah, bl
add al, ah
add al, 30h
mov ah, 0Eh
int 10h
OLOLOOP:
jmp OLOLOOP


times 424 nop
db 55h, 0AAh

всеравно не пашет ((
походу без образа тут ничего не сделать((
360
07 января 2011 года
P*t*
474 / / 15.02.2007
Покажи команду компиляции и команду запуска. И напиши наконец, как выражается то, что оно не работает.
47K
07 января 2011 года
BOTOKILLER
38 / / 16.11.2010
вот скрины


выражается в том что оно ничего вообще не делает, только когда что-то нажмешь обновляет последние 3 строчки
360
07 января 2011 года
P*t*
474 / / 15.02.2007
Нужно, чтобы qemu грузилась с дискеты.
Но у тебя подключен еще и образ CD (там все еще записана неправильная программа?) и по умолчанию загрузка происходит с него.
Либо отключи образ CD, либо добавить опцию "-boot a" для изменения стандартного порядка загрузки.
47K
07 января 2011 года
BOTOKILLER
38 / / 16.11.2010
Заработало!!!
СПС большое!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог