Alternar un bit específico
Así que he visto las preguntas como alternar un poco con ith positon y ¿Cómo establece, borra y alterna un solo bit?, pero me preguntaba si había una buena manera de alternar un poco en la posición i-ésima en el ensamblaje x86-64?
ntenté escribirlo en C y mirar a través del ensamblaje y no entiendo exactamente por qué hay algunas cosas que están ahí.
DO
unsigned long toggle(unsigned long num, unsigned long bit)
{
num ^= 1 << bit;
return num;
}
int main()
{
printf("%ld\n", toggle(100, 60));
return 0;
}
Conmutar conjunto de funciones de 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
¿Puede alguien guiarme por lo que está sucediendo en el nivel de ensamblaje para que pueda entender mejor esto y escribir mi propia función de alternar en x86-64?