169 похожих чатов

Несколько месяцев назад КТ315 предлагал делать библиотеки для фасма в

виде инклудов (плюс магия). По мотивам всего этого возник достаточно бесполезный проект. В пакете MASM32 существует утилита bintodb, которая преобразовывает бинарные файлы в ассемблерные .inc. Делает она это самым простым и очевидным способом - db nn,nnn,n.... При этом размер файла увеличивается более чем в три раза (две десятичных цифры в среднем и запятая). Нужно написать программу, которая оптимизирует размер прилагаемого исходника так, чтобы результат компиляции не изменился.

Можно использовать: директивы db/dw/dd/dq и rb/rw/rd/rq (1), оператор dup (2), десятичные и шестандацатеричные числа (3), символьные константы вместо чисел (4), строки в одинарных и двойных кавычках. Нельзя использовать всё остальное (возможности препроцессора, другие директивы и возможности ассемблера, числа с плавающей точкой, инструкции x86 😁). Ограничения выбраны такие, чтобы не возникало искушения реализовать inflate на макроязыке фасма :)

Язык программирования любой, важен только результат. Сгенерированный ассемблерный файл должен собираться в fasm, но можно предусмотреть опциональную совместимость с masm (отличия ниже). Максимальная длина строк 110 символов, заполнение строк в среднем не менее 50% (5). В файле должны быть только переводы строк и печатаемые ASCII-символы (0x0a, 0x0d, 0x20...0x7e).

1. При использовании rb в конце файла нули не попадут в выходной файл, но исходник всё равно должен резервировать правильное количество байтов. В masm отдельных директив резервирования нет, можно использовать ? и dup(?).
2. В masm круглые скобки у dup обязательны, в fasm их можно опустить, если в списке повтора только один элемент.
3. В fasm есть шестандцатеричные числа с префиксом $. Они самые короткие, но их нет в masm.
4. dd 'ABCD' в fasm это dd 0x44434241, в masm это dd 0x41424344.
5. Как-нибудь так: (file_size / ((110 + 2) * num_lines)) * 100.

13 ответов

70 просмотров

Стикер

а можно пример входных и выходных данных?

Mixail Frolov
а можно пример входных и выходных данных?

Вот компилируется .bin, потом читаешь его в программе, оптимизируешь по шаблонам максимально короткие директивы (например, 100 одинаковых значений можно заменить на dup), и записываешь куда-нибудь в выходной файл .asm.

Fasm их разворачивает

Тогда в чат по Python скинешь.

s54820- Автор вопроса
Арч-чан 🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀
Зачем? Буду писать на питоне.

Я же сказал: бесполезный проект :) Что касается питона, то можно во флудилку уйти, если интересно. Лично я считаю, что попытка реализовать это на асме без прототипа на любом высокоуровневом языке чревата годами отладки. Вот когда алгоритм будет — можно попытаться. Может даже получится обогнать какой-нибудь Си — там миллионы сравнений.

s54820
Я же сказал: бесполезный проект :) Что касается пи...

ну пару простых методов(перевод на dd из db и dup вполне и без прототипа получится сделать)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта