Газ против nasm: какой ассемблер производит лучший код?

Оба инструмента преобразуют инструкции сборки непосредственно в машинный код, но можно ли определить, какой из них производит самый быстрый и чистый код?

6 ответов

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


Я не знаю об этих двух конкретных инструментах, но есть некоторые инструкции, которые могут быть закодированы по-разному:

  • ADD AX,1 имеет значение 05 01 или 81 c0 01 или fe c0
  • INT 3 - либо cc, либо cd 03
  • Новые AVX инструкции, которые расширяют двухбайтовые инструкции SSE, либо будут иметь 2-байтный или 3-байтовый префикс. Все двухбайтовые префиксы могут быть закодированы как 3-байтовые префиксы.

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


В качестве побочного элемента синтаксиса. Вы можете иметь GAS отлично работать с синтаксисом Intel, поставив следующую строку вверху исходного файла:

.intel_syntax noprefix

Я использую синтаксис Intel тоже для всех моих assmebly потребностей. Это кажется гораздо более естественным, чем синтаксис AT & T. И это экономит несколько нажатий клавиш: -).


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


Очевидно, что nasm, потому что синтаксис Intel выглядит намного чище, чем синтаксис AT & T.


@Brian: это не вопрос...

@cyber98834: Ну, ассемблер делает то, что должен делать каждый ассемблер: перевести каждую инструкцию в свой код операции.

Нет оптимизации.

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

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

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

Надеюсь, вы понимаете, что я пытаюсь сказать.

Я предлагаю вам купить (или искать некоторые pdf файлы, но я не знаю, является ли это законным) Michael Abrash Graphics Programming Black Book, который охватывает многие уроки оптимизации.

licensed under cc by-sa 3.0 with attribution.