Оптимизация Gnu Assembler (GAS) - PullRequest
2 голосов
/ 09 марта 2011

Я на самом деле изучаю сборку, и я пошел с Газом, но проблема в следующем:

1) Я знаю только синтаксис Intel и видел на странице «Газ с синтаксисом Intel» в некоторых случаях оптимизирован не очень хорошо. Это правильно или я не прав? Я говорю об этой сети:

http://wiki.osdev.org/FASM

2) Затем я также увидел (я не помню страницу), что факт, что газ может собираться в нескольких архитектурах, также замедляет собранную программу. Это правильно?

3) Какой ассемблер вы порекомендуете моему, который производит ВЫСОКО ОПТИМИЗИРОВАННЫЙ КОД? В других вопросах я видел, что каждый ассемблер в некоторых случаях может конвертировать в разные коды операций. Я был между YASM, FASM, GAS и NASM, но другие рекомендации приняты. ФАСМ, как известно, очень быстрый ...

Большое спасибо! Держите это великое сообщество!

1 Ответ

8 голосов
/ 09 марта 2011

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

Ассемблер выполняет только очень небольшое количество оптимизаций, которые в любом случае являются довольно тривиальными. Основным является то, что процессоры x86 имеют короткие прыжки, ближние и дальние прыжки. Большинство ассемблеров могут / будут оптимизировать переход, чтобы использовать наименьшую форму инструкции перехода, которая получит источник от адреса назначения. Даже если / если это не сделано автоматически, 1) это редко приводит к значительным изменениям в скорости (даже на уровне подсчета отдельных тактовых циклов), и 2) вы обычно можете добавить short или near к инструкции чтобы получить меньший размер (и ассемблер выдаст вам предупреждение, если оно не «достигнет»).

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

...