[Перевод] Программа «Hello World» на машинном коде под DOS
Как-то раз я послушал следующее интересное выступление (по-немецки): https://media.ccc.de/v/ds24-394-linux-hello-world-nur-mit-einem-hex-editor В нём разобрано, как написать программу «hello world» для 64-разрядного дистрибутива Linux в шестнадцатеричном редакторе. Ассемблер здесь не используется, программа пишется непосредственно на машинном коде. Правда, в ней есть издержки на использование ELF . Мне понравилась такая идея, и я решил повторить такой опыт, но немного в иной форме – а именно, под 16-разрядной DOS в реальном режиме . У меня должен был получиться файл в формате COM , а не EXE , так как (на данном этапе) меня интересовал не столько формат файла, сколько кодировка инструкций. В вышеупомянутой лекции, если честно, не сообщается почти никаких подробностей о том, как именно перейти от ассемблерного кода к машинному — поскольку в случае разбора этих тем лекция, пожалуй, растянулась бы на несколько часов. Но здесь я всё разберу подробно, и при этом собираюсь пользоваться только документацией lntel , а также дизассемблировать код в целях верификации. Также мы коротко поговорим о сегментации . В качестве шестнадцатеричного редактора на этот раз воспользуемся hexedit .
https://habr.com/ru/articles/934032/
#ассемблер #helloworld #память #низкоуровневое_программирование #программирование #машинный_код