Как стать автором
Поиск
Написать публикацию
Обновить
58.45

Assembler *

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

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

Общаемся с дисплеем SSD1306 по i2c

Время на прочтение4 мин
Количество просмотров19K

Все любители электронных самоделок когда-нибудь приходят к желанию отобразить работу своей поделки на экране в виде текста или графики. Самый бюджетный способ сделать это — обратиться к алфавитно-цифровому дисплею типа LCD1602 или LCD2004, общение с которыми происходит либо по параллельному интерфейсу, либо через переходник-конвертор в I2C. Второй способ — использовать графический дисплей, их множество, например SSD1306 с размером матрицы 128x64 пикселя.

Читать далее

Самодельные библиотеки ассемблера FASM

Время на прочтение3 мин
Количество просмотров5.2K

Здесь я немного расскажу о библиотеках strnum.inc и myMSVlib.dll, которые я сам сделал. Они могут кому-то пригодится. Я уверен что написал не без ошибок. Все ниже перечисленные функции сохраняют состояние регистров, кроме регистра eFLAGS. Исходный код прилагается. Все функции возвращают значение через EAX.

Строки должны иметь в конце завершающий нуль.

Читать далее

Assembler. Установка интерпретатора и запуск первой программы через DOSBox

Время на прочтение4 мин
Количество просмотров72K

В данном курсе планируется разобрать основные особенности программирования на самой простой реализации assembler – TASM. Этих знаний лично мне вполне хватило, чтобы на отлично сдать ЭВМ в институте и закончить все лабораторные работы. Во многих уроках будет домашние задание по их мотивам.

Для начала давайте установим наш старенький компилятор.
Ссылка

Читать далее

Как увеличить ресурсы в десять раз

Время на прочтение6 мин
Количество просмотров5.4K

Прошу прощения за заголовок, похожий на желтые СМИ, и странный эпиграф, который я объясню ниже. Речь пойдет не о том, как увеличить скорость процессора или емкость диска на порядок, а всего лишь о разновидности данных, которые могут быть включены в исполняемый модуль формата EXE. Эти данные, на мой взгляд, не совсем удачно названы (или же зря буквально переведены) как «ресурсы».

Для тех, кто не интересовался подобными деталями, поясню, что формат, под привычной сейчас всем аббревиатурой EXE, в отличие от самого примитивного COM-формата (т.е. просто готового образа выполняемых команд), имеет внутри себя различные таблицы настроек. Главным образом, это было сделано для того, чтобы такой EXE-модуль можно было загружать в произвольное место памяти. Затем с помощью этих таблиц можно до собственно запуска программы настроить адреса команд и данных на нужные значения, если где-то применена абсолютная, а не относительная адресация.

В эпоху Windows EXE-формат еще усложнился, и закономерно появилась возможность хранить в нем как неотъемлемую часть не только команды и простые данные, но и, например, картинки или элементы интерактивного диалога. В самом деле, если Ваша программа рисует красивый курсор в виде какой-нибудь стрелочки «выточенной из стали», неудобно же таскать вместе с программой еще и отдельный файл с изображением этой стрелки. Гораздо удобнее поместить изображение прямо внутрь EXE-файла, указав, что это не просто картинка, а именно курсор. Кстати, при создании ярлыка программы, Windows ищет в ресурсах EXE-файла элемент типа «иконка» и высвечивает его как значок ярлыка по умолчанию.

Читать далее

Перемножение чисел без умножения

Время на прочтение1 мин
Количество просмотров6.8K

Как-то вдруг задумался о перемножении чисел без использования инструкций умножения.

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

В результате недолгого мозгового штурма получился следующий ниже код, в регистре esi получаем произведение eax * ebx.

Разумеется представленная версия кода ограничивает результат 32-мя битами, но ведь разрядность при желании можно и расширить, главное - концепция.

Читать далее

Разместить FORTH в 512 байтах

Время на прочтение25 мин
Количество просмотров6.5K

Оригинал текста Июнь 10, 2021 - 38 минут чтения

