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

Я буду идти вразрез с мелкой частицей здесь и говорить "Да"

, я переключаюсь от Гражданского строительства до программирования (Бетон Сосет!). Мое математическое образование состоит из обычного первого материала года, второе и третье Исчисление года (Различный EQ, интеграция объема, Ряд, преобразования Фурье и преобразования Лапласа) и Числовой Аналитический ход.

я нахожу, что моей математике невероятно недостает программирования. Существуют все области Дискретной математики и логики, которую я пропускаю, и я только выживаю из-за обширной библиотеки учебников, Википедии и Вольфрама. Большинство усовершенствованных алгоритмов основано на высшей математике, и я не могу разработать усовершенствованные алгоритмы, не проводя обширное исследование (По существу эквивалент ценности полукурса работы.) Я, конечно, не могу придумать НОВЫЕ алгоритмы, поскольку у меня просто нет математических основ как плеч гигантов, на которых можно стоять.

10
задан starblue 14 November 2009 в 09:24
поделиться

6 ответов

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

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

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

8
ответ дан 3 December 2019 в 13:29
поделиться

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

.intel_syntax noprefix

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

5
ответ дан 3 December 2019 в 13:29
поделиться

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

27
ответ дан 3 December 2019 в 13:29
поделиться

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

4
ответ дан 3 December 2019 в 13:29
поделиться

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

2
ответ дан 3 December 2019 в 13:29
поделиться

@ Брайан: вопрос был не в этом ...

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

Здесь нет оптимизации.

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

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

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

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

Я предлагаю вам купить (или поискать какие-нибудь файлы в формате PDF, но я не знаю Если это законно) Черная книга Майкла Абраша по программированию графики, в которой содержится множество уроков по оптимизации.

1
ответ дан 3 December 2019 в 13:29
поделиться
Другие вопросы по тегам:

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