If you want to reverse engineer the meaning of individual bits of each machine instruction, instead of just reading the Intel manuals that were linked from the comments, you need to do it systematically: vary one thing at a time in the input assembly, and see how the machine code changes. For example: assemble
mov rax, rax
mov rax, rbx
mov rax, rcx
mov rax, rdx
mov rax, rsi
mov rax, rdi
mov rax, rbp
mov rax, rsp
mov rax, r8
mov rax, r9
mov rax, r10
mov rax, r11
mov rax, r12
mov rax, r13
mov rax, r14
mov rax, r15
mov eax, eax
mov eax, ebx
mov eax, ecx
mov eax, edx
mov eax, esi
mov eax, edi
mov eax, ebp
mov eax, esp
mov eax, r8d
mov eax, r9d
mov eax, r10d
mov eax, r11d
mov eax, r12d
mov eax, r13d
mov eax, r14d
mov eax, r15d
and you get
0: 48 89 c0 mov rax,rax
3: 48 89 d8 mov rax,rbx
6: 48 89 c8 mov rax,rcx
9: 48 89 d0 mov rax,rdx
c: 48 89 f0 mov rax,rsi
f: 48 89 f8 mov rax,rdi
12: 48 89 e8 mov rax,rbp
15: 48 89 e0 mov rax,rsp
18: 4c 89 c0 mov rax,r8
1b: 4c 89 c8 mov rax,r9
1e: 4c 89 d0 mov rax,r10
21: 4c 89 d8 mov rax,r11
24: 4c 89 e0 mov rax,r12
27: 4c 89 e8 mov rax,r13
2a: 4c 89 f0 mov rax,r14
2d: 4c 89 f8 mov rax,r15
30: 89 c0 mov eax,eax
32: 89 d8 mov eax,ebx
34: 89 c8 mov eax,ecx
36: 89 d0 mov eax,edx
38: 89 f0 mov eax,esi
3a: 89 f8 mov eax,edi
3c: 89 e8 mov eax,ebp
3e: 89 e0 mov eax,esp
40: 44 89 c0 mov eax,r8d
43: 44 89 c8 mov eax,r9d
46: 44 89 d0 mov eax,r10d
49: 44 89 d8 mov eax,r11d
4c: 44 89 e0 mov eax,r12d
4f: 44 89 e8 mov eax,r13d
52: 44 89 f0 mov eax,r14d
55: 44 89 f8 mov eax,r15d
and from this you can work out which bits of each instruction signify the source register and its width. Then you do the same thing holding the source register fixed and varying the destination register, and then you change mov
to add
and see what happens, and so on.
It's going to be a lot more work to do this with x86 than with a more uniformly structured CPU architecture, e.g., um, almost anything else.