Как стать автором
Обновить

Низкоуровневое программирование под 8086 для любопытных, часть 1

Уровень сложностиСредний
Время на прочтение27 мин
Количество просмотров7.6K
Всего голосов 33: ↑33 и ↓0+42
Комментарии42

Комментарии 42

Есть ли корректная эмуляция портов программируемого контроллера прерываний и прочей периферии которую можно было программировать через порты?

Я думаю, что dosbox вполне корректно эмулирует базовую переферию. Такую, как контроллер прерываний и т.п.

Чёрт, сразу вспомнился тот резидентный справочник по прерываниям... э-э-э, забыл уже название: hhelp или типа того. Там, понятно, не только про прерывания было, штука была незаменимая. Интерфейс ещё такой зелёный.
Стоп, нет: сама программа была просто для демонстрации справки по горячей клавише, а к ней уже у меня была прикручена справка по прерываниям.

Не "Tech! Help" случайно? Он мог быть резидентным, а мог просто запускаться как обычная программа.

Точно! Он самый!

Ага! :)

Да уж. Прямо детство. Не пионерское, постарше. Но детство. debug.com, правда, не сильно любили. Скорее Turbo Debuger, а потом и более интересные варианты. Буквально следом должен идти перевод Криса Касперски о том, как взломать хиты времен MsDOS.

Надо ли только это хоть кому-то? Уже и в ассемблер для контроллеров мало кто заглядывает, что тут про специфичную археологию времен DOS да еще с "$"-терминированными строками. Хотя, безусловно, там было очень много интересного.

Кому-то, может быть, надо. Штуки вроде DOSBox весьма интересны с точки зрения изучения принципа построения машинного кода и отладки на низком уровне.

Может быть. Мне, как человеку заставшему код на 80186 без всяких MSDOS и в последствии занятым как раз низкоуровневым для ПК (в основном для Linux), да контроллерами, включая незабвенные 8051 с очень похожим ассемблером, уже начинает казаться что это нечто типа набившего оскомину Cobol'а у импортных финансистов.

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

Эх, статья интересная конечно, особенно лет 30 так тому назад. Жаль что винда отказывается нативно запускать com-файлы.

Сейчас было бы любопытно почитать про 64 бита от нажатия копки питания, до запуска ОС. Тот же 64 ABI для виндов и линукса.

Отличная идея!

debug.com, правда, не сильно любили.

symdeb наше фсё! По сравнению с debug гораздо более продвинутый, хотя внешне весьма похож. Ну а Turbo Debugger гораздо позже, мой любимый отладчик был. А особено TD386, который умел делать аж хардварные брекпойнты. Но это уже совсем много позже когда мне на работе выдали компутер с 80386.

Эх, сколько игр было пройдено путём делания себе неубивамости при помощи TD!

А вот отладчик от Microsoft под названием CodeView я ненавидел всеми фибрами, мне он был жутко неудобен после истиной юзабилити от Borland. Как, впрочем, и всё от Microsoft. Тот же Visual C даже сравниться не мог с Turbo C по удобству.

Немного смущает то, что обещали 8086, а фактически рассказали про IBM PC XT, с ее особенностями по раскладке памяти, использованию именно 8259A в качестве контроллера прерываний и т.п.

Когнитивное искажение автора. Я видел системные контроллеры для ТОС ЭЛКОС (телефонная станция производства Борисоглебского завода) на базе 8086. И софт для них, вроде бы, на Турбо Си делался. Но доступа к этой технике у меня, к сожалению, нет.

Я делал такие контроллеры (ну не прям телефонная станция, но тоже на 8086. Вернее, на 80186, но там очень маленькая разница).

И тоже программировал их на Turbo C 2.0, с самодельным стартап-кодом, чтобы он там по MS-DOS не скучал :)

Существовал ещё неплохой компилятор Paradigm C++, поддерживавший 80186.

Извините за бурную реакцию, но: Хватит! Я в универе на эту ерунду насмотрелся!

Что за ностальгия по 90ым?! Почему каждый раз, когда речь идёт о низкоуровневом программировании, начинаются разборы 8086ого, real mode, работа в древнем DOS и debug.com?

Я люблю олдскул, но учить в 2025 ассемблер также, как его деды учили - абсурд! Почему не используются современные инструменты для разработки в современных ОС, в long mode, с нормальным отладчиком, с постепенным переходом от создания простейших GUI-приложений на макросах FASMa к NTAPI, сисколлам, драйверам и более низкоуровневому коду?

N.B.: В DOSBox работа с прерываниями поддерживается не полностью, он может зависнуть или аварийно закрыться. Лучше всё-таки работать на живом "железе".

ну, кто-то любит попадью, кто-то свинной хрящик. Чтобы понастольгировать 8086 подходит, если кто его застал в эпоху бурной молодости, приятно вспомнить былые навыки. Чтобы донести ассемблер до молодого поколения лучше конечно что-то посовременнее взять, без нафталина, и подавать лучше не таким способом, более общим чтоли, с сопоставлением архитектур и их отличительных особенностей - расказать про endianess, выравнивание, наличие конвеера итд.. А если хочется чего-то совсем уж простого, можно например архитектуру 8051 предложить, для неё есть mcu8051ide - отличный IDE с эмулятором, очень наглядно даёт потрогать все азы микропроцессорной техники

8051 всего на пару лет моложе 8086, но вполне жив. Тут нужно найти компромисс: чтобы был одновременно и прикладной смысл и не требовалось какого-то специального оборудования для экспериментов in vivo. Думаю про Atmel и платки Arduino, но в контексте ассемблера. Пока не знаю, что было бы актуально И интересно читателям.

AVR ассембелер действительно неплох, писал на нём лет десять назад, когда начинал в embedded. Но там такая проблемка: эта архитектура так хорошо заточена под C, что в какой-то момент понимаешь что писать на ассембелре особо-то и нет необходимости, только чтобы познакомиться. В плане дидактики самого низкого уровня на мой взгляд 8051 реально лучше, она создавалась еще для ассемблерных программистов.

У Silicon Labs есть отличная серия EFM8, и девборды на неё не дороже ардуинок, рекомендую. И шустрые они, 25MHz и конвеер, по 1-2 такта на инструкцию, в отличии от старого.

Под C идеально заточен 1801ВМ1, там даже *(++p0) = *(p1--) в одну инструкцию ассемблера можно уложить если мне не изменяет моя старческая память (p0 и p1 указатели на примитивные типы конечно, а не на структуры, там уже одной инструкцией не обойтись).

так это PDP11 архитектура, её особенность. У DEC Alpha говорят тоже ассемблер хорош был

Ну да, оно и есть. 1801ВМ1 с PDP и срисовывали. Как КР580ИК80 срисовали с i8080.

MOV -(PC), -(PC)

кто трогал, тот поймёт :)

Система команд DEC PDP-11 была хороша, в СССР выпустили, ЕМНИП, три модели CPU: К1801ВМ1, ВМ2, ВМ3. Мой первый ассемблер был на ВМ2.

Система команд DEC PDP-11 была хороша, в СССР выпустили, ЕМНИП, три модели CPU: К1801ВМ1, ВМ2, ВМ3. Мой первый ассемблер был на ВМ2.

Еще были и микропроцессорные комплекты: 1811 и 1831 (аналоги комплектов DEC).

Я тогда в школе учился, ассемблер PDP-11, да под ОС RT11 по бледно-коричневым мануалам осваивал на машинках УКНЦ.

А я ассемблер PDP осваивал на КУВТ-86, состоявшего из центрального ДВК-2, к которому подключено много БК-0010.

А после занятий ходил в гости к приятелю, у которого дома (!!!) в то время (!!!) был настоящий комп Base-64 производства ФРГ, являвшийся клоном Apple ][e. И там я уже осваивал ассемблер 6502.

Я в универе на эту ерунду насмотрелся!

Мне в универе было интересно на ассемблере лабать, исключительно тёплые воспоминания. Правда, приходилось самому себе придумывать усложнения заданий ;)

Что за ностальгия по 90ым?!

Что за странный вопрос? Мы тогда были на 30 лет моложе.

Почему не используются современные инструменты для разработки в современных ОС, в long mode, с нормальным отладчиком, с постепенным переходом от создания простейших GUI-приложений на макросах FASMa к NTAPI, сисколлам, драйверам и более низкоуровневому коду?

Напишите, с удовольствием почитаем.
Практического смысла в этом, впрочем, будет примерно столько же, сколько и в статье о ассемблере под DOS.

В DOSBox работа с прерываниями поддерживается не полностью, он может зависнуть или аварийно закрыться. Лучше всё-таки работать на живом "железе".

Лучше, когда зависает DOSBox, чем когда зависает вся живая железяка.
Система с NTVDM — в самый раз. Забыл уже, в какой версии NT он последний раз из коробки шёл, в 32-битной Windows XP?

в наше время 30 лет назад архитектура x86 была практически единственная, мы с этим выросли, и это накладывает отпечаток. Хотя еще в 80х это было опять не так, тогда еще был зоопарк, но к нашим 90м он почти вымер, и нам казалось что вот это вот всё и только так и всегда. А сейчас умирает Intel и с ним уходит та эпоха, ничего не поделаешь, Arm и RISC-V сейчас важнее понимать, хотя бы в общих чертах. Такие дела.

Мне в универе было интересно на ассемблере лабать, исключительно тёплые воспоминания. Правда, приходилось самому себе придумывать усложнения заданий ;)

Мне тоже было интересно: все лабораторки из курса сделал за день и занялся тем же - придумывал себе задания, пробовал сделать что-то своё.

Что за странный вопрос? Мы тогда были на 30 лет моложе.

Я тоже был моложе, изучал работу с DOS во 2 классе, другие люди могли начать ещё раньше. На приставке программировал на BASIC (чего никому не желаю). Ностальгия по молодости - не аргумент.

Напишите, с удовольствием почитаем.

Может быть и напишу, отчего бы и нет? Ловите на слове!

Лучше, когда зависает DOSBox, чем когда зависает вся живая железяка.

Живую железку сбросить можно, но я писал о том, что некоторые действия DOSBox выполнить принципиально не позволяет. ЕМНИП, пару лет назад запустить в нём свой обработчик прерываний мне не удалось. Может быть с тех пор что-то изменилось.

Автор написал то, что ему было интересно.

Почему вы полагаете, что

не используются современные инструменты для разработки в современных ОС

? Для разработки в современных ОС используются (мной, в том числе) разные инструменты, вплоть до LLM & Cursor IDE.

Тут же либо олдскул, с соответствующими инструментами, либо то, что вы хотите. И тут два пути: вы можете написать такую публикацию сами, либо это сделает кто-то другой, возможно, что я :)

Если мне сегодня старый фотограф начнет промывать уши техникой печати фотоснимков, химической обработкой с фотоматериалами и т.д. и т.п., я вспомню эту публикацию.
Портирование же на уровне GUI с применением FSM это то, что сегодня актуально с применением x86
На все пр все, освоение за 20 минут без тяжелого низкоуровневого фундамента.

Спасибо, вспомнил школу, как писал дипломную работу на Ассемблере. Под MS-DOS, ага. Выежнулся, согласен. На «Турбо-Паскале» с «Турбо-Виженом» было бы проще и быстрее... :-)

Это был кирпичик в фундаменте профессионального опыта.

DOS это еще что.... вот монитор (это по сути дебагер только без ассемблера/дизассемблера - все в HEX и ввод и вывод), который был в Специалисте (был такой довольно оригинальный комп с графическим дисплеем). Комп был собран (пайка) на макетке проводом МГТФ из деталей, что мне достал и купил папа.
Там из команд ввода вывода была только запись/чтение на/с магнитофона, а из подпрограмм (как прерывания в DOS) была только для вывода на экран символов на основе знакогенератора, который лежал в той же ROM где и сам монитор.
Там были набиты в HEX и ассемблер и еще несколько программ. А уже на ассме написана змейка (в графике).
И вот тогда.... (спаяв комп, набив в HEX ассемблер и написав в нем игру) я наконец смог поиграть :)

Слова "папа достал" заиграли новым смыслом. Но да, доставать приходилось и таки удавалось. В частности РУшки, микросхемы ОЗУ, в большинстве хоть и отбраковка, были цельнотянутыми с почтовых ящиков.

Да рушки (РУ3) как и еще пара микросхем были в золоте. Но тут надо большей половине читателей пояснить, что это значит: это такое исполнение микросхем в керамическом корпусе и позолоченными контактами, в таком исполнении микросхемы делались преимущественно для вояк, а в 90 был целый бизнес на извлечении этого золота из микросхем.
Хотя вот той же части читателей нужно еще пояснять, что такое почтовый ящик (который был источником таких микросхем, макетной платы и даже проводов и припоя, и где работал мой папа). Это военное производство начиная от проектных институтов и заканчивая заводами и полигонами - все имели гражданское название, например какие-нибудь Ленинец, Рубин или Малахит, но вся корреспонденция между ними ходила только как на ПЯ № 1234567890192010 (номер выдуман). Типа что бы шпиёны не догадались. Да только западные разведки знали о связи номеров ПЯ и предприятий больше, чем подавляющее большинство жителей СССР.

Кстати трансформатор в блоке питания для моего следующего (тоже спаянного собственными руками) ZX Spectrum был тороидальный (самый высокий КПД, но требует дюже специального оборудования для намотки) - тоже намотали папе по знакомству в ящике.

Начав читать, испугался и проверил год на календаре. Потом испугался за автора, что его держали взаперти 35 лет, успокоился дочитав до Ubuntu 24.04.
Блин, при чтении этой статьи я прям запах магазина "Технической книги" в Екатеринбурге на ул. К. Либкнехта почувствовал!

Сегодня гораздо больше поводов для страха, чем какая-то там публикация на Хабре. Считайте, что автор впал в маразм и живёт в ранней юности :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации