Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6816 / 2055 / 239
Регистрация: 14.12.2014
Сообщений: 4,318
Записей в блоге: 12

MBR и прочие радости жёсткого диска

30.06.2018, 16:48. Показов 8617. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Возникло несколько вопросов, но смежных (про геометрию жёстких дисков и загрузочные области), к тому же, предполагающих простые ответы, поэтому буду спрашивать в одной теме...

1. Все ли диски имеют 63 сектора на дорожке? Или бывает меньше?
2. Всегда ли между MBR и первым разделом расстояние минимум 63 сектора (т.е. 62 сектора между ними)? Или бывает меньше (в каких-то системах)?
3. Возможно ли установить винду на диск с размером сектора, не равным 512 байт (и вообще, встречаются ли такие жёсткие диски?)
4. Встречается ли между MBR и первым разделом не нулевые заполнители, а какие-либо другие (скажем, из символов 255 или в виде повторяющихся слов а-ля 0x8000)? Кроме секторов со служебными данными, естественно.
5. Можно ли установить и успешно загружать винду с USB, имеющим формат не HDD-USB, а FDD-USB, т.е. с boot-сектором в начале, а не MBR? Полагаю, что как минимум Win95/98 можно.
2
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.06.2018, 16:48
Ответы с готовыми решениями:

Считывание MBR жесткого диска
Почитал тут одну статью http://www.realcoding.net/article/view/4241 Ради эксперимента решил написать прогу, которая считывает MBR и...

Вероятно, повредил MBR жёсткого диска
Испортился жёсткий диск MAXTOR STM3500320AS. При загрузке компьютер зависает на шаге инициализации этого диска. Если подождать минут...

HDD стал RAW и прочие неприятности жесткого диска
Добрый вечер всем) Прошу вашей помощи! Есть 2 диска - SSD 120 ГБ и жесткий диск 1 TB. На SSD Windows 7 x64 и браузер, в общем...

50
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
08.07.2018, 13:45
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Jin X Посмотреть сообщение
0x600+($-$$)
Цитата Сообщение от Jin X Посмотреть сообщение
510-($-start)
Так это я и назвал кошмарными выражениями. При переходе от TASM-а к FASM-у jmp Next-7C00h+600h стало просто jmp Next , зато вместо org 2FEh пошли уже такие выражовывания. Нос вылез, хвост увяз.

Я когда свой Форт на fasm-е писал мне было нужно постоянно перемещаться в накомпилированном образе. Даже макросы насоздавал типа
Assembler
1
2
3
4
5
6
7
8
9
10
11
MACRO   ORG$    O
{
    REPEAT  O-$
        DB  0       ;Заполняет нулями до нужного адреса
    END REPEAT
}
 
MACRO   ALIGN_8
{
    ORG$    ($-MZ+107h) and 0FFF8h      ;Выравнивает на 8
}
но все равно получался какой-то кошмар вот примерно с такими кусками :
Assembler
1
2
3
4
5
6
7
8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ЭПИЛОГ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ORG $-$$+StartPoint
__:
IF  ($-MZ) and 1FFh
    ORG$    (($-MZ+1FFh) and 0FE00h)+100h   ;Занулим по File Alignment
END IF
___:
    ORG (($-_+0FFFh) and 0F000h)+_-MZ+100h  ;По Section Alignment
Хотя то, что мне было нужно я накомпилировал. Короче именно при необходимости не просто писать программу, а собирать сложносоставной двоичный образ TASM с его ORG-ом куда удобнее.
1
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6816 / 2055 / 239
Регистрация: 14.12.2014
Сообщений: 4,318
Записей в блоге: 12
08.07.2018, 14:46  [ТС]
Цитата Сообщение от Ethereal Посмотреть сообщение
зато вместо org 2FEh пошли уже такие выражовывания
На вкус и цвет, конечно, каждому своё...
Но это, ИМХО, вопрос того, насколько ты хорошо знаешь синтаксис fasm'а.

Цитата Сообщение от Ethereal Посмотреть сообщение
REPEAT O-$
DB 0 ;Заполняет нулями до нужного адреса
END REPEAT
Делается просто через times O-$ db 0 или db O-$ dup 0 (работает побыстрее) или даже rb O-$ (если дальше есть код)

Цитата Сообщение от Ethereal Посмотреть сообщение
MACRO ALIGN_8
Там и так есть align 8, правда заполняет он nop'ами
Но если надо нули, можно так (даже описано в документации):
Assembler
1
2
3
4
5
6
7
8
macro aligndata x
{
  virtual
    align x
    a = $ - $$
  end virtual
  db a dup 0  ; times a db 0 или rb a
}
(хотя это, согласен, громоздко)
Ну или: macro aligndata x { rb (x - $ mod x) mod x } (тут можно хоть aligndata 7 написать )
Или: macro aligndata x,y=? { db (x - $ mod x) mod x dup y } (второй параметр – заполнитель, по умолчанию – ?)

