Обновить
43.75
Рейтинг

Assembler *

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

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

Ловля жуков в чемодане

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

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

На этапе пока я не научился шить ПЗУ, заготовки демки были реализованы ещё в оперативной памяти. И казалось бы, смени адреса, залей в ПЗУ и будет счастье. Но при попытке прошить это в постоянную память, ничего не работало. Попробовал проверить свою программу в эмуляторе и она без проблем выполнила всё именно так, как я от неё ожидал. Код даже работал при записи его частями в УМК, но целиком, со всеми прелестями, вылетал с ошибкой.

И всё никак в толк не мог взять: это лыжи не едут, либо у меня проблемы с ассемблером.

Пробегался по каждой инструкции, стал сам линкером, уже как процессор начал всё исполнять, но ошибку в коде никак не мог найти. И вот тут начинается квест жёсткого аппаратного дебага и трёх недель бессонных ночей.
Читать дальше →
Всего голосов 70: ↑69 и ↓1 +68
Просмотры 7.1K
Комментарии 52

Новости

Анализируем bound checks в Go по CPU профилю

Высокая производительность *Assembler *Системное программирование *Компиляторы *Go *

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


Читать дальше →
Всего голосов 26: ↑23 и ↓3 +20
Просмотры 3.1K
Комментарии 0

Ассeмблерные хаки из книги «xchg rax, rax»

Assembler *Разработка под Linux *
Из песочницы

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

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

Минуточку внимания

Знакомимся с программированием на ассемблере x86

Блог компании RUVDS.com Программирование *Assembler *
Перевод
Tutorial

Архитектура x86 лежит в сердце процессоров, на которых уже более трех десятилетий работают наши домашние компьютеры и удаленные серверы. Умение читать и писать код на низкоуровневом языке ассемблера – это очень весомый навык. Он позволяет создавать более быстрый код, использовать недоступные в Си возможности машин и выполнять реверс-инжиниринг скомпилированного кода.
Читать дальше →
Всего голосов 51: ↑48 и ↓3 +45
Просмотры 12K
Комментарии 15

Война с компилятором и собой: об оптимизациях вещественной арифметики на Эльбрусе

Высокая производительность *Программирование *Assembler *C *
✏️ Технотекст 2021

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

Читать дале
Всего голосов 185: ↑183 и ↓2 +181
Просмотры 22K
Комментарии 114

Как в Java устроено выделение регистров в памяти

Блог компании Издательский дом «Питер» Программирование *Java *Assembler *Алгоритмы *
Перевод

Привет, Хаброжители! Обратите внимание на большую распродажу в честь Старого Нового года.

Когда виртуальная машина Java компилирует ваш исходный код Java в машинный, одна из задач, которые она должна при этом выполнить – решить, где хранить локальные переменные Java и другие подобные временные значения. В вашей машине отсутствует концепция локальных переменных, поэтому на этапе компиляции необходимо определиться, какое место в памяти стека (какой машинный регистр) будет использоваться для хранения каждой переменной. Эта операция называется «выделение регистров». Может показаться, что выделение регистров – сложная абстрактная теоретическая тема, но в этом коротком посте я покажу, как сначала соотнести исходный код Java с теорией, потом понять, как его видит компилятор, а потом – показать результирующий машинный код. В данном случае моя цель – продемонстрировать, что все эти концепции очень легко опробовать на практике с реальным компилятором. 

Читать далее
Всего голосов 25: ↑20 и ↓5 +15
Просмотры 10K
Комментарии 3

Следующий лист дерева на ассемблере в девяти инструкциях и единственном регистре

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


Люди часто думают, что код на ассемблере читается не просто плохо, а очень плохо. Но я думаю, что это совершенно не так.


Я всегда считал, что читаемость кода на совести программистов и язык здесь совершенно не причём.


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


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


Но возможно я ошибаюсь. Увидим далее в статье.

Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Просмотры 5.2K
Комментарии 51

Как я искал клавиатуру с нужным функционалом и в итоге решил создать свой драйвер

Assembler *C *Периферия DIY или Сделай сам
Из песочницы

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

Читать далее
Всего голосов 49: ↑21 и ↓28 -7
Просмотры 13K
Комментарии 88

Как я исправлял Tiobe index

Программирование *Assembler *Статистика в IT

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


