Nice. Two additions: 1. 32-bit assignment zero-extends to 64-bits, but 32-bit arithmetic sign-extends to 64-bits. So xor ebx, ebx sub ebx, 1 results in rbx=ffffffffffffffff. 2. Arithmetic operations do not accept 64-bit immediates. So add rbx, 123456789abcdef is out.