Вопросы с тегом «assembly»

86
Что означает «rep; нет; " имеется ввиду в сборке x86? Это то же самое, что и инструкция «пауза»?

Что rep; nopзначит? Это то же самое, что и pauseинструкция? Это то же самое, что rep nop(без точки с запятой)? Чем отличается простая nopинструкция? По-разному ли ведет себя на процессорах AMD и Intel? (бонус) Где официальная документация к этим инструкциям? Мотивация на этот вопрос После...

85
Почему T * может быть передано в регистр, а unique_ptr <T> не может?

Я смотрю выступление Чендлера Каррута в CppCon 2019: Нет абстракций с нулевой стоимостью в нем он приводит пример того, как он был удивлен тем, сколько накладных расходов вы понесли, используя std::unique_ptr<int>овер int*; этот сегмент начинается примерно в момент времени 17:25. Вы можете...

84
Как работает стек на языке ассемблера?

В настоящее время я пытаюсь понять, как работает стек, поэтому я решил научиться некоторому языку ассемблера , я использую эту книгу: http://savannah.nongnu.org/projects/pgubook/ Я использую Gas и занимаюсь разработкой на Linux Mint . Меня что-то немного смущает: Насколько мне известно, стек - это...

84
Оператор if vs оператор if-else, что быстрее? [закрыто]

Закрыто . Этот вопрос должен быть более конкретным . В настоящее время он не принимает ответы. Хотите улучшить этот вопрос? Обновите вопрос, чтобы он фокусировался только на одной проблеме, отредактировав этот пост . Закрыт 3 года назад . Уточните этот вопрос На днях я спорил с другом по поводу...

84
Производительность Blazor

Я бы хотел начать использовать Blazor, несмотря на то, что он все еще находится на альфа-уровне. Насколько я понимаю, Blazor использует WebAssembly для компиляции C # на стороне клиента. И у меня есть такие вопросы: Работает ли этот подход быстрее, чем, например, React / Vue, скомпилированный на...

83
Производительность цикла кода C [продолжение]

Этот вопрос продолжает мой вопрос здесь (по совету Mystical): Производительность цикла кода C Продолжая свой вопрос, когда я использую упакованные инструкции вместо скалярных инструкций, код, использующий встроенные функции, будет выглядеть очень похоже: for(int i=0; i<size; i+=16) { y1 =...

82
Какова цель кода операции CIL nop?

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

82
Go не связывает мою сборку: неопределенная внешняя функция

Я пытаюсь написать немного SIMD в основном для учебных целей. Я знаю, что Go может связывать сборку, но я не могу заставить его работать правильно. Вот самый простой пример, который я могу сделать (поэлементное умножение векторов): vec_amd64.s (примечание: под фактическим файлом стоит пробел,...

81
Почему панель GCC работает с NOP?

Я работал с C некоторое время и совсем недавно начал разбираться в ASM. Когда я компилирую программу: int main(void) { int a = 0; a += 1; return 0; } В дизассемблере objdump есть код, но после ret нет: ... 08048394 <main>: 8048394: 55 push %ebp 8048395: 89 e5 mov %esp,%ebp 8048397: 83 ec 10...

64
Требуют ли инструкции x86 своей собственной кодировки, а также всех своих аргументов для одновременного присутствия в памяти?

Я пытаюсь выяснить, возможно ли запустить виртуальную машину Linux, чья память поддерживается только одной физической страницей. Чтобы смоделировать это, я изменил обработчик ошибок вложенной страницы в KVM, чтобы удалить текущий бит из всех записей вложенной таблицы страниц (NPT), кроме той,...

21
Почему GCC агрегирует инициализацию массива в первую очередь с нулями, включая ненулевые элементы?

Почему gcc заполняет весь массив нулями вместо оставшихся 96 целых чисел? Все ненулевые инициализаторы находятся в начале массива. void *sink; void bar() { int a[100]{1,2,3,4}; sink = a; // a escapes the function asm("":::"memory"); // and compiler memory barrier // forces the compiler to...

14
Почему GCC не может предположить, что std :: vector :: size не изменится в этом цикле?

Я обратился к коллеге, который if (i < input.size() - 1) print(0);будет оптимизирован в этом цикле, чтобы input.size()он не читался на каждой итерации, но оказалось, что это не так! void print(int x) { std::cout << x << std::endl; } void print_list(const std::vector<int>&...

11
Точная копия машинного кода работает на 50% медленнее, чем исходная функция

Я немного экспериментировал с выполнением из ОЗУ и флэш-памяти во встроенных системах. Для быстрого прототипирования и тестирования я в настоящее время использую Arduino Due (SAM3X8E ARM Cortex-M3). Насколько я вижу, среда выполнения и загрузчик Arduino здесь не должны иметь никакого значения. Вот...

11
Доступ к DOM в WebAssembly

Недавно я начал использовать WebAssembly для некоторых своих проектов. Я делаю это, потому что я слышал, что Wasm быстрее, чем javaScript. Когда я фактически начал свой первый проект Wasm, я понял, что не знаю, как манипулировать DOM в C ++. Есть ли способ сделать это с помощью...

10
Поддерживает ли современное видеооборудование ПК текстовый режим VGA в HW или Эмуляция BIOS (в режиме управления системой)?

Что в действительности происходит на современном оборудовании ПК, загруженном в устаревшем 16-разрядном режиме BIOS MBR, когда вы сохраняете байт, например '1'(0x31), в кадровый буфер VGA text (mode 03) по физическому линейному адресу B8000? Насколько медленно работает mov [es:di], eaxмагазин с...

10
Почему компиляторы настаивают на том, чтобы использовать регистр, сохраненный вызываемым пользователем?

Рассмотрим этот код C: void foo(void); long bar(long x) { foo(); return x; } Когда я компилирую его в GCC 9.3 с помощью -O3или -Os, я получаю это: bar: push r12 mov r12, rdi call foo mov rax, r12 pop r12 ret Выходные данные из clang идентичны, за исключением того, что они выбраны rbxвместо...

10
Действительно ли L2 HW prefetcher действительно полезен?

Я нахожусь на Whiskey Lake i7-8565U и анализирую счетчики перфектов и время для копирования 512 КБ данных (в два раза больше, чем размер кэша L2), и столкнулся с некоторым недоразумением относительно работы устройства предварительной выборки L2 HW. В Руководстве Intel Vol.4 MSR есть MSR, 0x1A4бит 0...

10
Почему DOS устанавливает регистр SP в 0xFFFE после загрузки файла .COM?

На странице википедии о файлах .COM https://en.wikipedia.org/wiki/COM_file она гласит: Файлы .COM в DOS устанавливают все регистры сегмента x86 на одно и то же значение, а регистр SP (указатель стека) - на 0xFFFE, поэтому стек начинается с самой верхней части сегмента памяти и оттуда работает вниз....