Или даже macro aligndata n=2, shift=0, rel=$$, chr=? { db (n - ($-rel-shift) mod n) mod n dup chr } – делает выравнивание по n относительно rel со сдвигом shift, заполняя символами chr. Например, aligndata 256,-1,x,0 или aligndata 15,,,0x90 или aligndata 512,-2+db 0x55,0xAA

А вот в TASM/MASM с макросами реальный ужас!!! Да и со смещениями бывает тоже.
Иногда он просто не хочет вычитать один адрес из другого или складывать их, приходится изобретать какие-то ужасные конструкции. Либо вообще писать не так, как хочется (больше инструкций, чем можно было бы).

А вместо org 600h мне приходилось писать
MBRShift = 0600h-($-Start+100h) (где $-Start+100h - это особенная фишка TASM'а) и потом добавлять к каждой переменной этот MBRShift.

В fasm мне не нравится то, что нельзя перемещаться назад, т.е. типа:
Assembler
1
2
mov ax,1234h
org $-2
Хотя можно писать вот так:
Assembler
1
2
mov ax,1234h
store word 0xAA55 at $-2
Цитата Сообщение от Ethereal Посмотреть сообщение
но все равно получался какой-то кошмар вот примерно с такими кусками
Просто делаешь тот же macro .org x { rb x-$ } и не паришься. Или macro .org n, chr=? { db n-$ dup chr }
А в TASM/MASM таких кусков нет, хочешь сказать?

У fasm есть много уникальный вещей типа импортирования файла данных через file 'data.bin'.
Или возможность шифрования получаемого бинарника (load, store, я недавно видел код шифрования AES'ом через макросы, load/store'ы).
А также можно создавать файлы данных:
Assembler
1
2
3
virtual as 'bin'
  times 256 db %-1
end virtual
if used вообще класс (который используется в макросах proc, кстати!)
и пр.

Добавлено через 3 минуты
Главное – хорошенько изучить fasm и всё будет ок

Добавлено через 24 минуты
Цитата Сообщение от Argogo Посмотреть сообщение
Батник для компиляции
У MASM есть (ещё) одна неприятная особенность: разные версии не всегда совместимы. К примеру, я уже не могу скомпилировать это через ML 8.0, не указав дополнительного ключа /omf.
Да и вместо link (5.12) нужно использовать link16.
А что за /NOL и /NOI ?
1
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
08.07.2018, 16:34
Цитата Сообщение от Jin X Посмотреть сообщение
А вместо org 600h мне приходилось писать
MBRShift = 0600h-($-Start+100h) (где $-Start+100h - это особенная фишка TASM'а) и потом добавлять к каждой переменной этот MBRShift.
А это из-за того, что TASM не сразу создает окончательный бинарник, а сначала промежуточный объектный файл, который после может быть скомпонован с другим объектным файлом. Из-за этого все метки полагаются относительными, то есть к ним как-бы добавлено некоторое заранее неизвестное смещение. Держи в голове, что к метке добавлено заранее неизвестное X и все станет логично. $ суть вещь относительная и Start относительная, а 600h и 100h - константы абсолютные. Нельзя из абсолютного вычесть относительное, т.е. нельзя 600h-$. А вот если $-Start , то вычтя из относительного относительное мы получаем уже абсолютное, поскольку ($+X)-(Start+X) тут иксы и сократятся. Вычесть из абсолютного абсолютное уже можно, так-что 0600h-($-Start+100h)
Но это плата за промежуточное объектное представление, которого у FASM-а нет.
Но зато вместо db 0600h-($-Start+100h) dup (0) можно сразу писать org 600h

Добавлено через 38 минут
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
        _LINK = 0           ;Force NULL link
        _NAME = $N0
 
$CODE   MACRO   LEX, NAME, LABEL
LABEL:  _CODE = $
        _NAME = _NAME - (LEX AND 1Fh) - 5
    ORG _NAME
        DW  _CODE           ;Поле кода
        DW  _LINK           ;Поле связи
        _LINK = $
        DB  LEX, NAME       ;Поле имени
    ORG _CODE
        ENDM
Тут я по мере компиляции кода для каждой скомпилированной функции в начале памяти, тут-же добавляю соответствующую запись в односвязный список, который располагается в конце памяти. Т.е ORG покомпилировал тут, ORG покомпилировал там и вернулся обратно. В FASM-е что-то подобное делается не естественно, а с помощью load и store, да только Both load and store directives in their basic variant (defined above) are limited to operate on places in current addressing space. это ограничение раз, store можно пропатчить уже скомпилированное, но нельзя создавать новое The store directive can modify the already generated code и наконец store это запись числовых данных, а если мне хочется не только данные, но и параллельно ассемблировать ассемблерные инструкции в двух разных концах образа, то уже никак. Т.е FASM-ом нельзя, не колотясь об ограничения, вести параллельную трансляцию в разных местах двоичного образа, а TASM-ом это делается естественно.

Добавлено через 11 минут
Это я к тому, что MASM/TASM-овская идея org-ом перемещаться в двоичном образе продуктивнее, чем NASM/FASM-овская идея org-ом влиять только на генерируемые в коде ассемблируемых инструкций смещения. Я не говорил за то, что FASM хуже вообще, я вообще в священных войнах не участвую. FASM именно в идеологии ORG хуже (иногда даже как серпом по яйцам хуже, так-что на ином полете фантазии приходится ставить крест). Я только про это говорил. Не про FASM или TASM вообще.
1
780 / 412 / 75
Регистрация: 29.03.2013
Сообщений: 854
08.07.2018, 17:17
Цитата Сообщение от Jin X Посмотреть сообщение
А что за /NOL и /NOI ?
Сокращение ключей /NOLOGO и /NOIGNORECASE соответственно.

Добавлено через 4 минуты
Цитата Сообщение от Jin X Посмотреть сообщение
У MASM есть (ещё) одна неприятная особенность: разные версии не всегда совместимы. К примеру, я уже не могу скомпилировать это через ML 8.0, не указав дополнительного ключа /omf.
Да и вместо link (5.12) нужно использовать link16.
Ну, я уже указывал, что использую MASM 6.11.

Не по теме:

Он, ЕМНИП, последний мог работать в чистом DOS. Следующим версиям windows command prompt подавай для работы.

2
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
07.08.2018, 11:04
Цитата Сообщение от Jin X Посмотреть сообщение
Собственно, наибольшую путаницу пока вносит тема с не-512-байтовыми секторами.
Не могу взять в толк, как с ними работать (тем более, что у меня нет таких примеров, а SSD показывает 512 как из-под DOS – ah=48h/int 13h, так и из-под винды: IOCTL_DISK_GET_DRIVE_GEOMETRY).
Т.е. что я получу, если запрошу сектор LBA 1 через ah=42h/int 13h (или через ah=2)?
Что я получу, если открою диск (PhysicalDrive) через CreateFile и прочту 512 байт, начиная со смещения 512?
Для диска с 4K-секторами, например.
Больше всего радостей от того, что NT i386 в конце прошлого века умела устанавливаться и грузить своё ядро с дисков, которые BIOS вообще не видела.
Хотя эти радости в Вашем случае, вероятно, не интересны.
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6816 / 2055 / 239
Регистрация: 14.12.2014
Сообщений: 4,318
Записей в блоге: 12
07.08.2018, 14:22  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
Хотя эти радости в Вашем случае, вероятно, не интересны.
Скорее да.
Любопытно, но не более того
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
07.08.2018, 14:34
А для чего вообще все эти хитрости и радости?
Файликом в файловой системе не обойтись?
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6816 / 2055 / 239
Регистрация: 14.12.2014
Сообщений: 4,318
Записей в блоге: 12
07.08.2018, 17:24  [ТС]
Тут речь о загрузчике, либо программе, запускаемой из MBR-кода.
Так что с файликом несколько напряжно. В любом случае его ещё прочитать надо, а при 4K-секторах не совсем понятно как правильно эти секторы читать.
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
08.08.2018, 09:21
На машине с 4К-секторами может быть UEFI с отключенным CSM, и никто читать, загружать и выполнять код из MBR не будет.
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6215 / 2449 / 403
Регистрация: 29.07.2014
Сообщений: 3,181
Записей в блоге: 4
08.08.2018, 17:57
Цитата Сообщение от politoto Посмотреть сообщение
и никто читать, загружать и выполнять код из MBR не будет.
вы пробовали? к чему эти ваши догадки?
отлично выполняется.. вы думаете там тупые собрались?
1
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6816 / 2055 / 239
Регистрация: 14.12.2014
Сообщений: 4,318
Записей в блоге: 12
09.08.2018, 09:33  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
На машине с 4К-секторами может быть UEFI с отключенным CSM
А может и не быть...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.08.2018, 09:33

Smartsputnik и прочие прилагаемые радости
Всем привет! Удалил программу time task через безопасный режим, но что делать дальше? Лог прилагаю

Куча была повреждена и прочие радости
В каждом байте BMP изображения программа подменяет последние несколько бит на биты какого-то файла (отдельно есть алгоритм, извлекающий эту...

DOS виснет на int 13h при чтении MBR жесткого диска
читаю MBR жесткого диска, досю гружу с флешки, как доходит до инт 13 - встает. masm .model small .stack 256 .data mboot db 512...

Можно ли восстановить файлы после изменения таблицы раздела жёсткого диска с MBR в GPT?
Можно ли восстановить файлы, после изменения таблицы раздела жёсткого диска с MBR в GPT? При установки Windows 10, Windows 10...

Ремонт логической "части" жёсткого диска, перезапись MBR и восстановление Partition Table
Здравствуйте! Тема, созданная мною, не нова, и я это прекрасно понимаю. По-этому, хочу сразу объяснить цель её создания: во-первых,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
51
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru