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

Assembler *

Язык программирования низкого уровня

Сначала показывать
Порог рейтинга
Уровень сложности

Изучаем AsmX

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 7.6K
Assembler *
Из песочницы

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

Читать далее
Всего голосов 30: ↑4 и ↓26 -22
Комментарии 46

Новости

Разбираемся с использованием неблокируещего ввода-вывода в ОС Linux. Пишем пример сервера на голых системных вызовах

Время на прочтение 11 мин
Количество просмотров 9.8K
C++ *Assembler *Системное программирование **nix *

Как обычно пишут сервер, если не особо заботиться производительности? Программа запускается, затем начинает принимать входящие соединения от клиентов и для каждого клиента запускает новый поток, который занимается обслуживанием этого клиента. Если вы используете какой-нибудь, прости господи, Spring или Flask или там Poco, то он что-такое внутри себя и делает - разве что потоки можно переиспользовать, то есть брать из некого пула. Это всё довольно удобно, но не слишком эффективно. Скорее всего, ваши потоки, обслуживающие клиентов, живут недолго и большую часть времени ожидают либо получения данных от клиента, либо отправки их клиенту - то есть ждут возвращения системных вызовов. Создание потока ОС - довольно дорогая операция, как и переключение контекста между потоками ОС. Если вы хотите уметь обслуживать много клиентов эффективно, надо придумать что-то другое. Например, коллбеки. Но это довольно неудобно.

Читать далее
Всего голосов 10: ↑6 и ↓4 +2
Комментарии 16

Исследование возможностей оптимизации ПО на примере хеш-таблицы

Уровень сложности Средний
Время на прочтение 10 мин
Количество просмотров 3K
Assembler *C *
Из песочницы

Исследование возможностей оптимизации ПО на примере хеш-таблицы.

Читать далее
Всего голосов 9: ↑5 и ↓4 +1
Комментарии 7

О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования

Уровень сложности Средний
Время на прочтение 17 мин
Количество просмотров 16K
Python *Java *C++ *Assembler *

Цель настоящей статьи - изучить лямбда функции: чем они отличаются от обычных функций и изучить, как они реализованы в С++, Python 3 и Java.

На протяжении этой статьи я буду использовать godbolt.org, чтобы компилировать код и изучать машинный код или байт код. Я думаю, что при чтении статьи может быть удобнее смотреть не на приведённый машинный код в статье, а на этом сайте.

Читать далее
Всего голосов 21: ↑18 и ↓3 +15
Комментарии 41

Истории

Неестественное выравнивание

Время на прочтение 5 мин
Количество просмотров 5.1K
Совершенный код *Assembler *Компиляторы *

Вот уже 10 лет прошло, как я переводил свои средства программирования в среду x86-64 для Windows 7. А как будто вчера было! Поскольку тогда многие особенности этой среды были для меня внове, они вызывали недоумение. Вот типичный пример.

Читать далее
Всего голосов 24: ↑22 и ↓2 +20
Комментарии 4

Поиск констант-«матрешек» для сокращения размера данных в программе

Время на прочтение 3 мин
Количество просмотров 1.6K
Совершенный код *Assembler *Компиляторы *

Речь пойдет о безымянных константах в программе, которые часто называют литералами. Если такой литерал нельзя использовать как непосредственный операнд в машинной команде, компилятору приходится выделять – а куда деваться! – этому литералу собственную память и далее оперировать адресом этой памяти.

Разумеется, всякий уважающий себя компилятор проверяет, а не было ли уже точно такого же литерала ранее, и тогда использует уже имеющуюся ссылку, не выделяя заново памяти.

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 25

Разработка BIOS на языках высокого уровня

Уровень сложности Сложный
Время на прочтение 11 мин
Количество просмотров 17K
Блог компании Timeweb Cloud Ненормальное программирование *Assembler *Системное программирование *C *
Туториал
Ничего лишнего: материнская плата, видеокарта и ROM-BIOS

Меня давно волнует вопрос, как подступиться к разработке на голом железе, на чистом си. Хотелось понять, каким же образом идёт запуск BIOS, u-boot, grub и прочих первичных загрузчиков. Ведь необходимо перейти от ассемблера к тёплому ламповому си и соблюсти условие, собрать всё это в линукс любимым компилятором gcc.

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

Здесь я хочу свести основные моменты разработки BIOS в одном месте и разобраться обо всех проблемах, которые я получил во время своих опытах в разработке (первая и вторая части).
Читать дальше →
Всего голосов 134: ↑133 и ↓1 +132
Комментарии 57

