Хорошо, у меня есть функция C ++, в которой я пытаюсь использовать встроенную сборку
void ToggleBit(unsigned char &Byte, unsigned int Bit)
{
/* In C:
* Byte ^= (1<<Bit);
*/
__asm
{
push edx
push ecx
mov ecx, Bit
xor edx, edx
mov edx, 1
sal dl, cl
xor BYTE PTR [Byte], dl
pop ecx
pop edx
}
}
Это должно работать, верно? Поскольку Байт является ссылкой (которая по сути является постоянным указателем), для доступа к данным необходимо разыменовать его, но это не сработало!
После отладки следующий код:
mov edx, Byte
;edx = 0x0040f9d3
mov bl, BYTE PTR [Byte]
;bl = 0xd3
Я не понимаю, почему это вообще произошло.