Какие проекты (помимо очевидного материала ОС) используют ассемблер?

Вы можете использовать следующий подход

  1. Найти позицию каретки n (индекс).
  2. Найти подстроку от позиции 0 до индекса
  3. Поиск количества новых строк в подстроке, полученных на шаге 2.

// Test

$(function() {
    $('#test').keyup(function() {
        var pos = 0;
        if (this.selectionStart) {
            pos = this.selectionStart;
        } else if (document.selection) {
            this.focus();

            var r = document.selection.createRange();
            if (r == null) {
                pos = 0;
            } else {

                var re = this.createTextRange(),
                rc = re.duplicate();
                re.moveToBookmark(r.getBookmark());
                rc.setEndPoint('EndToStart', re);

                pos = rc.text.length;
            }
        }
        $('#c').html(this.value.substr(0, pos).split("\n").length);
    });
});
​

Вот рабочий пример http://jsfiddle.net/S2yn3/1/

10
задан JCCyC 19 June 2009 в 18:11
поделиться

16 ответов

Boost , будучи таким же современным C ++, как и он, использует встроенную сборку для низкоуровневых критических для производительности битов, таких как атомные общие счетчики .

Изменить: как правильно отмечает @TokenMacGuy, «производительность» здесь неправильное слово. Boost использует язык ассемблера для вещей, которые не могут быть выполнены в стандартном C ++, таких как атомика (а встроенные функции компилятора по какой-то причине недоступны)

9
ответ дан 3 December 2019 в 15:06
поделиться

Иногда определенные функции не могут быть реализованы на языке высокого уровня, и вместо этого используется встроенная сборка. . Например, в библиотеке C ++ Qt есть встроенная сборка; Я считаю, что он используется как часть системы самоанализа объекта.

Кроме того, glibc (библиотека C для gcc) использует сборку для оптимизации. IIRC, одна из программных реализаций математики с плавающей запятой, имеет значительные фрагменты, написанные на ассемблере.

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

0
ответ дан 3 December 2019 в 15:06
поделиться

По словам Кнута, изучение эффективности алгоритмов. Он упоминает в своих книгах, что нет лучшего способа изучить, как работает алгоритм, чем писать на ассемблере.

0
ответ дан 3 December 2019 в 15:06
поделиться

В свое время я написал ассемблер IBM 370 для большого приложения (продукт, продаваемый продавцом, используемый крупными компаниями), которое собирало информацию от хуков в операционной системе. Однако я занимался только простым программированием: экраны, отчеты и т.д. на ассемблере. Он работал удивительно быстро, но был полностью на ассемблере. Я уверен, что он все еще работает и продается по ценам, значительно превышающим цены, типичные для программного обеспечения для платформ Windows и Linux.

0
ответ дан 3 December 2019 в 15:06
поделиться

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

0
ответ дан 3 December 2019 в 15:06
поделиться

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

0
ответ дан 3 December 2019 в 15:06
поделиться

В C, на фундаментальном уровне, довольно легко увидеть, как набор инструкций становится ассемблером (если вы понимаете основную архитектуру). Но иногда ассемблер не может быть лучше. Обратите внимание, что можно написать дрянной, неэффективный ассемблерный код так же легко, как написать дрянной код C. А ассемблер гораздо менее ремонтопригоден. И он нигде не переносится.

И все зависит от качества компилятора C, который вы используете. У некоторых получается лучше, у других. Большинство компиляторов позволяют вам видеть код ассемблера, который они генерируют. Если вы думаете, что можете добиться большего, а сегмент кода имеет решающее значение, сделайте это. В противном случае избегайте этого. Тщательно созданный C может быть очень близок к металлическому при наличии приличного компилятора.

1
ответ дан 3 December 2019 в 15:06
поделиться

Служебные функции, которые язык более высокого уровня не ожидал поддерживать. Старый пример относится к тому моменту, когда я пытался получить некоторые из тонкостей, которые C и Unix предоставляли при работе с Fortran на RSX-11M. Я хотел передать строки форматирования и использовать более простой стиль C. Printf () нужно было выполнить некоторые операции типа cast. В Фортране этой концепции не было, поэтому icast () и rcast () были написаны на ассемблере. Другие реализованные функции были move () и clone (). Это было сделано не столько для повышения эффективности, сколько для расширения концепций за пределы мышления Фортрана.

1
ответ дан 3 December 2019 в 15:06
поделиться

В последний раз я сталкивался с ассемблером, когда взламывал исходный код Quake I. Все математические библиотеки (особенно все, что касается точечных произведений) были написаны на MASM Джоном Кармаком. Этот материал требовал большого количества операций с плавающей запятой, и в то время C был не так хорош, как искусно созданный вручную ASM для операций с плавающей запятой. Кроме того, поскольку компьютеры были гораздо более ограничены ЦП, и поскольку Quake использовал ЦП для рендеринга, каждая отдельная операция имела значение, поэтому ASM работал лучше всего.

1
ответ дан 3 December 2019 в 15:06
поделиться

Кто-то использовал ассемблер для этого кода гольфа для преобразования чисел в слова .

1
ответ дан 3 December 2019 в 15:06
поделиться

Just as an anecdote: Roller Coaster Tycoon was written entirely (or almost) in x86 assembly by Chris Sawyer (wikipedia reference).

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

Speaking from experience, it's heavily used when testing and verifying new processor designs. The instruction set has to be stressed using code that a compiler won't necessarily generate. Rather than writing in some higher level language that may or may not compile to the instructions one wants to check, it's easier to write the assembly by hand.

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

Я считаю, что проект параллельных вычислений Folding @ Home использует оптимизированный код сборки для максимальной скорости. *

* Примечание: это не означает, что сборка всегда быстрее, чем C / C ++.

3
ответ дан 3 December 2019 в 15:06
поделиться

Если вы потратите много времени на просмотр выходных данных сборки исходного кода C / C ++, вы очень быстро заметите, что большинство хороших оптимизирующих компиляторов делают сборку лучше, чем даже хорошие программисты сборки. Решения о том, когда встраивать функцию, как обрабатывать циклы, пост или предварительное приращение (что многие компиляторы решают, что делать за вас сейчас) и т. Д. Желаем удачи перехитрить компилятор, у которого есть большое сообщество, разрабатывающее его, и гораздо лучшие возможности управлять адресами и определениями, чем вы, по крайней мере при нормальных обстоятельствах.

Даже драйверы устройств и ядра ОС обычно не пишутся с использованием большого количества ассемблера. Небольшие критически важные для производительности разделы программ реального времени - это то место, где вы найдете сборки в современных приложениях.

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

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

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

1
ответ дан 3 December 2019 в 15:06
поделиться

Более или менее очевидно, что программирование на ассемблере необходимо для серверной части компилятора и связанных технологий, таких как динамическая перекомпиляция симуляторов ЦП.

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

Редактировать: В наши дни игры делают большую часть своих вычислений на GPU. Получение максимальной отдачи от этих вычислительных ресурсов не всегда возможно с использованием только OpenGL или DirectX, а поставщики этих процессоров предоставляют множество инструментов, позволяющих выжать максимум из своего оборудования. Хотя Cuda или OpenCL являются хорошо известными терминами, они все еще находятся на относительно высоком уровне абстракции по сравнению с аппаратным обеспечением графического процессора, выполняя роль, которая очень похожа на роль C в типичных (фон Неймана) процессорах. Взгляните на страницы разработчиков для этих продуктов, и вы найдете десятки способов оптимального использования вычислительных ресурсов GPU на всех уровнях абстракции.

9
ответ дан 3 December 2019 в 15:06
поделиться

Одним из кодов определения скорости (после всего, что необходимо динамически для управления памятью) почти на каждом языке является подпрограмма, используемая средой выполнения (-library) для перемещения памяти. Move (), memcpy и т. Д., А также примитивы, такие как поиск байта (strchr) и т. Д.

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

0
ответ дан 3 December 2019 в 15:06
поделиться
Другие вопросы по тегам:

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