Alternar um bit específico
Então eu vi as perguntas comotoggle um pouco no i-ésimo posicionamento eComo você define, limpa e alterna um único bit?, mas eu queria saber se havia uma boa maneira de alternar um pouco na i-ésima posição na montagem x86-6
Tentei escrever em C e examinar a montagem e não entendo exatamente por que existem algumas coisa
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;
}
Montagem da função de alternância do 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
Alguém pode me orientar sobre o que está acontecendo no nível da montagem para que eu possa entender melhor isso e escrever minha própria função de alternância em x86-6