Программное обеспечение полно своих зависимостей, если смотреть достаточно глубоко. Компиляторы, написанные на языке, на котором они компилируются, - самый очевидный, но не единственный пример. Чтобы скомпилировать ядро, нам нужно работающее ядро. Линкеры, системы сборки, оболочки. Даже текстовые редакторы, если вы хотите писать код, а не просто загружать его. Как разорвать этот цикл?1 С тех пор как проблема начальной загрузки впервые привлекла мое внимание, я стал интересоваться этой уникальной областью программной инженерии. Не из страха, что кто-то попытается реализовать атаку на доверие, а просто как интересный вызов.

11 лет назад vanjos72 описал на Reddit то, что он называет мысленным экспериментом: что если бы вас заперли в комнате с IBM PC, на котором нет операционной системы? Какое минимальное количество программного обеспечения вам понадобилось бы для начала, чтобы вернуться к комфортной работе?

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

Самым минимальным вариантом может быть простая программа, которая принимает ввод с клавиатуры, а затем переходит на нее. Поскольку подпрограммы ввода с клавиатуры в BIOS реализуют escape-коды alt+numpad, вам даже не нужно писать код преобразования базы.2Более того, циклу даже не нужно условие завершения а просто пишите в буфер обратно, пока не столкнетесь с существующим кодом и не перезапишете точку перехода. Такой подход занимает всего 14 байт.

Путь в четвёртое.

Процессор, эмулирующий сам себя — может быть быстрее самого себя

Время на прочтение1 мин
Количество просмотров38K

Современный мир ПО содержит настолько много слоёв, что оптимизации могут быть в самых неожиданных местах. Знакомьтесь - год 2000, проект HP Dynamo. Это эмулятор процессора PA-8000, работающий на этом же процессоре PA-8000, но с технологией JIT. И реальные программы, запускающиеся в эмуляторе - в итоге работают быстрее, чем на голом процессоре.

td;dr - всё сказано в заголовке

Читать далее

Benchmark CPU's Instructions (just before loading the OS) — XCHG vs XOR, XOR, XOR

Время на прочтение2 мин
Количество просмотров3.1K

Возможно не только мне интересно, а каков микрокод инструкции XCHG на RISC для x86 CISC?Например ни для кого не секрет, что на языках высокого уровня, чтобы обменять значениями две переменные "X" и "Y", нужна ещё одна переменная, скажем "Z".

X=5, Y=7
Z=Y
Y=X
X=Z
X=7, Y=5

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

X=5, Y=7
XCHG X, Y
X=7, Y=5

Я даже предполагал что сама аббревиатура "XCHG", это ни что иное как "XOR CHANGE", сразу скажу что подтверждения этой догадки я нигде не встречал. Почему XOR CHANGE? Возможно потому что обмен между регистрами происходит с участием логической команды XOR.

X=5, Y=7
XOR X, Y
XOR Y, X
XOR X, Y
X=7, Y=5

Что ж, я решил проверить свою теорию, промерив продолжительность исполнения инструкции "XCHG" и её аналога "XOR, XOR, XOR". Ну а чтобы результаты были максимально детерминированными, я решил запустить всё это дело ещё до загрузки какой-либо операционной системы, т.е. сразу после того, как БИОС компьютера решит загружаться с определённого накопителя. В общем для максимальной чистоты эксперимента, я разместил приведённый ниже код прямо в MBR загрузочного диска (в своём случае я использовал флешку).
Следующий код повторяет инструкцию "XCHG EDI, EAX" 7 раз, а инструкцию "XOR" - 21 раз ну и накапливает затраченные тики процессора. Цикл для каждой тестируемой команды повторяется по 10000 раз. После чего всё это прокручивается ещё и ещё (всего 20 раз), в итоге вычисляется среднее. Как по мне, тест получается довольно "чистый", более-менее детерминированный. Ну а что касается того, равны ли по продолжительности исполнения команда XCHG и три команды XOR, то судя по этому тесту, XCHG выполняется на 5% быстрее, что никак не вписывается в мою теорию :)

Читать далее

Duff's device или loop unrolling в Си своими руками

Время на прочтение5 мин
Количество просмотров6.8K

Выглядит ли следующий код валидным С++ кодом? Если да, то какое значение будет выведено в результате его работы?

Читать далее

Туториал по FASM (Windows x32 API/Win32API), «Hello world!»

Время на прочтение6 мин
Количество просмотров47K

