Переключить определенный бит

Так что я видел такие вопросы, как немного переключи в этом положении а также Как вы устанавливаете, очищаете и переключаете один бит?, но мне было интересно, есть ли хороший способ немного переключиться в i-й позиции в сборке x86-64?

Я пытался написать его на C и просмотреть сборку, и не совсем понимаю, почему есть некоторые вещи.

C:

unsigned long toggle(unsigned long num, unsigned long bit)
{
  num ^= 1 << bit;
  return num;
}

int main()
{
  printf("%ld\n", toggle(100, 60));
  return 0;
}

Переключить функцию сборки из GDB:

<toggle>
push rbp
mov rbp, rsp
mov QWORD PTR [rbp-0x8],rdi
mov QWORD PTR [rbp-0x10],rsi
mov rax, QWORD PTR [rbp-0x10]
mov edx, 0x1
mov ecx, eax
shl edx, cl
mov eax, edx
cdqe
xor QWORD PTR [rbp-0x8],rax
mov rax, QWORD PTR [rbp-0x8]
pop rbp
ret

Может кто-нибудь рассказать мне, что происходит на уровне сборки, чтобы я мог лучше понять это и написать свою собственную функцию переключения в x86-64?

Ответы на вопрос(1)

Ваш ответ на вопрос