1
Жесткий диск, с логической точки зрения, можно рассматривать как последовательность «блоков» (более распространенное название - сектора). Как физически организованы эти блоки на дисках, можно не принимать во внимание, но драйвер, конечно, должен каким-то образом знать, как получить данные, хотя вы отправляете современному драйверу hd «высокоуровневые» команды, которые, насколько вы знаете, не сильно связаны где физически находятся данные (вы можете сказать «прочитайте блок 123», но нет никаких внешних доказательств того, где этот блок живет).
Однако, таким образом, вы можете «назвать» блок номером и сказать, например, этот блок 0 является MBR. Каждый блок содержит несколько байтов (512, 1024 ...). Не все используемые блоки содержат фактические данные файла, на самом деле существуют метаинформации любого рода, в зависимости от файловой системы, но даже связанные со «структурой» жесткого диска (я имею в виду, разделы).
Файл, расположенный на жестком диске, автоматически не загружается в память, поэтому у него нет адреса памяти. Как только вы прочитаете его, его часть, если не все, конечно же, будет скопирована в предоставленную вами память, что не является внутренним свойством файла. (Файловые системы извлекают блоки, принадлежащие файлу, и «показывают» их, как мы привыкли их видеть, как единый «блок» файла)
Подводя итог: файлы не имеют адреса памяти. Физический адрес может быть набором блоков, содержащих данные (и метаданные, такие как inode ) файла, или просто первый блок (но если блок данных равен N, N + 1 не может принадлежать один и тот же файл - блоки не обязательно должны быть рядом друг с другом). Чтобы узнать их, вы должны проанализировать структуру файловой системы, которую вы используете. Я не знаю, есть ли API для их простого извлечения, но в худшем случае вы можете проанализировать исходный код файловой системы ... удачи!
2
С функции переведены в сборку. Если вы уважаете соглашение о вызовах C, вы можете написать «функцию C» непосредственно в сборке. Попробуйте прочитать это и это для x86.
3
Вы можете вызвать Windows API из ASM. Забудьте о MS-DOS, MS-DOS мертва, MS-DOS - это не Windows, cmd - это своего рода «эмуляция» ... на самом деле нет, не эмуляция, а просто интерфейс командной строки, напоминающий пользователей MS-DOS был использован для. Но это не совсем то же самое, то есть нет системного прерывания MS-DOS, которое вы можете использовать. Учебные пособия по сборке Ичелиона , хотя и старые, могут быть интересным ресурсом. (Если срок действия ссылки истекает, попробуйте использовать обратный автомат )
4
У меня нет Win7 и я никогда не устанавливал nasm на Windows, поэтому я не могу ничего сказать о.