Pull to refresh
  • by relevance
  • by date
  • by rating

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

Assembler *Computer Animation *Sound


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

Начнём…

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

Оставляйте записи в комментариях, чтобы понять направление, в котором двигаться. Мне интересно, что вы хотите видеть (асм для начинающих, реверсинг, низкоуровневый win32 кодинг) и как вы хотите это видеть (подкаст, статьи и тд).
Total votes 85: ↑75 and ↓10 +65
Views 1.6K
Comments 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
Total votes 69: ↑57 and ↓12 +45
Views 6.1K
Comments 86

Закат Веба?

Website development *
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.

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

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

Entertaining tasks

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



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

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

Entertaining tasks
image

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



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

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

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

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

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

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

Читать дальше →
Total votes 20: ↑16 and ↓4 +12
Views 1.7K
Comments 41

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

Lumber room
Все думаю уже знают, но все же. Иногда нужно оценить, сколько процессорного времени занимает выполнение тех или иных функций программы(преимущественно я говорю сейчас о 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) будет просчитан на стадии компиляии.
Total votes 12: ↑5 and ↓7 -2
Views 1.9K
Comments 9

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

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

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

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

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

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


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

Скриншоты и код
Total votes 329: ↑326.5 and ↓2.5 +324
Views 45K
Comments 133

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

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


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

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

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

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

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

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

Релиз KolibriOS 0.7.7.0

KolibriOS Project Team corporate blog Open source *Assembler *
image

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

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

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

Lumber room
Вообще программирование на ассемблере в Linux мало распространено и занимаются им, разве что, фанаты ассемблера. Сегодня мы и поговорим о программировании на ассемблере и инструментарий.
Читать дальше →
Total votes 29: ↑26 and ↓3 +23
Views 7.2K
Comments 19

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

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

Читать дальше →
Total votes 39: ↑27 and ↓12 +15
Views 2.9K
Comments 71

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

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

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

И так, цель задачи обозначили. Теперь перейдем к реализации наших планов.
Читать дальше →
Total votes 65: ↑55 and ↓10 +45
Views 30K
Comments 65

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

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

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

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

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

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

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

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

Читать дальше →
Total votes 56: ↑53 and ↓3 +50
Views 8.3K
Comments 22

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

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

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

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

Abnormal programming *
Sandbox
Статья гуляет в интернете уже довольно давно, но, как автор думаю имею право на ее перепост здесь. Многое (если не все) написаное здесь устарело, и может показаться бесполезным с первого взгляда, однако пройдя этот путь, спустя 6 лет могу сказать, это не оказалось лишним. Итак.
В этой статье я хочу рассказать о CGI интерфейсе вообще, его реализации для windows и использовании при написании CGI-программ языка ассемблер в частности. В рамки этой статьи не входит полное описание CGI, так-как в Интернете материала по этому вопросу просто море и пересказывать все это здесь я просто не вижу смысла.
Читать дальше →
Total votes 59: ↑47 and ↓12 +35
Views 8K
Comments 62

FTP-протокол + WinSocks на примере простого FTP-клиента (зеркала) на ASM!

Abnormal programming *
Это еще одна статья «давно гуляющая» по интернету, и опять, как автор, сделаю перепост. Думаю пригодиться и тут.

Введение


В этой статье я не ставлю себе целью пересказать все RFC касающиеся протокола FTP, коих не мало, в них вы сможете найти информацию гораздо полнее, попытаюсь лишь в общих чертах познакомить Вас с протоколом FTP и основными приемами работы с ним со стороны клиента.
Читать дальше →
Total votes 10: ↑7 and ↓3 +4
Views 11K
Comments 9