Как стать автором
Обновить
13.84
Рейтинг

Assembler *

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

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

Создание демки специально для HABR — Часть 1

Блог компании RUVDS.com Ненормальное программирование *Assembler *Демосцена Старое железо
Tutorial

Многие из нас любят интеллектуальные игры, всякие головоломки, квесты, стратегии и многое другое. Но что, если игрой является само железо, а сценарий создаёте вы сами? В результате этого рождается невероятно интересная головоломка, которая невероятно меня увлекла на несколько месяцев.

Здесь я хочу поделиться «прохождением» этой «игры», под названием Демка для ПЭВМ «Микроша». В процессе чтения статьи может показаться, что всё просто и очевидно. Это всё так, когда есть документация и описание всех подводных камней. Когда каждый подводный камень ищешь сам, то это всё превращается в невероятно сложный квест.
Читать дальше →
Всего голосов 34: ↑33 и ↓1 +32
Просмотры 1.2K
Комментарии 9

Новости

Контроль переполнения. Как уменьшить длину, увеличивая путь

Программирование *Совершенный код *Assembler *Компиляторы *

Я уже упоминал, каким неприятным сюрпризом оказалось исключение команды INTO из системы команд x86-64, когда я переводил компилятор на эти команды. Давайте разберемся, нужна ли сейчас команда, которая отвечала за контроль целочисленного переполнения еще со времен процессора 8086.

Кстати, а чего вообще прицепились к этому целочисленному переполнению? И зачем для него иметь еще какую-то отдельную проверку? Например, ну, нет же никакой отдельной команды INTD проверки деления на число с нулевым значением.

Читать далее
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 1.6K
Комментарии 5

Динамический анализ инструкций с помощью Intel Pin

Assembler *Системное программирование *Реверс-инжиниринг *
Tutorial

Исследование и изменение исполняемого кода в процессе работы программы – что может быть интересней? Intel Pin – фреймворк для динамической бинарной инструментации (Dynamic Binary Instrumentation, DBI) исполняемого кода. Этот фреймворк обладает широкими возможностями по анализу и модификации кода. Мне было очень интересно посмотреть вживую на доступные в нем функции по анализу отдельных инструкций. И наконец подвернулась такая возможность.

В статье будет рассмотрено получение адреса перехода для инструкции jmp, перехват вызова функции, находящейся за таблицей инкрементальной линковки (Incremental Linking Table, ILT) – и все это средствами Pin.

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

Симулятор x86 подобного процессора на машине Тьюринга

JavaScript *Программирование *Assembler *Алгоритмы *
Из песочницы

Привет, Хабр! В свободное от работы время по вечерам мне нравится воплощать в жизнь свои сумасшедшие идеи. В один из таких вечеров родилась мысль реализовать компилятор кода в машину Тьюринга. Осознав всю тщетность бытия сложность реализации, было принято решение начать с чего-то более простого – симулятора простенького процессора со своим собственным ассемблером, в котором команды выполнялись бы с помощью различных состояний машины Тьюринга, а данные хранились бы на одной ленте. В конечном итоге удалось осуществить практически первоначальную задумку, а именно получить одну единственную машину Тьюринга, способную выполнять скомпилированную из NASM подобного ассемблера программу без какого-либо внешнего взаимодействия.

Читать далее
Всего голосов 70: ↑69 и ↓1 +68
Просмотры 9.9K
Комментарии 6

Когда разница адресов имеет значение

Программирование *Совершенный код *Assembler *Компиляторы *

Среди бесчисленных режимов адресации архитектуры х86 существует один такой…
Впрочем, почему «бесчисленных» режимов? Если разобраться, то их немного. Со времен первого процессора 8086 адресация укладывалась в байт, который имел аббревиатуру MODRM, где «MOD» - это собственно режим адресации (т.е. mode), «R» - регистр и «M» - очевидно, память (memory).
Если не рассматривать дальнейшее совершенствование системы адресации с помощью SIB-байта, то, поскольку под MODE в MODRM-байте выделено всего два бита, получается, что возможны всего-навсего четыре режима адресации.

Читать далее
Всего голосов 14: ↑14 и ↓0 +14
Просмотры 3.5K
Комментарии 15

Как собрать зловредный компилятор

Информационная безопасность *Программирование *C++ *Assembler *Компиляторы *
Перевод

