Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Демка Gespensterwald умещается в 62 байта кода языка ассемблера x86

AssemblerКомпьютерная анимацияЗвук


В начале октября 2020 года программист-энтузиаст HellMood из группы DESiRE выпустил демку для MS-DOS/FreeDos под названием Gespensterwald. Программа размером в 62 байта написана на ассемблере. Демка сейчас занимает первое место в соревновании разработчиков Inércia Demoparty 2020 Combined Tiny Intro.
Читать дальше →
Всего голосов 76: ↑75 и ↓1+74
Просмотры15K
Комментарии 13

За что я люблю ассемблер?

ПрограммированиеAssemblerСистемное программирование

Этой статье уже почти 3 года. Однако сегодня я решил подредактировать её, дополнить и выложить, наконец, на Хабр.

Читать далее...
Всего голосов 56: ↑53 и ↓3+50
Просмотры18K
Комментарии 122

Начнём…

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

Оставляйте записи в комментариях, чтобы понять направление, в котором двигаться. Мне интересно, что вы хотите видеть (асм для начинающих, реверсинг, низкоуровневый win32 кодинг) и как вы хотите это видеть (подкаст, статьи и тд).
Всего голосов 85: ↑75 и ↓10+65
Просмотры1.6K
Комментарии 130

Ядро Linux перевалило за 10 млн строк

Open source
Простой анализ последней версии ядра Linux 2.6.27 показывает, что объём кода в нём превысил 10 млн строк. Правда, в это число входят и пустые строки, комментарии и текстовые файлы.

Если профильтровать результат с помощью SLOCCount, то более глубокий анализ выдаёт точное число полезных строк кода: 6 399 191. Из них 96,4% написано на C, а 3,3% — на ассемблере, третье место занимает Perl (0,1%). Число строк увеличивается с каждой новой версией ядра, которые выпускаются примерно каждые 90 дней.

Более половины объёма кода сейчас — это аппаратные драйверы, на втором месте — директория arch/, в которой находится код для различных архитектур, поддерживаемых в Linux.

По гипотетической оценке SLOCCount, чтобы переписать Linux с нуля, требуется работа 200 программистов в течение девяти с половиной лет и обойдётся это в $268 млн (при средней зарплате программиста). Стоимость ядра тоже растёт с каждым апдейтом.

via Slashdot
Всего голосов 69: ↑57 и ↓12+45
Просмотры6.1K
Комментарии 86

Закат Веба?

Разработка веб-сайтов
7 марта прошлого года W3C, после 10-летнего перерыва, возобновила работу над HTML.

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

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

Я решил выложить их в виде статьи, переработав и снабдив иллюстрациями и примечаниями.


Содержание:

  1. Вступление
  2. Сценарии гибели
    • Гибель ментальная, или HTML — новый ассемблер
    • Гибель физическая, или HTML — новый Turbo Pascal
  3. Все ли так серьезно?
    • Ментальной гибели не будет, если web-технологии будут правильно поняты
    • Физической гибели не будет, если web-технологии будут развиваться
  4. Заключение
  5. Примечания


В настоящий момент мир вступает в эпоху расцвета богатых web-приложений.

Программы, работающие через Веб, все больше вытесняют традиционные десктопные приложения. Gmail, Google Map, online-офис, даже web-операционные системы… Список можете продолжить сами.

Однако, по мере продвижения web-приложений, все больше возрастают требования к основным клиентским web-технологиям: xHTML, CSS, JavaScript.

И, если эти технологии не будут поспевать за все более возрастающими требованиями, это приведет к их медленному закату…
 
Читать дальше →
Всего голосов 242: ↑189 и ↓53+136
Просмотры3.2K
Комментарии 282

Немного попрограммируем…

Занимательные задачки

Задача #1 «О Квадрантах»



Итак сразу к делу: как-то когда я занимался ассемблером у меня в лабораторной работе попалась очень простенькая задача, ее текст: Найти квадрант окружности ( номер ее четверти) по координатам точки, которая вводится с клавиатуры. Все было бы ничего…
Читать дальше →
Всего голосов 8: ↑5 и ↓3+2
Просмотры818
Комментарии 22

Немного логики…

Занимательные задачки
image

Задача #2 «Позитивные автоматы»



Для тех, кто не хочет читать:

Найти значение выражения: |x — |y||
X, Y — любые целые ( и отрицательные тоже )

Ограничение: нельзя пользоваться sub, dec… и любое другое вычитание, нельзя пользоваться регистрами флагов и бинарными операциями. (в частности сдвигами)
Все что у вас есть: je, cmp (нельзя смотреть флаги), jmp, inc, mov. (я же сказал, немного)

Для того, что бы лучше разобраться в задаче:

Есть такая замечательная штуковина, называется:
Машина с неограниченными регистрами (МНР)
Итак, зачем это? Лично для меня — расшевелить мозги.

Теперь попробуем в деле!

Читать дальше →
Всего голосов 20: ↑16 и ↓4+12
Просмотры1.7K
Комментарии 41

Оптимизация производительности в C++ приложениях (Windows)

