The Bird of Hermes
Aiwan \ (•◡•) / _bot
Я имею ввиду учить, чтобы использовать на практике, а не просто потому что надо)
когда ты учился читать в детстве, ты использовал букварь или словарь Даля?
The Bird of Hermes
Не приходится компостировать себе мозг с выравниванием стека и запоминанием какие регистры сохраняются/не сохраняются
The Bird of Hermes
Aiwan \ (•◡•) / _bot
С такой точки зрения лучше вообще с ДОС начинать
тогда можно ожидать еще большее недовольство
The Bird of Hermes
тогда можно ожидать еще большее недовольство
Ну так лучше быть последовательным
Alex
Я имею ввиду учить, чтобы использовать на практике, а не просто потому что надо)
На практике скорей всего x86-64. Просто для обучения лучше arm или risc-v
­
А если ARM не поддерживает AArch64?
Alex
А если ARM не поддерживает AArch64?
Значит не нужно учить ассемблер
disba1ancer
Значит не нужно учить ассемблер
скорее выкинуть такой проц на помойку
КТ315
почему? Я слышал, что он уже почти не используется
Используется, потому что более совместим со старыми ПК, а ещё вес меньше на выходе. В настоящий момент лучше писать на 32-х битную систему, чем на 64-х битную. Минусов от этого практически никаких.
КТ315
Регистров больше на х64 зато, писать удобнее если программа не состоит из чисто вызовов функций
Надо учиться использовать как можно меньше регистров. И, в любом случае, есть память ещё. Так что не вижу ярких причин писать на x64.
notme
Надо учиться использовать как можно меньше регистров. И, в любом случае, есть память ещё. Так что не вижу ярких причин писать на x64.
🤔😳 Привет КТ315! Точно меньше? Наоборот же -> больше информации распихивать по регистрам - это хорошо
notme
А что хорошего?
скорость доступа
The Bird of Hermes
Регистры быстрее памяти
КТ315
скорость доступа
А где я писал "использовать меньше регистров, и больше памяти"? Я написал "использовать меньше регистров", я на x86 справляюсь и с EAX/EDX/ECX/EBX/ESI/EDI/EBP, даже не сохраняя их. Всё дело в продуманности алгоритма и его последовательности. Например, при обработке данных с файла - ты можешь, например, писать в тот же файл, и держать на дескриптор один регистр, а можешь в конце открыть файл ещё раз, либо писать в новый файл - и вот у тебя один свободный регистр. Скорость от этого особо не пострадает.
КТ315
Регистры быстрее памяти
Ты тоже не понял.
КТ315
Вообще, всё там на x86 нормально с регистрами. Вот если бы на x86_64 было на 20 больше - я бы ещё понял. А так... фигня.
КТ315
я такого не говорил... просто нет ничего плохого в использовании всех доступных регистров и учиться их использовать в меньшем количестве - зачем? не понятно...
Потому что это тоже оптимизация, именно самая нужная - алгоритмическая. Нужно не за инструкциями дёргаться (скорость исполнения той или иной инструкции), а уметь нормально, правильно написать алгоритм, который при выполнении сможет сэкономить один регистр\одно обращение к памяти или что-то ещё. Именно убрать что-то.
­
Или мигалку светодиодом - до 30 килобайт.
notme
Чтобы хеловорлд не раздуть до 1.5 гигов.
1,5 гига чего? статической памяти?😄
The Bird of Hermes
Ты тоже не понял.
На мой взгляд уменьшение количества используемых регистров имеет смысл только если ты их сохраняешь
КТ315
В общем, если на x86 вы не можете написать более-менее большой код, который вообще не будет сохранять регистры, и при этом который не будет дублироваться (то есть, чтобы алгоритмически ещё нормально выглядел) - значит вы делаете что-то не так\вы ещё не гуру.
notme
Экзешник
запакуй UPX'ом )
КТ315
запакуй UPX'ом )
Ох как же после такого скорость исполнения упадёт))) атя-тя.
­
Нахера? Я не настолько говнокодер, чтобы получать хеловолд в гиг :-)
notme
Ох как же после такого скорость исполнения упадёт))) атя-тя.
с чего она упадёт? он же распакуется и будет работать как и незапакованный
notme
Нахера? Я не настолько говнокодер, чтобы получать хеловолд в гиг :-)
т.е. вы пользуетесь специально не всем набором регистров? )
notme
распакуется.
2 секунды распаковка 10 минут работы несущественно
КТ315
2 секунды распаковка 10 минут работы несущественно
В профайлере это чёрным по белому, и для пользователя вполне существуенно. Чем больше кода и размер упакованной программы - тем больше распаковщик будет потеть, больше нагрузка и задержка.
­
? что за бред
https://t.me/proasm/79017
notme
В профайлере это чёрным по белому, и для пользователя вполне существуенно. Чем больше кода и размер упакованной программы - тем больше распаковщик будет потеть, больше нагрузка и задержка.
ещё раз 2 секунды распаковки и 10 минут работы 10*60= 600секунд 2/600 = 0,3% времени работы вы ж сами говорите за алгоритмы, лучше улучшить алгоритм и получить +10% чем бодаться с 0.3% не так ли?
КТ315
К слову, а у UPX есть вообще проверка на выходной размер? Если я скормлю ему 1 килобайтную программку на ассемблере, которая будет ЯВНО меньше кода распаковщика UPX - он выдаст мне на выходе "упаковнную" программу размером в 2-10 кб?))
Alexey
мой helloworld жрет целых 2 кб , но какой-то мужик сказал: что можно и до одного кб уменьшить
notme
https://t.me/proasm/79017
это тоже бред т.к. использование большего кол-ва регистров может наоборот уменьшить бинарник
КТ315
ещё раз 2 секунды распаковки и 10 минут работы 10*60= 600секунд 2/600 = 0,3% времени работы вы ж сами говорите за алгоритмы, лучше улучшить алгоритм и получить +10% чем бодаться с 0.3% не так ли?
Это расточительство. Когда ты пишешь код, который опытный человек просто не писал бы. Когда ты упаковываешь свой ненужный код, и добавляешь ещё больше ненужного кода и ненужных операций, и сравниваешь это с чем-то мнимым, чтобы оправдать свой ненужный код.
КТ315
Скажет, что исполняемый файл не сжимается.
Эх, тогда ладно) было бы забавно.
Alexey
что за алгоритмы то
­
Ладно, пойду пока дальше работать, а то тикеты накапливаются, потом поржу с вас.
notme
К слову, а у UPX есть вообще проверка на выходной размер? Если я скормлю ему 1 килобайтную программку на ассемблере, которая будет ЯВНО меньше кода распаковщика UPX - он выдаст мне на выходе "упаковнную" программу размером в 2-10 кб?))
не знаю, думаю есть, а если и нет, то человек должен сам проконтроллировать, если он не писатель 1,5гиговых хеллоу ворлдов, конечн ) таким можно не анализировать )
notme
Ладно, пойду пока дальше работать, а то тикеты накапливаются, потом поржу с вас.
только регистров лишних не заюзайте! а то потом экзешники раздуваются!
Alexey
сортировка пузырьком
не понял, что это
notme
не понял, что это
алгоритм сортировки )
КТ315
не понял, что это
Вещь, которую все новички пишут, но использовать на деле будут только лет через 10.
notme
КТ315
😆 учусь у вас )
Аккуратнее, тут забанить быстро могут)
notme
упс, точно, это же админ.... прошу прощения ) просто шутки про 1,5 гиговый хеллоу ворлд ну тоже не понятные, и я в этом же духе начал
Баир
Вопрос по поводу размеров: почему простенькая программка на nasm после ld весит 9 с лишним килобайт? Она не делает практически ничего. Внутри только объявлен и инициализирован массив на 25 dd.
Aiwan \ (•◡•) / _bot
соедини bss и data, будет меньше
КТ315
соедини bss и data, будет меньше
Там не только это. Небось, линковщик ещё и статические библиотеки впихнул, а может что ещё хуже... Там надо с ног до головы анализировать выходной исполняемый файл, чтобы собрать все нужные флаги\конфиг, и на выходе получить нормальный файл. Либо просто взять FASM.
Баир
Попробовал щас "hello world" на fasm и nasm. После компиляции fasm выдал 160 байт, а nasm 8,6 килобайт.