LINUX.ORG.RU

Есть идеи как улучшить?

 


1

2

Всем привет. Вот написал программу, которая переводит десятичное число в двоичное. Мне хотелось бы узнать, можно ли сделать какие нибудь улучшения, или команды написать, которые лучше подойдут?
Вот ссылка на github

Ответ на: комментарий от Unicode4all

А круг сможешь нарисовать на ассемблере?

Нет.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от peregrine

Да. Мало какой программист в силах тягаться с современным компилятором в плане оптимизаций.

Если это и является правдой, то только лишь оттого, что мало какой программист вообще возится со всякими ассемблерами и умеет на них писать. Человек пока что может оптимизировать лучше современных компиляторов. Можно наверное приделать какое-нибудь ИИ к компилятору, и может быть тогда действительно... Но современные компиляторы устроены не так. См Есть идеи как улучшить? (комментарий)

SZT ★★★★★
()

Почему все просто подряд идет? Где DSL?

Deleted
()
Ответ на: комментарий от beastie

Перепиши на портабельном ассемблере (aka C).

Никакой портабельный ассемблер в принципе невозможен. То, что Си так называется, это заслуга того, что обычные компьютеры очень сильно похожи. А вы попробуйте эффективно откомпилировать этот Си в ассемблер компьютера Сетунь, или например в https://en.wikipedia.org/wiki/Piet_(programming_language) (да, можно придумать такой процессор, для которого Piet будет ассемблером). Можно вообще придумать такие архитектуры, где понятия указателя вообще нет в традиционном смысле этого слова, и Си туда никак не отобразить эффективно, например всякие dataflow архитектуры https://habrahabr.ru/post/122479/ или FPGA

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 2)
Ответ на: комментарий от SZT

Те, которые умеют не задают столь дурацких вопросов. И да, разработчиков на асме мало.

peregrine ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

У тебя такая каша в голове иди на вики почитай что есть X Windows System и как она развивалась. Кроме того не мешай реальный режим работы процессора под которым работает дос и баребоны и защищённый режим процессора,который ты пытаешься примазать к графическому - это разные вещи,концептуально.

Silerus ★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Да даже вот пример, я добавлял системный вызов в ядро линукс. На си я не мог обратиться к системному вызову, а на ассемблере смог.

Ты просто не знаешь си.

man syscall

anonymous
()
Ответ на: комментарий от Silerus

ты пытаешься примазать к графическому -

А как я пытаюсь примазать?

u0atgKIRznY5
() автор топика
Ответ на: комментарий от Silerus

реальный режим работы процессора под которым работает дос

Я думаю, что в досе, когда переключались в графический режим, для игр, всё также оставалось в реальном режиме, потому как ос не работала в защищённом. А классно да, что есть разные ос? Да, графический режим из пользовательского пространства, типа xwindows, можно дать любой дизайн для оконной среды. В windows я такого многообразия не встречал ( или встречал ). Я вот думаю что нет дизайна в старых windows из-за особенностей вывода графических объектов.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

Зачем вы пытаетесь вещать о том, что совершенно не понимаете?

Во-первых, не xwindows, а X Window System. Во-вторых, получить доступ к графике без неё можно ровно так же, ибо X-ы обычный пользовательский процесс, с привелегиями для доступа к железу. Для примера - svgalib. Реальный режим в данном случае отличается только тем, что привилегий ни у кого выпрашивать для доступа к железу не надо.

vodz ★★★★★
()
Ответ на: комментарий от SZT

А вы попробуйте эффективно откомпилировать этот Си в ассемблер компьютера XXX

Вот только C - это будет последний из распространённых языков, которого не будет на этой хитрозадой архитектуре. :)

vodz ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

На ассемблере никакие прерывания биоса из юзерспейса ты не вызовешь.

anonymous
()
Ответ на: комментарий от u0atgKIRznY5

Еще раз графического режима не существует для процессора. В графический режим переключается видеокарта(ega vga vesa), потому говорить о переключение процессора в графический режим это глупо. Реальный и защищенный режим - эти режимы связаны с выделением и доступу к памяти. Дос работает в реальном режиме, в независимости от того переключена ли графичкская карта в него или нет. Что это значит - это значит что по имеет полный доступ ко всему объему оперативной памяти и может свободно обращаться к ней. Это связанно с ее однозадачностью. Когда игра запускается сама дос спит, отдавая все ресурсы игре. Современные ОС работают в защищенном режиме работы процессора, перейдя в него выйти в реальный очень сложно. Что это значит - это значит что каждой программе выделяется определенное пространство памяти, причем для программы оно является монокуском, со своей внутреней нумерацией ячеек, любая попытка выйти из своего куска памяти приводит к падению программы.