Чулан
Все думаю уже знают, но все же. Иногда нужно оценить, сколько процессорного времени занимает выполнение тех или иных функций программы(преимущественно я говорю сейчас о C++). Ну и ниже привожу свой способ, простой, но вполне меня устраивает.

Можно проинструментировать код различными специальными инструментами(не пробовал, вроде DevPartner один из них, думаю их немало сейчас).
Функции привязанные к времени не очень то хорошо работают, в WinAPI или в каком либо другом API я их не нашел.

Две функции которые мне весьма пришлись по вкусу:

QueryPerformanceFrequency
QueryPerformanceCounter

Вообще, тут можно заканчивать чтение статьи, чуть погуглить и хватит:)

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

Собственно, QueryPerformanceFrequency возвращает количество элементарных операций которые может выполнить ваш процессор за одну секунду.
QueryPerformanceCounter возвращает количество элементарных операций, которое он уже выполнил с момента запуска компьютера.

«GetTickCount» — вроде как альтернатива, но ее точности мне как то не хватило, либо меня не устроило ее поведение, которое не слишком то внятно описано в MSDN, скорее ее можно использовать только для UI-расчетов.

Вычислить, сколько cекунд занимает вызов какой либо функции (метода класса) DoWork() с использованием QueryPerformanceFrequency/QueryPerformanceCounter собственно весьма просто:

LARGE_INTEGER performanceCounter;
::QueryPerformanceFrequency(&performanceCounter);

LARGE_INTEGER performanceCounterStart;
::QueryPerformanceCounter(&performanceCounterStart);

DoWork();

LARGE_INTEGER performanceCounterEnd;
::QueryPerformanceFrequency(&performanceCounterEnd);

double timeElapsed = (double*)(performanceCounterEnd) - (double*)(performanceCounterEnd)