Лабораторный таймер: импортозамещение из подручных материалов

Время на прочтение 6 мин
Количество просмотров 4K
Assembler *Программирование микроконтроллеров *Развитие стартапа Нанотехнологии

Мне понадобился простой программируемый таймер, он же реле времени. Простая штуковина, которая в указанное время замыкает контакты. Одним словом, ничего сложного.

Вот только с началом санкций даже такое простое лабораторное оборудование купить стало невозможно. Вот хороший пример: http://www.optimum-lab.ru/product/tajmer-laboratornyj/. Отличное лабораторное устройство, но как почти прямо пишет продавец - купить его сейчас не так и просто. Другой случай: https://www.chipdip.ru/product/at8n-24-240v-ac-dc. Не такая удобная и привлекательная разработка как предыдущий вариант, зато в наличии. Но стоит почему-то непотребно много, когда для такой задачи достаточно обычного реле и таймера. А этот вариант: https://www.chipdip.ru/product0/8002563209 совмещает нездоровую цену и нездоровые сроки поставки.

Читать далее
Всего голосов 40: ↑37 и ↓3 +34
Комментарии 44

Демосцена на релейном компьютере

Время на прочтение 3 мин
Количество просмотров 4.6K
Ненормальное программирование *Работа с видео *Assembler *Работа с 3D-графикой *Демосцена
Туториал

Какой компьютер без демосцены? Обратимся к классике от @Manwe_SandS@frog:

До моего визита на Assembly'99 я каждый pаз удивлялся pезультатам голосования на заpубежных demo party. Мне было непонятно, как столько людей могут отдавать голоса за pаботы состоящие из тупой (я пpошу пpощения, но это именно так) последовательности эффектов - плазмы, туннеля, огня, вpащающегося куба (тоpа) и пpочих подобных вещей, не объединенных никаким сюжетом, не несущими никакой идеи.

То что нужно! Возьмём первый попавшийся релейный компьютер и понаделаем эффектов.

Читать далее
Всего голосов 43: ↑43 и ↓0 +43
Комментарии 6

Реверс инжиниринг для самых маленьких на практике

Время на прочтение 11 мин
Количество просмотров 17K
Assembler *Реверс-инжиниринг *CTF *
Из песочницы

Скомпилированное приложение является «чёрным ящиком». Чтобы туда заглянуть, восстановить алгоритм работы применяется реверс‑инжиниринг. Это непростой навык с высоким порогом входа. В статье мы попробуем взять дизассемблер, несложную задачку и пойдём в бой. Материал будет полезен тем, кому хочется с чего-то начать и погрузиться в тему реверса.

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

Читать далее
Всего голосов 47: ↑47 и ↓0 +47
Комментарии 19

Процедурная генерация 3D-мешей для интро на 64 КБ

Время на прочтение 7 мин
Количество просмотров 3.9K
Программирование *C++ *Assembler *Работа с 3D-графикой *Демосцена
Перевод

В предыдущей статье [перевод на Хабре] мы рассказали, как генерируются текстуры в демо H – Immersion. На этот раз мы изучим ещё один важный инструмент для создания демо нужного размера — процедурную геометрию.

В частности, поскольку в нашем рендеринге используются традиционные полигоны, мы написали процедурный генератор мешей. Мы покажем, как благодаря тщательно подобранным методикам можно создать разнообразие форм или убедить в этом зрителя, как это сделали мы.
Читать дальше →
Всего голосов 32: ↑32 и ↓0 +32
Комментарии 3

Симулятор-Отладчик x86-кода

Уровень сложности Сложный
Время на прочтение 2 мин
Количество просмотров 2.4K
Assembler *Отладка *
Кейс

Разрабатывая код для очень узких мест, привычного стандартного набора средств и отладчиков зачастую не хватает, когда нам требуется отладить фрагмент алгоритма именно в конкретном случае, в конкретном состоянии окружения и массивов данных.

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

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

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

Читать далее
Всего голосов 24: ↑23 и ↓1 +22
Комментарии 19

Создание нового языка для микроконтроллеров

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 12K
Assembler *Программирование микроконтроллеров *
Мнение

Некоторое время я был занят написанием простенького редактора для языка ассемблер под ARM Cortex семейства микроконтроллеров (подробности в моих статьях), и вот сейчас, поднакопив некоторый опыт как в части самого ассемблера так и способов написания программ в них решился на написание нового редактора.

