2013-08-22 1 views
0

Я пытаюсь загрузить 2-й сектор гибкого дисказагрузить 2-й сектор из загрузчика

Я тестирую этот код с помощью fasm 1.7 и windows 7, VMware. сделать файл образа дискеты, я использовал dd от Ubuntu 13.04 Я также использую dd писать .bin в .img

вот мой код

org 0x7c00 

;load 2nd sector to physical ram address 0xf00 
;(load '7' to 0xf00) 
mov ah, 02h 
mov al, 1 
mov ch, 0 
mov cl, 2;1~63 
mov dh, 0 
mov dl, 0 
mov bx, 0xf00 
push 0 
pop es 
int 13h 

;check whether it is loaded correctly 
;by printing a ascii character in 0xf00 
mov ah,0fh 
int 10h 
mov ah,0ah 
mov al, [0xf00]; 
mov cx, 1 
int 10h 

;pause 
jmp $ 

times 510-($-$$) db 0h 
dw 0xaa55 

second_sector: 
db '7' 

результат = не печатать «7» на всех то, что неправильно со мной? благодаря

+0

Вы уверены, что есть '7' на' 0f00h'? Ваш 'second_sector', похоже, не находится по этому адресу. – lurker

+0

с использованием ah 02h и int 13h, я думаю, что загружаю second_sector в 0xf00. не могли бы вы рассказать мне немного больше? –

+4

'mov al, [0xf00]' неявно '[ds: 0xfoo]'. Вы явно произвели 'es' 0 для чтения, но' ds' является «неизвестным». Попробуйте это исправить. –

ответ

0

Франк Котлер является правильным в его оценке, что проблема с линией:

mov al, [0xf00]; 

В отсутствие сегмента будучи установленным, [0xf00] неявно [DS: 0xf00]. В этом ответе StackOverflow я даю несколько general bootloader development tips. Совет № 1:

Когда BIOS прыгает в код, вы не можете полагаться на CS, DS, ES, SS, SP регистры, имеющие действительные или ожидаемые значения. Они должны быть настроены на соответственно при запуске загрузчика. Вы можете гарантировать только , что ваш загрузчик будет загружен и запущен с физического адреса 0x00007c00 и что номер загрузочного диска загружается в регистр DL .

Вы установите ES в 0:

push 0 
pop es 

У вас есть возможность явного задания сегментный регистр на операнд памяти, как это:

mov al, [es:0xf00] 

Или настройки DS - 0 при запуске. Удалить эти:

push 0 
pop es 

И добавить это в верхней части кода:

xor ax, ax ; Zero out ax 
mov es, ax 
mov ds, ax 

Вы не должны считать, у вас есть действующий SS: SP (стек) при запуске. Рекомендуется установить пакет вручную. См. Ссылку на мой ответ Stackoveflow, упомянутый ранее для примера.

Смежные вопросы