#c++ #c #ассемблер #x86 #bios
Пытаюсь разобраться с низкоуровневым программированием. Поставил задачу — написать "Hello World"-программу, записать её на флешку, перезагрузиться, запустить программу с флешки (не запуская ОС). Можно ли это сделать на С или С++? Как дать понять биосу, что её надо загрузить в память, выполнить? Что из себя должна представлять программа? Исполняемый файл .com? .bin файл? Слышал, это должно быть 16-bit приложение. Если ли какие-то ограничения в названии программы? Немного не по теме: Стоит ли пользоваться MASM? Какой Ассемблер сейчас наиболее популярен для x86? Заранне Спасибо!
Ответы
Ответ 1
Можно и на C/C++, но в очень урезанном виде - практически никаких библиотек. К вашим услугам только функции BIOS (int 13h) (Т.е. ваш "Hello, world" не должен выводиться ни с помощью puts или printf, ни тем более в cout). Никакой main в качестве входной точки (если только не измените соответствующим образом рантайм загрузчик). Т.е. только какие-то базовые вещи (типа арифметики :)), которые компилируются в .obj, и линкуются с начальным загрузчиком на ассемблере. Когда-то интереса ради урезал Turbo C++ до такого состояния - очень даже ничего получалось :) Я в свое время использовал TASM - отлично подходил для таких целей. Работать этот код начинает в реальном режиме, так что только 16 бит, причем (мы же о PC?) грузится он в память по адресу 0000:7С00 и начинает выполняться оттуда. Грузится он из MBR, так что если это что-то более-менее большое - то сразу должен сам считать и загрузить остальное в память. Считайте, что com-файл DOS, только никаких org 100h - что получено, то просто положено в очень конкретную :) память - и на диске, и в RAM, и управление передается первому байту. Соответственно, какое уж тут название программы... Название (файла) - это уже файловая система, а тут ею и не пахнет. Мой совет: виртуальная машина с виртуальным дисководом для дискет :), грузящаяся с такой виртуальной дискеты. Первый сектор - ваш. Это позволит вам делать, что хотите, ничем не рискуя, и очень легко записывать ваше творение в файл, не мучаясь с записью в конкретные сектора на диске/флешке (при этом можно легко натворить неприятностей).Ответ 2
Да. Записать её в MBR флешки, а в BIOS выбрать загрузку с USB приоритетнее, чем с винчестера. Проще всего получить ассемблерный листинг и ввести код с помощью HexEdit прямо в MBR диска. Старайтесь в названии не использовать чужие торговые марки. Стоит. Отличный ассемблер.Ответ 3
Если хотите поизучать низкоуровневое программирование - начните с микроконтроллеров там все под это дело заточено. Рекомендую с avr начать - есть много хороших статей по asm и с - очень удобные среды разработки и эмуляторы. Это если Вам x86 не принципиален.Ответ 4
Да и практической пользы изучив низкоуровневое программирование МК все же поболее будет. Мало чем отличаться будет программирование x86 или МК если писать на C (С++ не очень распространен среди мк) с точки зрения обучения.Если конечно у Вас не стоит каких-то экзотических задач писать для 86 платформы.
Комментариев нет:
Отправить комментарий