Comments 20
• dd if=/dev/zero of=floppy.img bs=512 count=2880
• dd if=boot.bin of=floppy.img
cp boot.bin floppy.img
truncate -s 1440K floppy.img
Такое облегчение, что я, кажется, «пересидел» x86, и с красивой, стройной и логичной системы команд z80 можно перейти на такую же стройную систему команд ARM :)
(Хотя тут тоже MOV, вместо LD :)
Интересно, сколько лет должно пройти, чтобы начинающих программистов перестали учить программированию под прерывания BIOS, который сейчас и найти где-либо не в виде CSM проблематично.
Я с этим совершенно не спорю. Я говорю лишь о том, что такие туториалы немного неактуальны, поэтому непонятно, на кого ориентировался изначальный автор.
На опытных системщиков? Так тут нет ничего нового, можно с тем же успехом в тысячный раз рассказать о A20 и тонкостях unreal mode, не сообщив при этом ни капли новой информации.
На начинающих системщиков? А как они смогут применить знания о программировании с использованием прерываний BIOS, если в современных платформах и BIOS-то нет?
Системщик, реализующий сейчас загрузчик для современной операционной системы, не столкнется ни с чем вышеописанным.
Рискую ошибиться, но есть достаточно много встроенных систем базирующихся на х86 а не RISC процессорах, и использующие BIOS на борту, так что думаю как минимум в ближайшую 10 летку, а то более такие знания будут совсем не лишними...
И еще немного про MBR для желающих пойти дальше, чем загрузка с дискеты thestarman.pcministry.com/asm/mbr/STDMBR.htm
Вторая часть здесь.
Когда мы указываем 16-битный адрес, ЦПУ автоматически вычисляет начальный адрес соответствующего сегмента. Тем не менее именно программист должен указывать начальный адрес каждого сегмента, особенно при написании такой программы, как загрузчик.
На самом деле, немного не точное описание сегментации. Вся память линейна, а сегменты — лишь участки в ней. Значения сегментов хранятся в регистрах CS (код), DS (дата), SS (стек) и ES (спец-сегмент). Когда программист указывает адрес, например DS:ax, ЦПУ не вычисляет начальный адрес сегмента, а просто прибавляет к начальному адресу DS значение ax.
Пишем загрузчик на Ассемблере и С. Часть 2