Silerus ★★★★
()
Ответ на: комментарий от vodz

Зачем вы пытаетесь вещать о том, что совершенно не понимаете?

Во-первых, не xwindows, а X Window System. Во-вторых, получить доступ к графике без неё можно ровно так же, ибо X-ы обычный пользовательский процесс, с привелегиями для доступа к железу. Для примера - svgalib. Реальный режим в данном случае отличается только тем, что привилегий ни у кого выпрашивать для доступа к железу не надо.

Вы ничего нового не написали.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от Silerus

отому говорить о переключение процессора в графический режим это глупо.

А кто так говорит кроме вас?

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

Ого, да я наверное больше вас знаю.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

DOS работал в реальном режиме и чтобы переключаться в графический режим, использовали функции bios для переключения в графический режим.

- цитируя вас. Вот где вы говорите про графический режим. А насчет знаний - я давно убедился, что вы ограниченный делитант, причнм сами же себя ограничиваете

Silerus ★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Вы ничего нового не написали.

Pardon? А зачем вам что-то новое? Вы старое хоть поймите вначале, прежде чем вещать.

vodz ★★★★★
()
Ответ на: комментарий от Silerus

цитируя вас. Вот где вы говорите про графический режим. А насчет знаний - я давно убедился, что вы ограниченный делитант, причнм сами же себя ограничиваете

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

u0atgKIRznY5
() автор топика
Ответ на: комментарий от vodz

Pardon? А зачем вам что-то новое? Вы старое хоть поймите вначале, прежде чем вещать.

Вот вопрос. Вы когда вирус будете писать, вы будете использовать умножение на десять как я, или обойдётесь mul eax, 10? Насколько опасно оставлять свой код на ассемблере, если потом вдруг ради знаний придётся писать нечно подобное.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от Silerus

А насчет знаний - я давно убедился, что вы ограниченный делитант, причнм сами же себя ограничиваете

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

u0atgKIRznY5
() автор топика
Ответ на: комментарий от Silerus

Чтобы вам было понятнее, напишу. DOS работал в реальном режиме. А из реального можно переключаться в графический режим, и чтобы это сделать используют функции bios.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

вы будете использовать умножение на десять как я

надо умножить на 8 и на 2 сдвигами и сложить. Чтоб никто не догадался причём тут это вообще.

vodz ★★★★★
()
Ответ на: комментарий от Silerus

А насчет знаний - я давно убедился, что вы ограниченный делитант, причнм сами же себя ограничиваете

Ну ничё, я когда нибудь буду много знать.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от vodz

надо умножить на 8 и на 2 сдвигами и сложить. Чтоб никто не догадался причём тут это вообще.

Манера написание кода. Тот кто часто выкладывает свой код, оставляет отпечатки можно сказать, и по коду может быть потом ясно, кто это написал.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

От умения читать ассемблерные листинги толку в разы больше, чем от писанины на нем.

anonymous
()
Ответ на: комментарий от u0atgKIRznY5

DOS работал в реальном режиме. А из реального можно переключаться в графический режим, и чтобы это сделать используют функции bios.

Ох ты ж, блин!

i-rinat ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

из реального можно переключаться в графический режим

Хорошо. Раз ты все равно это повторяешь несмотря на то, что тебе несколько раз пояснили за реальный и защищенный режим, тогда просто скажи: что ты понимаешь под «реальным» режимом и «графическим» режимом?

Ну ничё, я когда нибудь буду много знать.

Звучит как угроза 🙂

Unicode4all ★★★★★
()
Последнее исправление: Unicode4all (всего исправлений: 1)
Ответ на: комментарий от Unicode4all

Хорошо. Раз ты все равно это повторяешь несмотря на то, что тебе несколько раз пояснили за реальный и защищенный режим, тогда просто скажи: что ты понимаешь под «реальным» режимом и «графическим» режимом?

Я имею ввиду, что в графический можно переключиться только из реального режима. Я знаю что есть реальный и защищённый. Странно что опять написал то что написал. Я имел ввиду что можно подключиться из текстового в графический режим из реального режима. Вот щас точно написал как задумал.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от Unicode4all

