Is LEA the only instruction in x86 with a memory operand that does not have memory access?

I am using libdis , the x86 disassembler library from bastard , and I'm trying to figure out which instructions are accessing memory.

Regarding these two instructions:

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

In libdis both are listed with the insn_mov instruction insn_mov , and address operands have the same flags in both cases. Thus, the only way I can determine memory access is to look at the command mnemonics.

Therefore, my question is: is LEA the only instruction using a memory operand that does not actually access memory? Any links to links would be nice.

+6
source share
2 answers

The prefetch family of commands (prefetcht1, prefetcht2, prefetcht3, prefetchnta) will ask the processor to go and pull these memory lines into the cache, because they will be needed in the near future. But, Intel documentation makes it clear that no errors can occur due to a bad address passed for prefetching. This means that the software can transmit potentially extraordinary addresses for prefetching without first checking them so that the data can be in flight while these checks are performed.

Prefetching also does not have an β€œexit”, unlike LEA .

+9
source

Intel has a set of "NOP" instructions that accept memory addressing operands.

I do not think they relate to memory; in fact, I'm not sure that they actually form an address and run it through a memory card and check the protection. I do not think so; I built a compiler that generates a wide range of them with different addressing modes as NOP stuffs of varying sizes and never gets a trap.

+7
source

All Articles