OSDev http://osdev.su/ |
|
Загрузчик! http://osdev.su/viewtopic.php?f=6&t=785 |
Страница 6 из 6 |
Автор: | novice [ 25 авг 2013, 17:35 ] |
Заголовок сообщения: | Re: Загрузчик! |
значение вернулось, причиной была 1 команда nop для BPB |
Автор: | novice [ 25 авг 2013, 17:57 ] |
Заголовок сообщения: | Re: Загрузчик! |
Чтение успешно удалось товарищи! |
Автор: | Himik [ 25 авг 2013, 18:11 ] |
Заголовок сообщения: | Re: Загрузчик! |
Суть проблемы не в nop, в такой простой команде ошибки быть не может. Проблема в "jmp start", которая может кодироваться операндами различного размера, при этом в программе не уточнён размер. В моём примере уточнён. |
Автор: | phantom-84 [ 25 авг 2013, 18:49 ] |
Заголовок сообщения: | Re: Загрузчик! |
Вообще-то в данном конкретном случае невалидный BPB+ по идее не должен приводить к ошибке чтения, если бутсектор переписывался полностью. Кстати fasm за счет многопроходности может сжимать в том числе и переходы вперед, хотя конечно всегда лучше указывать на необходимость использования короткой инструкции явно (jmp short start). Когда пишется только полезный код, незачем прописывать значения полей BPB+ в исходниках, например: Код: org 7C00h Кстати я часто пакую загрузчики, частично или полностью исключая BPB+ из бинарника (начиная со смещения 3). Для этого достаточно переопределить BS_SIZE из приведенного выше исходника (указать значение 3).
jmp short @f nop rb BS_SIZE-3 @@: ... |
Автор: | novice [ 25 авг 2013, 18:53 ] |
Заголовок сообщения: | Re: Загрузчик! |
phantom-84 писал(а): Вообще-то в данном конкретном случае невалидный BPB+ по идее не должен приводить к ошибке чтения, если бутсектор переписывался полностью. Кстати fasm за счет многопроходности может сжимать в том числе и переходы вперед, хотя конечно всегда лучше указывать на необходимость использования короткой инструкции явно (jmp short start). ошибка out of range |
Автор: | novice [ 25 авг 2013, 18:55 ] |
Заголовок сообщения: | Re: Загрузчик! |
Himik писал(а): Суть проблемы не в nop, в такой простой команде ошибки быть не может. Проблема в "jmp start", которая может кодироваться операндами различного размера, при этом в программе не уточнён размер. В моём примере уточнён. Да согласен проблема не в nop а в динамичном размере команды jmp Start, по сути я думал она займет 2 байта, а заняла как я понимаю 3, должно было быть так (jmp Start + nop = 3 bytes) и как раз с 3-его байта начинается BPB... |
Автор: | novice [ 25 авг 2013, 19:06 ] |
Заголовок сообщения: | Re: Загрузчик! |
Вообщем всем спасибо, вроде как читает исправно! Все проверил, но ещё до конца не дописал |
Автор: | phantom-84 [ 25 авг 2013, 19:07 ] |
Заголовок сообщения: | Re: Загрузчик! |
novice писал(а): ошибка out of range Правильно. В этом случае ты должен поднять код. А если это сделать не получается, то явно указать не короткую инструкцию и убрать nop (FAT Spec. это позволяет).Цитата: Вообщем всем спасибо, вроде как читает исправно! Все проверил, но ещё до конца не дописал Удачи
|
Автор: | Himik [ 25 авг 2013, 19:13 ] |
Заголовок сообщения: | Re: Загрузчик! |
novice писал(а): ошибка out of range jmp с размером short занимает 2 байта и тогда нужно добавлять nop, а с near нет. |
Страница 6 из 6 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |