Modern X86 Assembly Language Programming: 32-bit, 64-bit, SSE, and AVX