I do not know of any comprehensive list, but here (32-bit/64-bit) is a very useful reference which contains most of the information you want.
Note their description of the operand columns:
If an operand is set up using italic, it is an implicit operand, which is not explicitly used. If an operand is set up using boldface, it is modified by the instruction.
So for example, in the 8-bit version of the MUL
instruction (AX = AL * r/m8
), they list the operands as AX, AL, and r/m8. Note that the first two operands are italicized because they are implicit, and the first operand is bolded because it is modified.
Unfortunately, this does not cover all cases of register modification. For example, MOVSD
only lists m32 and m32 for the operands and does not mention the fact that ESI
and EDI
are dereferenced and then adjusted by 4.
Still, it covers almost all cases, including: AAA
, AAD
, AAM
, AAS
, CBW
, CDQ
, CLTS
, CMPXCHG
, CMPXCHG8B
, CPUID
, CWD
, CWDE
, DAA
, DAS
, DIV
, ENTER
, IDIV
, IMUL
, IN
, LAHF
, LEAVE
, LGDT
, LIDT
, LLDT
, LMSW
, LOOP
, LOOPcc
, MONITOR
, MUL
, OUT
, POPA
, PUSHA
, RDMSR
, RDPMC
, RDTSC
, RDTSCP
, REP
, SAHF
, SALC
, SGDT
, WRMSR
, and many of the float and SSE instructions, as well as a couple instructions that do not have mnemonics.
It does not (completely) cover some others, including: CMPS
, INS
, LODS
, MASKMOVDQU
, MASKMOVQ
, MOVS
, OUTS
, SCAS
, STOS
. Modifications to the stack pointer are generally not mentioned.
If you care about segment registers, there are also LDS
, LES
, LFS
, LGS
, LSS
, and the segment prefixes. Several other instructions can implicitly modify the segment registers, however. Additionally, instructions that access memory implicitly access cached information from the segment registers.
Note: The above are not comprehensive lists!
Ultimately, you need to read the Intel Manuals to get the official documentation, but this chart should still save you a lot of time.
jmp
being the only one I can think of right now. Conditional jumps access flags (do they count as registers?),call
/ret
access[er]sp
, even 2 address instructions likemovsb
access[er]di
/[er]si
, and[er]cx
if they include therep
prefix.implicitly
mean "registers that aren't mentioned, explicitly, in the opcode/arguments" ?