что ты понимаешь под «реальным» режимом и «графическим» режимом?

Реальный режим. Ограниченный размер регистра, 2 байта, значит максимальный размер 255 * 255 байт адресации памяти. В реальном режиме нет виртуальной памяти. Доступно больше команд.
Графический режим. Как и текстовый, имеет свой адрес, где можно хранить данные, которые можно отобразить. У текстового режима 7 видео страниц. У графического не знаю сколько, но больше одного это точно. Потому как в opengl применяют смену видео страницы. Графические режим работает от видео карты и выполняет отображение пикселей.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от Unicode4all

Хорошо.

Вы уже о цене просвещения договорились? Не продешевите.

vodz ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Это как? У процессора вообще нет никаких переменных

anonymous
()
Ответ на: комментарий от u0atgKIRznY5

А если это так, то ноль в этом случае трактуется как копирование из памяти. mov eax, 0.

Ответили ещё или нет, но 0 это immediate

anonymous
()
Ответ на: комментарий от u0atgKIRznY5

Какая бурная фантазия. Хотел скинуть интересную инфу, но вижу, что ещё рано, с такими-то познаниями

anonymous
()
Ответ на: комментарий от fsb4000

Тогда просто не поймёшь чем этот код

return (f - 32.0) * (5.0/9.0);

лучше вот этого

return (f - 32.0) * 5.0/9.0;

Видимо тем, что это разный код)

anonymous
()
Ответ на: комментарий от u0atgKIRznY5

В реальном режиме по умолчанию инструкции оперируют 16 разрядными регистрами, имедиэйт значениями и ссылками в память. Если перед инструкцией идет префикс смены битности, то инструкция реагирует 32-разрядными регистрами, значениями и ссылками. Поэтому в реальном режиме памяти не меньше, чем в защищенном.

iliyap ★★★★★
()
Последнее исправление: iliyap (всего исправлений: 1)
Ответ на: комментарий от peregrine

Вещества во все поля, путаете теплое с мягким.

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

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

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

peregrine ★★★★★
()
Ответ на: комментарий от iliyap

Поэтому в реальном режиме памяти не меньше, чем в защищенном.

Откуда такая информация?

u0atgKIRznY5
() автор топика
Ответ на: комментарий от peregrine

чтобы так не позориться.

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

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

быстрее, потому что не обращается к памяти.

Я не спец в вопросах оптимизации современных ассемблеров, т. к. последний раз писал на нём в 90-е для 8086 и только для себя, т. к. для рабочих программ это уже и тогда было никому не нужно (за редким исключением).

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

Впрочем, ещё раз повторюсь, что обо всех тонкостях современной ассемблерной оптимизации могу не знать.

aureliano15 ★★
()
Ответ на: комментарий от aureliano15

Но, насколько мне известно, в современных процессорах используется кэш 1-ого уровня, который ничем не отличается от регистров по скорости

Ну вообще-то обращения к нему отличаются по скорости, если ты об этом

anonymous
()

ТС, а ты игноришь антонов, может быть?

anonymous
()
Ответ на: комментарий от anonymous

в современных процессорах используется кэш 1-ого уровня, который ничем не отличается от регистров по скорости

Ну вообще-то обращения к нему отличаются по скорости, если ты об этом

А ссылку на пруф можно? Это не подковырка, а действительно интересно об этом почитать, если оно так. 5-минутный гуглопоиск ничего не дал.

aureliano15 ★★
()
Ответ на: комментарий от u0atgKIRznY5

В линуксе графическая среда идёт отдельной программой, из-за чего есть задержки при переключении в режим ядра.

Извини, но это называется «в огороде бузина, а в Киеве дядька». :-)

Задержки при переключении в режим ядра связаны с обращением к ядру, например, к видеодрайверу. И это так и в Linux, и в Windows.

aureliano15 ★★
()
Ответ на: комментарий от anonymous

Первый код кодируется тремя командами.

1.Загружается f в регистр xmm0

2.Отнимается 32.0

3.Умножается на 0,555555556

Второй код кодируется четыремя командами

1.Загружается f в регистр xmm0

2.Отнимается 32.0

3.Умножается на 5.0

4.Делится на 9.0

Не один компилятор не оптимизирует второй код до первого, при любом уровне оптимизации компилятора.

fsb4000 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.