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
  jmp short @f
  nop
  rb BS_SIZE-3
@@:
  ...
Кстати я часто пакую загрузчики, частично или полностью исключая BPB+ из бинарника (начиная со смещения 3). Для этого достаточно переопределить 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: Загрузчик!

Вообщем всем спасибо, вроде как читает исправно! Все проверил, но ещё до конца не дописал :D

Автор:  phantom-84 [ 25 авг 2013, 19:07 ]
Заголовок сообщения:  Re: Загрузчик!

novice писал(а):
ошибка out of range
Правильно. В этом случае ты должен поднять код. А если это сделать не получается, то явно указать не короткую инструкцию и убрать nop (FAT Spec. это позволяет).

Цитата:
Вообщем всем спасибо, вроде как читает исправно! Все проверил, но ещё до конца не дописал :D
Удачи :)

Автор:  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/