Результаты поиска по запросу "assembly"
эти инструкции противоположны первому блоку, они представляют собой что-то вроде манипуляций со стеком. всегда выполняется
устил gcc -S по этому поводу: int main() { printf ("Hello world!"); }и я получил этот код сборки: .file "test.c" .section .rodata .LC0: .string "Hello world!" .text .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16, %esp ...
) превращает их в кучу переменных SSA, если это возможно. Так что, по крайней мере, в clang «антиоптимизация» не происходит, обычные оптимизации просто отключены.
бираю этот код на llvm clang Apple LLVM версии 8.0.0 (clang-800.0.42.1): int main() { float a=0.151234; float b=0.2; float c=a+b; printf("%f", c); }Я скомпилировал без спецификаций -O, но я также попытался с -O0 (дает то же самое) и -O2 ...
Задержки обхода при переключении доменов исполнительного блока
Я пытаюсь понять возможные задержки обхода при переключении доменов исполнительных блоков. Например, следующие две строки кода дают точно такой же результат. _mm_add_ps(x, _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(x), 8))); _mm_add_ps(x, ...
Как заставить VS2013 прекратить генерировать вызовы к __dtol3, __dtoui3 и другим функциям для приведения между целочисленными типами?
Я нахожусь в процессе обновления проекта Visual Studio 2010, который нацелен на RTOS INtime. Код, который выполняет операции приведения, не может связать. При исследовании выходных файлов "встроенной сборки" выясняется, что для некоторых операций ...
Я не думаю, что это возможно. Ошибка сегментации явно является проблемой обработки памяти.
должаю получать ошибку ошибки сегментации при запуске моего кода. Все скомпилировано хорошо, но я не могу заставить его делать то, что я хочу. Программа состоит в том, чтобы попросить пользователя ввести 3 целых числа, затем спросить ...
Спасибо за ваше объяснение, очень легко понять!
кто-нибудь объяснить мне, почему знак остатка отличается в этих случаях? Это ошибка эмулятора или реальные процессоры тоже это делают? [/imgs/70nna.png] 8 / -3 : quotient(AL) = -2 remainder(AH) = 2 -8 / 3 : quotient(AL) = -2 remainder(AH) = -2
порт (p2 или p3), так как результат входящей нагрузки, возможно, придется немедленно передать обратно в AGU. Теперь в случае конкурирующей операции хранилища, возможно, вместо этого используется AGU, и оптимизация прерывается, что приводит к повторению 9 циклов.
ла у меня есть установка ниже на IvyBridge, я вставлю код измерения полезной нагрузки в закомментированном месте. Первые 8 байтовbuf хранить адресbuf Сам я использую это для создания переносимых зависимостей: section .bss align 64 buf: resb 64 ...
В x86 для большинства инструкций по крайней мере один из операндов должен быть регистром (за некоторыми исключениями, например, inc / dec). Ваш код выглядит немного «старомодным» - такие инструкции, как «losdb» и «stosw», в значительной степени устарели, и вы обнаружите, что «mov al, [esi]; добавить esi, 1» и т. Д. Быстрее (но не настолько компактны в размер кода). Ознакомьтесь с руководствами по оптимизации Intel или AMD (поищите на сайтах разработчиков). Кроме того, есть ли причина, по которой «итерации» являются только байтом? Нет никакого преимущества в скорости, если быть байтом вместо меча (на самом деле он медленнее), и вы обернетесь, если входные данные> 255.
от вопрос уже есть ответ здесь: Неправильная комбинация кода операции и ошибки операндов [/questions/39958149/invalid-combination-of-opcode-and-operands-error] 1 ответSEGMENT .data print db "%d %d %d %d This is a test of printf", 10, 0 rowm dw ...
64-битное приложение: расположение в памяти
64-битная ОС относится к битовой ширине регистров общего назначения. Он способен обрабатывать 64 бита (данные + операции) одновременно. Мы знаем, что для того, чтобы 64-битная система была действительно полезной, программистам нужно писать ...
Не уверен, но, вероятно, то, что вы видели, имеет смысл. При первом запуске команды disas printf еще не вызывается, поэтому она не разрешена. Как только ваша программа вызывает метод printf при первом обновлении GOT, и теперь printf разрешается, и GOT указывает на реальную функцию. Таким образом, следующий вызов команды disas показывает реальную сборку printf.
0x00000000004004b6 <main+30>: callq 0x400398 <printf@plt>ибудь знает? ОБНОВИТЬ Почему дваdisas printf дать мне другой результат? (gdb) disas printf Dump of assembler code for function printf@plt: 0x0000000000400398 <printf@plt+0>: jmpq ...