А вы знали, что бывает такая атака на компилятор через бэкдор, защититься от которой невозможно? В этом посте я покажу вам, как реализовать такую атаку менее чем в 100 строках кода. Кен Томпсон, создатель операционной системы Unix, рассказывал о такой атаке еще в 1984 году в своей лекции по поводу присуждения Премии Тьюринга. Такая атака по-настоящему опасна и сегодня, причем, не известно решений, которые обеспечивали бы полную неуязвимость от нее. Вирус  XcodeGhost, открытый в 2015 году, проводит атаку через бэкдор по методу, предложенному именно Томпсоном. Я покажу здесь атаку Томпсона на языке   C++, но этот пример легко адаптировать для любого другого языка. Дочитав эту статью, вы крепко задумаетесь, а осталось ли у вас вообще какое-то доверие компилятору.

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

Читать далее
Всего голосов 63: ↑61 и ↓2 +59
Просмотры 15K
Комментарии 26

Вычисляем π на первом процессоре от Intel — 4004

Ненормальное программирование *Assembler *Математика *Программирование микроконтроллеров *
Перевод

Как-то мне пришла в голову мысль о том, насколько же быстрее современные процессоры по сравнению с ранними экземплярами. Да, можно размышлять об этом эмпирически - зная тактовую частоту и особенности микроархитектуры (как устроен конвейер, сколько есть ALU, и т.д.), можно прикинуть производительность Intel 4004. Пусть и не в FLOPS'ах, ибо нативная поддержка чисел с плавающей запятой появилась позже. Но это будет весьма грубая прикидка, так как у этого процессора есть несколько интересных черт: разрядность только 4 бита (а не 64, как у большинства современных машин), очень скудный набор инструкций (нет даже AND'a и XOR'a!) и ограничения переферии (в частности памяти не так уж и много).

Поэтому я решил исследовать вопрос на практике. В качестве бенчмарка выбор пал на вычисления числа π. В конце-то концов, даже ENIAC в дремучем 1949 году справился с этой задачей! [2]

Читать далее
Всего голосов 109: ↑108 и ↓1 +107
Просмотры 13K
Комментарии 25

Использование procmon от sysinternals для диагностики проблемных мест в исполняемом коде

Assembler *Visual Studio * *
Из песочницы

Сразу хочу сказать, что это только демонстрация возможностей procmon для определения проблемных мест в программном обеспечении. 1С83 была выбрана для опытов из-за неочевидности способа поиска точки входа в процедуру проверки наличия установленных эмуляторов ключа. Она выполняется через различное время после старта порядка 3~10 мин, и вызывает появление окна «нарушение целостности системы» с последующим закрытием приложения. Я призываю всех использовать только лицензионное программное обеспечение. Рассматривать эту статью, как описание возможности взлома, нет смысла. Хотя бы потому, что 1С83 давно взломана и без меня. Любой 1с-ник за секунду вам скажет, как ее запустить без ключа.

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

Итак, ставим фильтр по имени процесса 1с.

Читать далее
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 4.2K
Комментарии 5

Создание игр для NES на ассемблере 6502: скроллинг фона

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


Содержание:

  • Использование PPUSCROLL
  • Системы камер
  • Подготовка фонов к скроллингу
  • Реализация автоскроллинга
  • Логические фильтры
  • Подводим итог
  • Домашняя работа

Мы уже рассмотрели отрисовку и перемещение спрайтов, но фоны мы пока только отрисовывали. NES имеет возможность плавного скроллинга фонов с точностью до одного пикселя в кадр.
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 2.6K
Комментарии 1

Сортировка массивов фиксированной длины с применением SIMD

Программирование *Assembler *

Простая сортировка массива очень простая задача, в то время как эффективная сортировка очень сложная, во многом из-за простоты задачи.

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

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 3.6K
Комментарии 8

Как мы делали Warface для Денди

Assembler *FPGA *Демосцена Старое железо Игры и игровые консоли
✏️ Технотекст 2021
В октябре 2020 мне написал мой друг Андрей Скочок, работающий в Mail.ru, и предложил сделать для них необычную промоакцию.

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



Читать дальше →
Всего голосов 246: ↑246 и ↓0 +246
Просмотры 37K
Комментарии 38

Создание игр для NES на ассемблере 6502: движение спрайтов

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


14. Движение спрайтов


Содержание:

  • Zero-Page RAM
  • Подпрограммы
  • Управление регистрами для подпрограмм
  • Наша первая подпрограмма: отрисовка игрока
  • Соединяем всё вместе
  • Домашняя работа

В предыдущей главе мы создали графику фона, которая должна отображаться под спрайтами. Хотя добавление фонов делает наш проект похожим на настоящую игру, он пока всё равно совершенно статичен и не отличается от картинки. В этой главе мы узнаем, как перемещать спрайты по экрану. Для этого нам нужно внести изменения в способ отрисовки спрайтов.
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 2K
Комментарии 0

