[Перевод] Программа «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 #память #низкоуровневое_программирование #программирование #машинный_код

Linux "Hello World!" nur mit einem Hex Editor

media.ccc.de

[Перевод] Не стоит пугаться машинного кода

Моим первым языком программирования был ActionScript. Написание кода для Macromedia Flash максимально далеко от голого железа, и эта специфика работы глубоко засела в моём сознании. В результате меня интересовали преимущественно высокоуровневые языки для веб-программирования. Низкоуровневые же казались непостижимыми. Со временем я постепенно из разных источников узнавал о них всё больше, но это моё убеждение оставалось прежним. Низкоуровневые языки пугают, и машинный код подтверждал это наглядно. Когда я обращался к Google с запросом «понятный машинный код», то результат выдачи чаще представлял нечто пугающее и отталкивающее, нежели полезное для обучения. В конечном итоге я решил, что для достижения поставленных целей мне этот страх необходимо преодолеть. И результат приложенных усилий оказался для меня неожиданным. Машинный код вовсе не страшен. Если вы можете обеспечить, чтобы документ JSON соответствовал схеме JSON, то без проблем сможете писать машинный код.

https://habr.com/ru/companies/ruvds/articles/917202/

#Машинный_код #программирование #программирование_для_начинающих #assembler #низкоуровневое_программирование

Не стоит пугаться машинного кода

Моим первым языком программирования был ActionScript. Написание кода для Macromedia Flash максимально далеко от голого железа, и эта специфика работы глубоко засела в моём сознании. В результате меня...

Хабр

[Перевод] Не стоит пугаться машинного кода

Моим первым языком программирования был ActionScript. Написание кода для Macromedia Flash максимально далеко от голого железа, и эта специфика работы глубоко засела в моём сознании. В результате меня интересовали преимущественно высокоуровневые языки для веб-программирования. Низкоуровневые же казались непостижимыми. Со временем я постепенно из разных источников узнавал о них всё больше, но это моё убеждение оставалось прежним. Низкоуровневые языки пугают, и машинный код подтверждал это наглядно. Когда я обращался к Google с запросом «понятный машинный код», то результат выдачи чаще представлял нечто пугающее и отталкивающее, нежели полезное для обучения. В конечном итоге я решил, что для достижения поставленных целей мне этот страх необходимо преодолеть. И результат приложенных усилий оказался для меня неожиданным. Машинный код вовсе не страшен. Если вы можете обеспечить, чтобы документ JSON соответствовал схеме JSON, то без проблем сможете писать машинный код.

https://habr.com/ru/companies/ruvds/articles/917202/

#Машинный_код #программирование #программирование_для_начинающих #assembler #низкоуровневое_программирование

Не стоит пугаться машинного кода

Моим первым языком программирования был ActionScript. Написание кода для Macromedia Flash максимально далеко от голого железа, и эта специфика работы глубоко засела в моём сознании. В результате меня...

Хабр

Часть 1. Почему Go-ассемблер и векторизация могут быть полезны: идея для ускорения

Когда речь заходит о производительности в Go, большинство разработчиков полагаются на стандартные библиотеки и встроенные инструменты оптимизации, но компилятор Go не всегда генерирует оптимальный машинный код. В таких случаях можно взять дело в свои руки и использовать ассемблерные инструкции для ускорения критически важных участков. Ассемблер может показаться сложным и пугающим, но он открывает большие возможности для работы с низкоуровневыми оптимизациями. Готовы разобраться, как это работает? Тогда погнали! Привет, Хабр! Меня зовут Игорь Панасюк, я работаю в Яндекс, преподаю в ИТМО, а также в свободное время выступаю на конференциях, делюсь опытом в соцсетях и помогаю развитию Go-сообщества.

https://habr.com/ru/companies/oleg-bunin/articles/905966/

#golang #optimization #intermediate_representation #ssa #ассемблер #машинный_код #simd #intrinsic #синтаксис #VMOV

Часть 1. Почему Go-ассемблер и векторизация могут быть полезны: идея для ускорения

Когда речь заходит о производительности в Go, большинство разработчиков полагаются на стандартные библиотеки и встроенные инструменты оптимизации. Но компилятор Go не всегда генерирует оптимальный...

Хабр

Схематично, простыми словами о внутреннем устройстве PHP (Zend Engine, OPCache, JIT)

