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 ответов

66 просмотров

Стикер

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

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

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

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

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

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

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

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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта