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

Вопросы программирования на ассемблере (asm). ОБЯЗАТЕЛЬНО ТАКЖЕ пометьте процессором и / или набором команд, который вы используете, а также ассемблером. ПРЕДУПРЕЖДЕНИЕ. Вместо сборок .NET используйте тег [.net-assembly]. Для Java ASM используйте тег [java-bytecode-asm].

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

1
Почему 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 materialize a[] in memory instead of …

1
Почему 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>& input) { int i = 0; for (size_t …
14 c++  gcc  assembly 

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

1
Почему компиляторы настаивают на том, чтобы использовать регистр, сохраненный вызываемым пользователем?
Рассмотрим этот код 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 идентичны, за исключением того, …
10 c  gcc  assembly  clang  x86-64 

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

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

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


2
Что вызывает эту высокую изменчивость в циклах для простой узкой петли с -O0, но не -O3, на Cortex-A72?
Я провожу несколько экспериментов по получению высокосогласованных сред выполнения для куска кода. Код, который я сейчас синхронизирую, представляет собой довольно произвольную нагрузку на процессор: int cpu_workload_external_O3(){ int x = 0; for(int ind = 0; ind < 12349560; ind++){ x = ((x ^ 0x123) + x * 3) % 123456; } …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.