Создание игр для NES на ассемблере 6502: графика фона

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


13. Графика фона


Содержание:

  • Таблица паттернов фона
  • Составление таблицы имён
  • Таблица атрибутов
  • Дополнительные изменения
  • Использование проектов NES Lightbox
  • Домашняя работа

Прежде чем мы начнём перемещать спрайты по экрану, я хотел бы рассказать, как на NES работает графика фона. Мы изучили механику графики фона в Главе 9, а в этой главе мы рассмотрим код, необходимый для отображения фонов на экране.
Читать дальше →
Всего голосов 1: ↑1 и ↓0 +1
Просмотры 1.4K
Комментарии 0

Создание игр для NES на ассемблере 6502: ветвление и циклы

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


11. Ветвление и циклы


Содержание:

  • Управление потоком в языке ассемблера
  • Ветвление
  • Обзор опкодов циклов и ветвления
  • Ещё один пример ветвления
  • Выполнение сравнений
  • Использование сравнений в циклах

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

Создание игр для NES на ассемблере 6502: спрайтовая графика

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод
image


10. Спрайтовая графика


Содержание:

  • Спрайтовые данные
  • Object Attribute Memory (OAM)
  • Работа с NES Lightbox
  • Отображение спрайтов в игре

Итак, мы рассмотрели устройство PPU на высоком уровне, и теперь готовы изучить подробности отрисовки спрайтов. К концу этой главы вы будете знать, как создавать тайлы спрайтов и отрисовывать их на экране.
Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 3.7K
Комментарии 5

Создание игр для NES на ассемблере 6502: Picture Processing Unit (PPU)

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод
image


9. Picture Processing Unit (PPU)


Содержание:

  • Палитры
  • Таблицы паттернов
  • Спрайты
  • Фоны

«Игра» для NES состоит из трёх компонентов: отображаемой на экране графики, пользовательского ввода через какой-нибудь контроллер и звука для музыки и звуковых эффектов. Игра использует пользовательский ввод для изменения отображаемой графики и воспроизводимого звука, пока пользователь не отключит систему. В этой серии глав мы рассмотрим каждый из этих трёх компонентов, начав с того, как NES отображает графику.
Читать дальше →
Всего голосов 4: ↑4 и ↓0 +4
Просмотры 2K
Комментарии 1

Создание игр для NES на ассемблере 6502: рефакторинг

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


8. Рефакторинг


Содержание:

  • Константы
  • Файл заголовка
  • Импорт и экспорт ca65
  • Собственная конфигурация компоновщика
  • Соединяем всё вместе
Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 3.2K
Комментарии 2

Создание игр для NES на ассемблере 6502: заголовки и векторы прерываний

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


6. Заголовки и векторы прерываний


Содержание:

  • Заголовки iNES
  • Выделение процедур с помощью .proc
  • Векторы прерываний

В предыдущей главе мы разобрали часть «main» тестового проекта, которая задаёт цвет фона, а затем входит в бесконечный цикл. Однако этот код составляет всего 13 из 44 строк исходного кода тестового проекта. В этой главе мы изучим оставшуюся часть кода тестового проекта и узнаем ещё несколько опкодов.
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 2.7K
Комментарии 1

Создание игр для NES на ассемблере 6502: оборудование NES и знакомство с ассемблером

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод
image


4. Оборудование NES


Содержание:

  • Консоль
  • Картриджи
  • Как это связано с нашим тестовым проектом?
  • Цвета и палитры
  • Возвращаемся к тестовому проекту

Прежде чем приступать к разбору ассемблера, начнём с обзора самой NES.
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 3.8K
Комментарии 3

Изучаем язык ассемблера на примере TSR программы под MS-DOS. Часть 1

Программирование *Assembler *Изучение языков
Из песочницы

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

Материал рассчитан на новичков в ассемблере, студентов, которым пришлось столкнуться с «динозавром» в виде MS-DOS, и может быть интересен тем, кто хочет немного узнать как функционировали операционные системы на заре своего существования.

Писать мы будем резидентную программу (TSR), которая при завершении возвращает управление оболочке операционной системы, но остается в памяти и продолжает своё существование. В современном мире близкий аналог этого понятия — демон/служба.

Программа будет выполнять следующие функции:

– вывод текста вниз экрана по таймеру,

– переключение режима отображения шрифта: italic/normal,

– русификация,

– запрет на ввод прописных русских букв,

– резидентные часы,

– вывод бинарного представления символа.

Кто готов погрузиться в палеолит — погнали!

В палеолит
Всего голосов 19: ↑16 и ↓3 +13
Просмотры 5.4K
Комментарии 17

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