Плюс еще подоспел интерес к RISC‑V архитектуре и было принято решением делать редактор который смог бы редактировать программы на ассемблере для различных архитектур (в том числе может быть и с лагеря AVR кто нить захочет присоединиться).

В общем подумалось: а что если попытаться создать asm‑base'д язык программирования который при выборе архитектуры просто бы транслировался автоматически в асм инструкции выбранной платформы?

Читать далее
Всего голосов 33: ↑24 и ↓9 +15
Комментарии 97

Эмоциональная история процессоров для первых компьютеров с 70-х до начала 90-х: AIM PowerPC

Уровень сложности Средний
Время на прочтение 13 мин
Количество просмотров 4.9K
Assembler *Компьютерное железо История IT Старое железо Процессоры
Обзор

В первой части были обзорно описаны многие разные процессоры до середины 90-х. Во второй части был обзор процессоров мейнфреймов IBM. Недавно мне предоставилась возможность немного попрограммировать для PowerPC, на основе чего появилась возможность добавить ещё одну часть к этим обзорам.

Читать далее
Всего голосов 29: ↑28 и ↓1 +27
Комментарии 10

Имплементация маппера MMC1 ассемблер 6502 nes/famicom/dendy

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 1.8K
Assembler *

Игры не использующие мапперы в NES ограничены, 16 кб PRG ROM (хранилище программного кода) и 8 кб CHR ROM (хранилище графики). С развитием разработки игр на NES, встал вопрос, а как увеличить данные ограничения и на помощь пришли микросхемы мапперы. Что же такое мапперы мы и разберем сегодня и как их использовать в своем коде.

Читать далее
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 4

Статус флаги ассемблера 6502 nes/famicom/dendy

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 1.9K
Assembler *

Для более глубокого понимания как происходит ветвление в программах написанных на ассемблере 6502 необходимо углубиться в флаги и понять какие команды влияют на тот или иной флаг. Это поможет избежать множество ошибок связанных с не очевидностью ветвления вашей программы.

Читать далее
Всего голосов 20: ↑18 и ↓2 +16
Комментарии 2

Assembler в Go: техники ускорения и оптимизации

Уровень сложности Сложный
Время на прочтение 8 мин
Количество просмотров 4K
Высокая производительность *Ненормальное программирование *Assembler *Go *

Привет, Хабр!

В прошлой статье я рассказывал об ускорении копирования элементов одного слайса в другой с помощью средств Go. В этот раз я решил пойти дальше и посмотреть, что можно достичь, начав разговаривать с процессором на его языке. Я выбрал одну из оптимизированных версий функции Copy в качестве объекта исследования из решения задачи VK Cup'22/23, которая копирует только синий компонент RGBA в Paletted картинку. Если интересно узнать как её ускорить почти в 10 раз, прошу под кат.

Читать далее
Всего голосов 30: ↑29 и ↓1 +28
Комментарии 1

Сканер установленных перехватчиков в памяти процесса

Время на прочтение 98 мин
Количество просмотров 7K
Информационная безопасность *Assembler *Delphi *Разработка под Windows *


В статье будет рассмотрен один из методов поиска изменений в памяти процесса, на основе построения полной карты уязвимых к перехвату адресов. Рассмотрена работа со списками загрузчика, ручным разбором таблиц импорта/отложенного импорта/экспорта/TLS загруженных файлов, c обработкой форварда функций и ApiSet редиректов.
Будет показана методика доступа в 64 битное адресное пространство чужого процесса из 32 битного кода через статически сформированный ассемблерный шлюз, так и подход с применением автоматически генерируемого гейта.
Будет дано много комментариев «почему» применяется тот или иной подход, а также описание различных проблемных ситуаций, основанных в том числе как на собственном опыте, так и на разборе кода системного загрузчика, поэтому будет интересна и подготовленным специалистам.
Читать дальше →
Всего голосов 54: ↑54 и ↓0 +54
Комментарии 24

Вывод спрайтов, создание анимации, программирование nes/famicom/dendy

Уровень сложности Средний
Время на прочтение 4 мин
Количество просмотров 1.1K
Assembler *

Ранее я уже писал статью о выводе спрайтовой графики на экрана с использованием регистра OAMDATA ($2004), но это подходит лишь для экспериментов и вывода некой статической картинки. Но движение либо анимация будет приводить к появлению различных артефактов наслоению спрайтов, моргание кадра, и так далее. Что бы этого избежать следует сформировать для каждого кадра буфер спрайтов и вывести на экран.

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 0

Вклад авторов