Ну и решил опубликовать. Конечно осовременил и укомплектовал картинками.


Надеюсь, эта почти детективная история вам понравится.


Рассказ о том, как работает Tiobe index, как это связано с ассемблером и о моей маленькой роли во всем этом.

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

Музыка на Commodore PET — Faulty Robots

Ненормальное программирование *Assembler *Демосцена Старое железо Звук

После выпуска System Beeps, музыкального альбома для PC Speaker, я не планировал возвращаться к псевдомногоголосой одноканальной музыке в формате подобных крупных самостоятельных релизов, считая тему достаточно раскрытой. Это, конечно, не означало отказа от более утилитарного применения подобных наработок при подходящем случае, например, в ретро-игровых или демосценовых проектах для старых компьютеров. Осенью прошлого года на горизонте появился очередной проект подобного плана от автора популярного Youtube-канала The 8-bit Guy, Дэвида Мюррея — игра Attack of the PETSCII Robots для линейки 8-битных компьютеров Commodore, включая PET, VIC-20 и C64. Я уже сотрудничал с Дэвидом на его предыдущем проекте, игре Planet X3 для MS-DOS. Новая затея как нельзя лучше соответствовала моему интересу к персоналкам до-графической эпохи и большому опыту как в области минималистичного компьютерного звука, так и программировании на ассемблере для процессора 6502, поэтому я срочно вписался в работу над проектом, надеясь на этот раз помимо написания звукового кода поучаствовать и в сочинении музыки.

В рабочем процессе возникали разнообразные проблемы, плавно перетёкшие в небольшой производственный ад (скандалы, интриги и расследования можно найти в серии постов в моём Patreon), в результате чего мой код и звуки были использованы только в версии для VIC-20, а музыку к остальным версиям игры написали другие композиторы. Но у меня оставались наработки в виде рабочего кода для PET и набросков композиций. Было жалко отправлять их в стол, ведь релизы для этой платформы — явление крайне редкое, и нового шанса задействовать то, что уже было сделано, пришлось бы ждать долго. Поэтому, с одобрения Дэвида, я принял решение дописать наброски до полноценных треков и выпустить свой альтернативный саундтрек в виде небольшого альбома под названием Faulty Robots, как в виде аудио, так и в формате самостоятельной программы для PET.

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

Волшебный чемодан

Блог компании RUVDS.com Ненормальное программирование *Assembler *История IT Старое железо
Tutorial
История о закрытии гештальта.


В старшие школьные годы, в библиотеке мне попалась книга «Простейшая микро-ЭВМ», где для школьников подробно объяснялось, как спаять свою вычислительную машину на микропроцессоре КР580ИК80А. Помню, что книгу зачитал просто до дыр, и в целом она определила мою судьбу в области электроники и программирования. Но тогда я понимал, что у меня не хватит пороха и возможностей сделать эту вычислительную машину, так как не было ни средств, ни опыта, ни подходящего наставника. Книгу я вернул обратно в библиотеку, отксерив некоторые листы.

В конце этого года spiritus_sancti обмолвился, что у него есть лишний УМК — Учебный Микропроцессорный Комплект. И тут я понял, вот она — мечта моего детства, она есть в железе и она реальна! И тут же начал просить мне его прислать. И с этого момента начинаются увлекательные предновогодние приключения.
Читать дальше →
Всего голосов 123: ↑122 и ↓1 +121
Просмотры 34K
Комментарии 111

Примеры ассемблерного кода для ZX Spectrum

Assembler *Графический дизайн *Демосцена Старое железо
Tutorial

Я не буду делать длинное вступление. Один знакомый хакер однажды сказал, что 10 строк кода могут быть понятнее и интереснее, чем 1000 слов объяснений. Все эти примеры написаны на ассемблере для архитектуры Z80 и запускаются на ретро-компьютере ZX Spectrum 48k.

Что внутри?
Всего голосов 48: ↑48 и ↓0 +48
Просмотры 15K
Комментарии 26

Умещаем простую 16-битную VM в 125 строк Си

Блог компании RUVDS.com Программирование *Assembler *Виртуализация *C *
Перевод
Tutorial

