Könnten Sie einige weitere Erklärung geben was nicht funktioniert? Vielleicht ein einfaches Beispiel für die Verwendung oder so. Es ist schwer zu erraten, was mit dem Code nicht stimmt.
Eine Sache, die bisher kitschig aussieht: Sie führen einen Bit-Test-Opcode aus, ignorieren aber das Ergebnis. Das Bit, das Sie testen (und setzen), endet nach dem Opcode im Übertrags-Flag.
Wenn Sie das Ergebnis erhalten möchten, benötigen Sie eine zusätzliche Anweisung, um das Übertrags-Flag in ein anderes Ausgangsregister zu bekommen. (SBB EAX, EAX oder so).
Andernfalls - wenn Sie das Ergebnis nicht brauchen - es ist viel billiger die BTS Anweisung mit drei einfacheren Assembler Opcodes zu ersetzen:
Etwas in diese Richtung:
; bit-index in cl
; Value in ebx
; eax used as a temporary (trashed)
mov eax, 1
shl eax, cl
or ebx, eax
Da ich dies nicht tun Haben Sie mit Ihrer exakten Version zu tun, die eine Assemblerausgabe eines einfachen Testfalls ausführt, könnte uns einen Hinweis geben, was falsch läuft.