Pull to refresh

Comments 12

Супер. Кто-то ещё помнит как писать под проц. 8086. В принципе здорово, только непонятно для чего. Какова цель статьи и проделанной работы. Чтобы из нормальной консоли получить самодельную в эмуляторе?
Мы вот в универе только 8086 учим. И думаю в многих вузах тоже, так что студентам это точно очень даже полезно
8086 — это маленькое подмножество современного x86-64. Странно как-то разделять, все кто умеют в современный ассемблер с минимальными усилиями смогут в 8086.
Скорее тут больше проблем будет с BIOS прерываниями, вот это ща устарело.

Лично для меня эта вещь была очень полезной. Пока просто читал теорию, совершенно не понимал в полной мере, что происходит на низком уровне. А когда начал писать подобные программы — все сразу прояснилось и вообще стал больше разбираться, так что кому-то эта статья точно может помочь в понимании

Не только пишут, а уже написали операционную систему на ассемблере — KolibriOS
В размерах с демонстрационным софтом — одной 1.44 Мб дискеты!
Правда там ассемблер FASM

P.S. Базис разработчиков данной ОС — русскоязычные программисты.
Колибря всё-таки под i586, а не под 8086, и вполне себе 32-х битная.

Ну если исключительно для тренировки навыков программирования — то да. Для этого любой asm подойдёт. Qemu получается как эмулятор старого проца, причем за даром. Можно ещё пробросить виртуальный LPT, на стороне хост-машины сделать эмулятор лифта или пульта или дисплея или поливалки или… и можно писать лабораторки.

А, ещё есть «подобие» Форт в 512-байтах загрузочного сектора :)
Пример: github.com/Darksecond/512 (вроде есть и другие подобные примеры)
и вроде игра змейка в загрузочном секторе.
Привет, автор. Спасибо за статью — обязательно опробую на выходных! Есть пару вопросов, первый про формулировку «у которого последние 2 байта первого сектора (т.е. первые 512 байт, т.к. 1 сектор = 512 байт) равны 55 и AA». Немного сбивает с толку, как по мне. Я бы немного уточнил, примерно так: «у которого последние 2 байта первого сектора (под первым сектором подразумеваются первые 512 байт жесткого диска, т.к. один сектор = 512 байт) равны 55 и AA». И ещё: в соответствии с вышеуказанной моделью памяти очень хорошо согласуется директива «org 0x7c00», однако в руководстве Nasm приводится пример с директивой «org 0». Что это? Упрощённый пример или же авторы документации ошиблись? Ссылочка на доку — www.nasm.us/doc/nasmdo12.html#section-12.1.3
1) Спасибо, поправил
2) В руководстве подразумевается, что дальше в коде мы самостоятельно будем смещать все наши указания на память. Ради интереса заменил директиву на «org 0» и вот что получил:

image

Ну, то есть, NASM вообще ничего не берет из наших переменных — мы просто указали не на тот участок в памяти. Если взять адрес переменной за b, то в случае org 0 NASM посмотрит в память по адресу 0:b, а с org 0x7c00 — в память по адресу 0x7c00:b (это уже сегментная адресация памяти, которой в статье не было)
Спасибо, надеюсь увидеть ещё статьи подобного толка на Хабре. Эта получилась достаточно простая для понимания и проверки, и вместе с этим достаточно глубокая по смыслу. Кстати, для меня было открытием, что Nasm умеет собирать бинарники вообще без мета-данных и заголовков. Только чистые инструкции. Я думал, что эта фича есть только в Фасм =)
Sign up to leave a comment.

Articles