Здесь рассказывается о FASM (ассемблере), WinAPI. И напишем первую программу на FASM под Windows.

Читать далее...

Перепрограммирование GameBoy за счёт бага в Pokemon Yellow

Время на прочтение10 мин
Количество просмотров5.1K

Pokemon Yellow - это карманная вселенная со своими правилами. В ней можно покупать и продавать предметы, тренировать покемонов, побеждать других тренеров — но нельзя менять правила самой игры. Нельзя построить себе дом, поменять музыку или даже переодеться. Точнее, так было задумано. На самом деле есть последовательность валидных команд (типа перемещения из одного места в другое и манипуляций с предметами), которая позволяет превратить игру в Pacman, тетрис, Pong, MIDI-проигрыватель и что угодно ещё.

Читать далее

Ломаем зашифрованный диск для собеседования от RedBalloonSecurity. Part 0x02

Уровень сложностиСложный
Время на прочтение25 мин
Количество просмотров18K

По мотивам
Часть 0x00
Часть 0x01
Часть 0x02

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

Через терни к звездам

Уверены, что отличите ассемблер от других языков?

Время на прочтение9 мин
Количество просмотров26K


Немногие смело признают, что могут ошибиться в идентификации ассемблера, ведь это по-своему особенный язык. Однако не спешите с выводами, а лучше пройдите небольшой тест, который не просто позволит взгляуть на него в ином свете, но и проверит вашу осведомленность в этой сфере.
Читать дальше →

Ближайшие события

Создание графики для nes/dendy

Время на прочтение3 мин
Количество просмотров4.8K

Предыдущие мои статьи рассказывают о том как начать программировать под денди на ассемблере. Мы научились отрисовывать спрайты и background, так же мельком обсудили что такое таблица атрибутов и таблица имен, так же мы разобрались как прочитать контроллер. В тех статьях Я использовал chr от игры super mario bros 2 потому как не художник, но все же для создания игры мне пришлось искать инструменты какое мне помогут в создание своей графики для игры. Под катом этапы разработки графики.

Читать далее

Пишем плагин отладки для SNES игр в IDA v7

Время на прочтение36 мин
Количество просмотров3.7K


Приветствую,


Моя очень старая мечта сбылась — я написал модуль-отладчик, с помощью которого можно отлаживать SNES (Super Nintendo) игры прямо в IDA! Если интересно узнать, как я это сделал, "прошу под кат" (как тут принято говорить).

Читать дальше →

Считывание контроллера nes (dendy) на ассемблере

Время на прочтение3 мин
Количество просмотров3.7K

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

Читать далее

Печальная правда о пропуске копий в C++

Время на прочтение4 мин
Количество просмотров13K


Пропуск копий (copy elision) – это оптимизация компилятора, которая, как и следует из имени, устраняет лишние операции копирования и перемещения. Она аналогична классической оптимизации размножения копий, но выполняется конкретно для объектов C++, которые могут иметь нестандартные конструкторы копирования и перемещения. В этой статьей я продемонстрирую пример, в котором очевидная ожидаемая от компилятора оптимизация на практике не происходит.
Читать дальше →

Программирование NES (dendy), assembler 6502

Время на прочтение6 мин
Количество просмотров12K

У меня с детства была мечта написать игру для любимой приставки денди, шло время, мечта то появлялась то затихала снова. Она меня направляла в сторону магии программирование, и вот прошло больше 20-ти лет я программист, и снова в который раз пытаюсь постигнуть магию той самой денди что так будоражило моё воображение в тяжелом но счастливом детстве. Сегодня Я расскажу вам как постиг секреты этой магии, наконец то смог вывести спрайты на экран и научился рисовать фон, и надеюсь это будет не последняя мая статья на Хабре.

Мечта под катом

Рассматриваем отдельные биты на снимке микросхемы: как действовать, когда архитектура неизвестна

Время на прочтение24 мин
Количество просмотров9K

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

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

Читать далее

Ломаем зашифрованный диск для собеседования от RedBalloonSecurity. Part 0x01

Уровень сложностиСложный
Время на прочтение50 мин
Количество просмотров23K

По мотивам
Часть 0x00
Часть 0x01
Часть 0x02

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

Продолжить приключение