Грешный код конечно, я лишь показал идею, может вдруг кому и пригодится.
Вообще, QueryPerformanceCounter, это «ReaD Time Stamp Counter(RDTSC)» инструкция ассемблера(вру о5, название инструкции #0f, #31, хотя постесняюсь сказать, на каких процессорах она работает, за что прошу меня простить:)

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

CalculateSinus (cobst Double &x)
{
    return sin(x);
}

static const double x = PI / 4;
double y = CalculateSinus(x)


преобразуют так, что вообще ее не нужно будет считать во время выполнения, и y=sin(PI/4) будет просчитан на стадии компиляии.
Всего голосов 12: ↑5 и ↓7-2
Просмотры1.7K
Комментарии 9

Самая маленькая игра в мире (58 байт)

Assembler
Для тех, кто читал статью в песочнице: добавил раздел «Можно ли сделать игру меньше?».

Прочитав историю одного байта, вспомнил свою историю.

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

Первый прототип, размером 80 байт, был готов на следующий день. (Поскольку о контроле версий тогда я даже не догадывался, то остается верить воспоминаниям). С этого момента началась моя борьба за байты. Помню, довольно быстро размер был уменьшен до 65 (или около того), дальше каждый байт давался все с большим и большим трудом. К концу лета результат был 58 байт.

Сюжет и управление


Вы несетесь по трассе на грузовике с двумя прицепами. Слева от вас разделительная полоса, справа обочина укрытая травой. На дороге встречаются люди и деревья (может ямы). Ваша задача: не сбивать людей и не врезаться в деревья (не попадать в ямы).
Управление: стрелки влево-вправо — поворот; Esc — пауза.

Скриншоты и код
Всего голосов 329: ↑326.5 и ↓2.5+324
Просмотры45K
Комментарии 133

Код. Тайный язык информатики

Профессиональная литература
Код. Тайный язык информатики
Автор: Чарльз Петцольд
Твердый переплет, 512 стр.
Эта книга на ozon.ru / books.ru


Есть довольно много книг для программистов из категории «must read» и о некоторых из них уже много раз упоминали на хабре (например, «Совершенный Код» Макконнелла). Об этой же книге я видел не так много упоминаний, хотя она заслуживает этого. «Код», на мой взгляд, является лучшей книгой о компьютерах, их устройстве и — главное — сути программирования. Книга, не только объясняющая как и почему работают компьютеры, но и приучающая к инженерному мышлению.
Что в ней такого особенного?
Всего голосов 122: ↑113 и ↓9+104
Просмотры42K
Комментарии 52

Легальный взлом как разминка для ума

Assembler
IT-шники часто придумывают себе упражнения для ума, пытливый ум постоянно требует разминки. Хочу рассказать об одном из самых жестких и спорных способах – взлом специально защищенных программ-головоломок (Часто их называют crackme).

Одно из мест, где такие головоломки собраны — crackmes.de.

Здесь находятся много интересных программ, на которых можно испробовать свои силы по взлому. Никакого криминала – программы специально написаны для этой цели (так называемые crackme и reverseme);

Часто любят говорить «Все защиты можно взломать». Поковыряв некоторые из crackme вы возможно измените своё мнение.
Читать дальше →
Всего голосов 84: ↑79 и ↓5+74
Просмотры13K
Комментарии 42

Релиз KolibriOS 0.7.7.0

Блог компании KolibriOS Project TeamOpen sourceAssembler
image

Завершилась работа над выпуском новой версии. С полным списком изменений можно ознакомиться здесь. Скачать систему можно c сайта KolibriOS.

UPD: В связи с хабраэффектом сайт системы открывается через раз, поэтому для разгрузки хабраюзер fzfx создал зеркало, за что ему персональное спасибо.
Всего голосов 87: ↑77 и ↓10+67
Просмотры4.6K
Комментарии 126

Разработка на ассемблере в Linux

Чулан
Вообще программирование на ассемблере в Linux мало распространено и занимаются им, разве что, фанаты ассемблера. Сегодня мы и поговорим о программировании на ассемблере и инструментарий.
Читать дальше →
Всего голосов 29: ↑26 и ↓3+23
Просмотры6.4K
Комментарии 19

Защита программного обеспечения: Основные ошибки при программировании блока регистрации программы (или один бит может изменить мир)

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

Читать дальше →
Всего голосов 39: ↑27 и ↓12+15
Просмотры2.9K
Комментарии 71

Программирование PIC16F876A. Собираем схему с плавно мигающим светодиодом

Программирование микроконтроллеров
Эта статья направлена на новичков в программировании микроконтроллеров семейства PIC16 от Microchip. В нашем случае, я выбрал немного превосходящий микроконтроллер для таких задач, а именно — PIC16F876A. Программирование микроконтроллера будем производить в MPLAB IDE.

Цель работы: собрать схему, которая будет мигать светодиодом, внимание, с применением ШИМ.

И так, цель задачи обозначили. Теперь перейдем к реализации наших планов.
Читать дальше →
Всего голосов 65: ↑55 и ↓10+45
Просмотры30K
Комментарии 65

Пишем свою ОС: Выпуск 1

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

Каждый решает проблему обучения по-своему. Кто-то читает много литературы, кто-то старается поскорее перейти к практике и разбираться по ходу дела, кто-то пытается объяснять друзьям всё, что сам изучает. А мы решили совместить эти подходы. Итак, в этом курсе статей мы будем шаг за шагом демонстрировать, как пишется простая операционная система. Статьи будут носить обзорный характер, то есть в них не будет исчерпывающих теоретических сведений, однако мы будем всегда стараться предоставить ссылки на хорошие теоретические материалы и ответить на все возникающие вопросы. Чёткого плана у нас нет, так что многие важные решения будут приниматься по ходу дела, с учётом ваших отзывов.
Читать дальше →
Всего голосов 293: ↑282 и ↓11+271
Просмотры212K
Комментарии 223

Пишем свою ОС: Выпуск 2

Системное программирование
Здравствуйте. Это снова мы, iley и pehat, с долгожданной второй статьёй из цикла «Пишем свою ОС» (первая статья здесь). Извиняемся за большую паузу после первой статьи, нам понадобилось некоторое время, чтобы определить дальнейшее направление нашей работы. В этом выпуске мы кратко рассмотрим защищённый режим 32-битных процессоров Intel. Ещё раз подчеркнём, что мы не ставим себе целью дать исчерпывающие теоретические данные.
Читать дальше →
Всего голосов 102: ↑98 и ↓4+94
Просмотры41K
Комментарии 67

Использование макросов в MASM на примере создания окна

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

Недавно наткнулся на те проекты и решил выложить некоторые из них, может кому пригодится…

Читать дальше →
Всего голосов 56: ↑53 и ↓3+50
Просмотры8.2K
Комментарии 22

Язык Go. Пишем эмулятор CHIP-8

Чулан
Из песочницы
Язык Go отпразновал недавно первый год своей жизни. Интерпретатору CHIP-8 стукнуло уже под сорок.
Любителям новых языков и старого железа посвящается этот пост — в нем мы будем писать эмулятор виртуальной машины CHIP-8 на языке Go.

О том, как настроить окружение для работы с Go писали уже не раз. За последнее время мало что изменилось, разве что версия для Windows стала более стабильной.
Установив все согласно инструкциям, приступаем к изучению внутренностей CHIP-8.
Читать дальше →
Всего голосов 8: ↑7 и ↓1+6
Просмотры3.1K
Комментарии 0

CGI-программирование на ассемблере?!? – Легко!

Ненормальное программирование
Из песочницы
Статья гуляет в интернете уже довольно давно, но, как автор думаю имею право на ее перепост здесь. Многое (если не все) написаное здесь устарело, и может показаться бесполезным с первого взгляда, однако пройдя этот путь, спустя 6 лет могу сказать, это не оказалось лишним. Итак.
В этой статье я хочу рассказать о CGI интерфейсе вообще, его реализации для windows и использовании при написании CGI-программ языка ассемблер в частности. В рамки этой статьи не входит полное описание CGI, так-как в Интернете материала по этому вопросу просто море и пересказывать все это здесь я просто не вижу смысла.
Читать дальше →
Всего голосов 59: ↑47 и ↓12+35
Просмотры7.8K
Комментарии 62