Данный пост нацелен на неопытных PHP-специалистов. От этой информации лучше программировать вы не станете. Ожидаемая польза: Мне когнитивно и морально легче, когда уменьшается «магия» с тем с чем работаешь. Может тебе тоже Возможно чуть-чуть реже статьи на хабре будут тебя отпугивать Объясню на 4 примерах — каждый лишь немного сложнее предыдущего. Пример 1: запуск программы, написанном на компилируемом языке (Go): в полной статье Пример 2: Запуск скрипта PHP без OPCache и JIT В интерпретируемых языках подразумевается, что выполнение программы будет осуществляться не сразу машинного кода. В случае PHP — запускается именно исходной код. Это означает, что каждый запуск программы система должна проанализировать исходный код и преобразовать его в понятный код для процессора (т.е. в машинный код). Вот схематично представил всю последовательность работы PHP скрипта без включенных OPCache и JIT (каждый из них по отдельности рассмотрим в следующих двух примерах).ache** и JIT (каждый из них по отдельности рассмотрим в следующих двух примерах). У нас привычный «исходный код» PHP (файл hello-world.php ): <?php echo "Hello world"; Опять идем по порядку, рассмотрим какие процессы происходят запустив команду: php hello-world.php Процесс №1 — Компиляция в байт-код Сначала исходный код обрабатывается Zend Compiler — это PHP компилятор . Первый из двух основных компонентов Zend Virtual Machine . В отличие от рассмотренного выше компилятора Go: задача PHP компилятора — преобразовать исходный код не в машинный код, а в код-посредник - байт-код ; процесс компиляции происходит при каждом запуске программы (вместо лишь единоразового - до запуска программы, как в примере с Go) В случае PHP этот байт-код назвали PHP OPCode . Байт-код — более низкоуровненный чем исходный код, содержащий набор команд для интерпретатора (об интерпретаторе в следующем пункте). Байт-код не может выполняться процессором напрямую. Чтобы посмотреть результат работы компилятора — сам байт-код — выполним команду: php -d opcache.opt_debug_level=0x20000 -d opcache.enable_cli=1 hello-world.php Получим: $_main: ; (lines=3, args=0, vars=0, tmps=1) ; (after optimizer) ; /hello-world.php:1-2 0000 EXT_STMT 0001 ECHO string("Hello World") 0002 RETURN int(1) Вначале видим $_main: — обозначает, что следующие строки относятся к функции main . Появление такой функции в байт-коде для глобальной области видимости PHP — занятная историческая особенность, дошедшая из других языков; Следующие 3 строки начинаются на ; — так обозначаются комментарии. Одна из целей — для дебаг-информации; Последние 3 строки — непосредственно код нашего приложения, который будет выполняться виртуальной машиной в следующем шаге. Процесс №2 — Выполнение байт-кода

https://habr.com/ru/articles/844768/

#PHP #zend_engine #opcache #jit #интепретатор #компилятор #байткод #машинный_код

Схематично, простыми словами о внутреннем устройстве PHP (Zend Engine, OPCache, JIT)

Простыми словами о внутреннем устройстве PHP Введение Данный пост нацелен на неопытных PHP-специалистов. От этой информации лучше программировать вы не станете. Ожидаемая польза: Мне когнитивно и...

Хабр

Новая архитектура в интепритации древних (приземление)

Здравствуйте. В прошлой тематической (не касающейся биографических отступлений) публикации может я ничего особо интересного и не написал, впрочем - возможно я вообще ничего интересного не пишу, но у меня свой путь и прошу меня за это не судить - каждый имеет право выбора. Можно было-бы написать много чего интересного, но всё-же предпочитаю серии одной темы, от одного аккаунта, пока нет на портале функции нескольких галерей одного автора. Не расчитываю собрать много плюсов, расчитываю собрать вычислительную машину своей архитектуры, с своей ОС и процессорами собственной архитектуры. Многие наверное задались-бы вопросом - в чём логика, когда IT отрасль так развита. Давайте посмотрим кому она развита..., хотя нет, скажу только что решил что будет так тогда, когда в общем-то думал как конвейеры своего GPU пристраивать к вычислительной машине, и хотел назвать конвейеры эти - препроцессорами. Проверил термин и обнаружил, что термин пропроцессор занят под название программы. Подумал - ну хорошо, раз одни уже называют чёрное белым, то самое время создавать другое пространство, где такой необходимости попробовать избежать и создать что-то такое, где граблей валяться под ногами будет поменьше. Над своим процессором задумался после третьей тематической публикации https://habr.com/ru/articles/769972/ . Архитектуру немного проработал, подумал над конвейром и тогда уже начал думать об общем устростве и архитектуре вычислительной машины. Как избежать граблей? Долго не думал, так как в своё время писал уже "чит" на теорему Брахмагупты о ориентированных площадях (как-то писал свой алгоритм генерации трассировки пути фрезы ЧПУ, и случайно подумал что теорема о ориентированных площадях - чья то злая шутка, написал свой кривоватый алгоритм, но когда узнал что то была не шутка, а теорема древняя - сделал на неё "чит", но идею своего слайсера всё равно забросил, хоть алгоритм и был, да и остался). После того, как вспомнил инциндент с древней теоремой, то подумал, что и в те времена были неплозие концепции изложения материала. И как раз гонка искусственного интеллекта, а древние могли изображать и душу, и интеллект и чувства - просто в одной упряжке. На том и решил, что, чтобы граблей было немного, взять именно такую концепцию изложения.

https://habr.com/ru/articles/792846/

#архитектуры_вычислительных_машин #ОС #машинный_код #процессоры

Этап полировки. Самодельные циклы с параметром в многозвенном «манипуляторе» для работы с данными (генерация карты)

Вообще я не специалист, но эффективные решения - это то, над чем мне нравится ломать голову. Hidden text И кстати о движках вообще любых мне представляется мыслить немаловажным. И о движетелях (на...

Хабр