2013-12-16 3 views
6

Я использую libdis, библиотеку дизассемблера x86 от the bastard, и я пытаюсь выяснить, какие инструкции получают доступ к памяти.Является ли LEA единственной инструкцией в x86 с операндом памяти, который не имеет доступа к памяти?

С учетом этих двух команд:

mov eax, [ebx + 10] 
lea eax, [ebx + 10] 

В libdis, и перечислены с типом инструкции insn_mov и адресные операнды имеют одинаковые флаги в обоих случаях. Таким образом, единственный способ, которым я могу определить доступ к памяти, - это посмотреть на мнемонику команд.

Следовательно, мой вопрос: является ли LEA единственной инструкцией, использующей операнд памяти, который фактически не имеет доступа к памяти? Любые ссылки на ссылки были бы приятными.

+0

думаю поэтому ... не уверен, хотя. – Mehrdad

ответ

9

Семейство команд prefetch (prefetcht1, prefetcht2, prefetcht3, prefetchnta) попросит процессор пойти и вытащить эти строки памяти в кеш, потому что они понадобятся в ближайшее время. Но, документация Intel дает понять, что никакие ошибки не могут возникнуть из-за плохого адреса, переданного для предварительной выборки. Это значит, что программное обеспечение может передавать потенциально внеочередные адреса для предварительной выборки, не проверяя их сначала, чтобы данные могли быть в полете, пока эти проверки выполняются.

Предустановки также не имеют «выход», в отличие от LEA.

7

Intel имеет набор инструкций «NOP», которые принимают операнды адреса памяти.

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

+2

Кажется, что они имеют доступ к memoty [по словам Питера Ферри] (http://pferrie.host22.com/misc/lowlevel2.htm): «Интересно, что, несмотря на свое имя, он получает доступ к памяти, если байт Mod/RM сообщает об этом to, поэтому это «No OPeration» может вызвать ошибки страницы. В конце концов, это не совсем NOP ». –

+0

Действительно? Хм. Мне нужно вернуться и вернуться к этому коду; прикосновения к памяти могут быть медленными, если не в кеше. –

+0

Кажется, у меня другая история: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2010-September/003881.html Мой генератор кода генерирует предлагаемый код, включающий EAX, в контексте в котором EAX могут быть произвольными значениями. Если бы они действительно читали память, я получал бы ловушки, но у меня были проблемы с этим. Один из Ферри или Даббс ошибается. –

Смежные вопросы