Это руководство предназначено для тех, кто только начинает изучение Си и хочет получить ценный опыт в области низкоуровневого программирования, а также понять внутреннее устройство виртуальных машин. К завершению статьи у нас будет рабочая регистровая виртуальная машина, способная интерпретировать и выполнять ограниченный набор инструкций ASM, плюс несколько дополнительных программ для тестирования ее работоспособности.
Читать дальше →
Всего голосов 75: ↑73 и ↓2 +71
Просмотры 19K
Комментарии 21

Пишем самомодифицирующуюся программу вычисления факториала под x86

Блог компании RUVDS.com Ненормальное программирование *Assembler *
Перевод

Самомодифицирующиеся программы воспринимаются как нечто магическое, но при этом они весьма просты, и чтобы это продемонстрировать, я напишу такую программу под x86 архитектуру в NASM.
Читать дальше →
Всего голосов 48: ↑43 и ↓5 +38
Просмотры 7K
Комментарии 57

XV6 как ОС для обучения

Open source *Assembler *Системное программирование *C *История IT

Мы уже несколько лет преподаем разработку компонентов учебной операционной системы xv6, и хотим поделиться своим опытом. Этот курс прошли уже около 600 студентов. Если вас заинтересует эта статья, то вы можете ознакомиться с нашим курсом.

После базовых курсов вроде операционных систем часто студенты выходят без реальных практических знаний. Лучше всего можно понять работу операционной системы, написав её самому. Но так как этот процесс может занять не один семестр, в рамках учебного курса можно ограничиться разработкой только ключевых компонентов. Для этого мы используем учебную операционную систему xv6, про которую расскажем ниже, так как она значительно проще Linux или других пользовательских ОС.

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

Простой анализатор кода для программы, написанной на Ассемблере 8051

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

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

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

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

Этап 1. Сначала необходимо преобразовать исходный текст программы к максимально простому виду. С кодом программы из которого удалили все лишнее удобнее работать.

Этап 2. Создал таблицу, в которую занес строки исходной программы,  тип команды, тип операндов, адрес в памяти и т.д.

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

8 ферзей на AVR-ассемблере

Assembler *Программирование микроконтроллеров *Процессоры DIY или Сделай сам Изучение языков
Из песочницы

Фанатам ассемблера посвящается.

Всем привет! Решил подключить матрицу светодиодов 8х8 и вывести на неё решение задачи о 8 ферзях. [Описание см. на Википедии]

Процессор

В качестве процессора я выбрал компактный и шустрый процессор attiny85. Программа будет написана на ассемблере. С небольшими настройками программа должна работать на любом другом процессоре AVR: attiny и atmega.

Дисплей

В качестве дисплея используем матрицу светодиодов, которая состоит из 8 вертикальных рядов и 8 горизонтальных строк со светодиодами.

Читать далее
Всего голосов 18: ↑15 и ↓3 +12
Просмотры 5.2K
Комментарии 5

Пишем Python-расширение на Ассемблере (зачем?)

Блог компании Wunder Fund Python *Assembler *Реверс-инжиниринг *
Перевод

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

Иногда, чтобы полностью разобраться с тем, как что-то устроено, нужно это сначала разобрать, а потом собрать. Уверен, многие из тех, кто это читают, в детстве часто поступали именно так. Это были дети, которые хватались за отвёртку для того, чтобы узнать, что находится внутри у чего-то такого, что им интересно. Разбирать что-то — это невероятно увлекательно, но чтобы снова собрать то, что было разобрано, нужны совсем другие навыки.

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

Эксперимент, о котором я хочу рассказать, пронизан тем же духом. Мне хотелось узнать о том, смогу ли я написать расширение для CPython на чистом ассемблере.

Зачем мне это? Дело в том, что после того, как я дописал книгу CPython Internals, разработка на ассемблере всё ещё была для меня чем-то весьма таинственным. Я начал изучать ассемблер для x86-64 по этой книге, понял какие-то базовые вещи, но не мог связать их со знакомыми мне высокоуровневыми языками.

Вот некоторые вопросы, ответы на которые мне хотелось найти:

— Почему расширения для CPython надо писать на Python или на C?
— Если C-расширения компилируются в общие библиотеки, то что такого особенного в этих библиотеках? Что позволяет загружать их из Python?
— Как воспользоваться ABI между CPython и C, чтобы суметь расширять возможности CPython, пользуясь другими языками?

Читать далее
Всего голосов 19: ↑18 и ↓1 +17
Просмотры 6.8K
Комментарии 0

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