Результаты поиска по запросу "assembly"

5 ответов

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

+ class bar { int i; char b; float d; }; void foo ( bar arg ); void foo ( bar &arg ); void foo ( bar *arg );это пример класса / структуры и функций у меня есть несколько вопросов В чем разница между первым и вторым способами передачи аргумента ...

1 ответ

будучи бинарным переводом, я бы начал с перевода (их в эквивалентные nops в целевой системе) Как только все заработает, оптимизируйте мертвый код. В то же время, так как эта строка инструкций попалась на глаза, попытайтесь понять, для чего они были, возможно, ожидая, что аппаратные средства что-то предпримут, и убедитесь, что ваша переведенная система функционирует так же.

лизую бинарный перевод и мне приходится иметь дело с последовательностями NOP (0x90) длиной около 16 кодов операций. Лучше ли для производительности ставить JMP (до конца) при запуске таких последовательностей?

3 ответа

Идея здесь состоит в том, чтобы загрузить операнды перед блокировкой EBX, а также избежать любой косвенной адресации при установке значения EBX для CMPXCHG8B. Я фиксирую жесткий регистр ESI для нижней половины операнда, потому что если бы я этого не сделал, GCC мог бы свободно использовать любой другой уже принятый регистр, если бы он мог доказать, что значение было равно. Регистр EDI сохраняется вручную, так как простое добавление его в закрытый список регистров дросселей GCC с «невозможными перезагрузками», вероятно, из-за высокого давления в регистре. PUSH / POP избегается при сохранении EDI, поскольку другие операнды могут быть адресованы ESP.

аюсь написать GCC Inline Asm для CMPXCHG8B для ia32. Нет я не могу использовать__sync_bool_compare_and_swap, Он должен работать с и без -FPIC. Пока лучшее, что у меня есть (РЕДАКТИРОВАТЬ: не работает в конце концов, см. мой собственный ответ ...

ТОП публикаций

3 ответа

Я соответственно отредактировал

аюсь использовать инструкцию WBINV для Linux, чтобы очистить кэш L1 процессора. Следующая программа компилируется, но выдает ошибку сегментации, когда я пытаюсь ее запустить. int main() {asm ("wbinvd"); return 1;} Я использую gcc 4.4.3 и ...

2 ответа

Надеюсь, это все еще актуально для вас. Вы можете сохранить ячейку памяти в регистре, а не с помощью метки. Таким образом, вы записываете адрес памяти, который находится в регистре, а не просто записываете на метку каждый раз. Затем, по мере изменения регистра адресов (увеличивая его для каждого символа), вы будете записывать в новые области памяти.

уйста, кто-нибудь знает, как кодировать ввод строки на ассемблере? я используюint 21 для отображения и ввода символов.

2 ответа

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

я есть несколько файлов NASM, которые обычно имеют структуру: [BITS 64] [ORG 0x0000000000200000] start: ... retЯ собираю их так: nasm -f bin abc.asmЯ хотел бы написать некоторые из них, используя вместо этого ГАЗ. Два вопроса: Какие директивы ...

3 ответа

на некоторых машинах есть счетчики попаданий в кэш, которые одинаково хорошо работают

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

2 ответа

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

рке x86 есть префикс LOCK, который можно применить к инструкции, чтобы сделать ее атомарной. Это атомарность во всех ядрах? Какова обычная задержка? Для обычного мьютекса какая инструкция заблокирована? Благодарю. PS: меня учили, что в системах, ...

1 ответ

Вы не можете использовать «смещение» для локальных переменных, так как их адрес не фиксируется во время компиляции / сборки. Вы должны использовать LEA (Load Effective Address). За кулисами местные жители упоминаются как [ESP + xx] или [EBP + xx] :)

семблере, если мы используем mov eax, dword ptr[ebx]тогда это означает скопировать значение, указанное в ebx (ebx содержит значение адреса, а не фактическое значение, эта инструкция копирует фактическое значение в адресе)? Если мы ...

16 ответов

, Если бы это было так, оптимизирующие компиляторы использовали бы простое побитовое И при компиляции

ы самые быстрые тесты делимости? Скажем, учитывая архитектуру с прямым порядком байтов и 32-разрядное целое число со знаком: как очень быстро вычислить, что число делится на 2,3,4,5, ... до 16? ВНИМАНИЕ: данный код только ПРИМЕР. Каждая строка ...